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