1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7
8class Perms_BuilderTest extends PHPUnit_Framework_TestCase
9{
10	function testDefaultBuilder()
11	{
12		$builder = new Perms_Builder;
13		$perms = $builder->build();
14
15		$expect = $this->getExpect();
16		$this->assertEquals($expect, $perms);
17	}
18
19	function testBuildAdminPermissionMap()
20	{
21		$builder = new Perms_Builder;
22		$perms = $builder
23			->withCategories(true)
24			->build();
25
26		$expect = $this->getExpect(true);
27		$this->assertEquals($expect, $perms);
28	}
29
30	function testAdminIndirects()
31	{
32		$builder = new Perms_Builder;
33		$perms = $builder->withDefinitions(
34			[
35				[
36					'name' => 'tiki_p_admin_wiki',
37					'type' => 'wiki',
38					'scope' => 'object',
39					'admin' => true,
40				],
41				[
42					'name' => 'tiki_p_edit',
43					'type' => 'wiki',
44					'scope' => 'object',
45					'admin' => false,
46				],
47			]
48		)->build();
49
50		$expect = $this->getExpect(
51			false,
52			['edit' => 'admin_wiki',]
53		);
54
55		$this->assertEquals($expect, $perms);
56	}
57
58	function testGlobalChecksOnly()
59	{
60		$builder = new Perms_Builder;
61
62		$perms = $builder->withDefinitions(
63			[
64				[
65					'name' => 'tiki_p_search',
66					'type' => 'tiki',
67					'scope' => 'global',
68					'admin' => false,
69				],
70				[
71					'name' => 'tiki_p_edit',
72					'type' => 'wiki',
73					'scope' => 'object',
74					'admin' => false,
75				],
76			]
77		)->build();
78
79		$expect = $this->getExpect(false, [], ['search']);
80		$this->assertEquals($expect, $perms);
81	}
82
83	private function getExpect($categories = false, $indirectMap = [], $globals = [])
84	{
85		$expect = new Perms;
86		$expect->setPrefix('tiki_p_');
87
88		$expect->setCheckSequence(
89			[
90				$globalAdminCheck = new Perms_Check_Alternate('admin'),
91				$fixedResolverCheck = new Perms_Check_Fixed($globals),
92				new Perms_Check_Direct,
93				new Perms_Check_Indirect($indirectMap),
94			]
95		);
96
97		$expect->setResolverFactories(
98			array_values(
99				array_filter(
100					[
101						new Perms_ResolverFactory_ObjectFactory,
102						$categories ? new Perms_ResolverFactory_CategoryFactory : null,
103						new Perms_ResolverFactory_ObjectFactory('parent'),
104						$categories ? new Perms_ResolverFactory_CategoryFactory('parent') : null,
105						new Perms_ResolverFactory_GlobalFactory,
106					]
107				)
108			)
109		);
110
111		$resolver = $expect->getAccessor()->getResolver();
112		$globalAdminCheck->setResolver($resolver);
113		$fixedResolverCheck->setResolver($resolver);
114
115		return $expect;
116	}
117}
118