1<?php
2
3class Profile_BuilderTest extends PHPUnit_Framework_TestCase
4{
5	function testBasicProfile()
6	{
7		$builder = new Services_Workspace_ProfileBuilder;
8
9		$expect = <<<EXPECT
10{  }
11EXPECT;
12		$this->assertIs($expect, $builder->getContent());
13	}
14
15	function testAddObjects()
16	{
17		$builder = new Services_Workspace_ProfileBuilder;
18		$builder->addObject(
19			'wiki_page',
20			'foo',
21			[
22				'name' => 'Foo',
23				'content' => 'Hello',
24			]
25		);
26		$builder->addObject(
27			'trackerfield',
28			'date',
29			[
30				'tracker' => $builder->ref('tracker'),
31			]
32		);
33
34		$expect = <<<EXPECT
35objects:
36  -
37    type: wiki_page
38    ref: foo
39    data:
40      name: Foo
41      content: Hello
42  -
43    type: trackerfield
44    ref: date
45    data:
46      tracker: \$tracker
47EXPECT;
48		$this->assertIs($expect, $builder->getContent());
49	}
50
51	function testGroups()
52	{
53		$builder = new Services_Workspace_ProfileBuilder;
54		$builder->addGroup('Base', $builder->user('group'));
55		$builder->addGroup('Viewer', $builder->user('group') . ' Viewer', true);
56		$builder->setManagingGroup('Base');
57
58		$expect = <<<EXPECT
59mappings:
60  Base: '\$profilerequest:group\$undefined\$'
61  Viewer: '\$profilerequest:group\$undefined\$ Viewer'
62permissions:
63  Base:
64    description: '\$profilerequest:group\$undefined\$'
65    objects:
66      -
67        type: group
68        id: Base
69        allow:
70          - group_view
71          - group_view_members
72          - group_add_member
73          - group_remove_member
74      -
75        type: group
76        id: Viewer
77        allow:
78          - group_view
79          - group_view_members
80          - group_add_member
81          - group_remove_member
82  Viewer:
83    description: '\$profilerequest:group\$undefined\$ Viewer'
84    autojoin: 'y'
85    objects:
86      -
87        type: group
88        id: Base
89        allow:
90          - group_view
91          - group_view_members
92      -
93        type: group
94        id: Viewer
95        allow:
96          - group_view
97          - group_view_members
98EXPECT;
99		$this->assertIs($expect, $builder->getContent());
100	}
101
102	function testReplaceSimpleSyntax()
103	{
104		$builder = new Services_Workspace_ProfileBuilder;
105		$builder->addGroup('Base', '{group}');
106		$builder->setManagingGroup('Base');
107
108		$expect = <<<EXPECT
109mappings:
110  Base: '\$profilerequest:group\$undefined\$'
111permissions:
112  Base:
113    description: '\$profilerequest:group\$undefined\$'
114    objects:
115      -
116        type: group
117        id: Base
118        allow:
119          - group_view
120          - group_view_members
121          - group_add_member
122          - group_remove_member
123EXPECT;
124		$this->assertIs($expect, $builder->getContent());
125	}
126
127	function testAssignDefaultGroup()
128	{
129		$builder = new Services_Workspace_ProfileBuilder;
130		$builder->addObject(
131			'wiki_page',
132			'foo',
133			[
134				'name' => 'Foo',
135				'content' => 'Hello',
136				'categories' => $builder->user('category'),
137			]
138		);
139
140		$expect = <<<EXPECT
141objects:
142  -
143    type: categorize
144    data:
145      type: wiki_page
146      object: \$foo
147      categories:
148        - '\$profilerequest:category\$undefined\$'
149  -
150    type: wiki_page
151    ref: foo
152    data:
153      name: Foo
154      content: Hello
155EXPECT;
156		$this->assertIs($expect, $builder->getContent());
157	}
158
159	private function assertIs($expect, $content)
160	{
161		$matches = WikiParser_PluginMatcher::match($content);
162
163		foreach ($matches as $plugin) {
164			$this->assertEquals(trim($expect), trim($plugin->getBody()));
165		}
166	}
167}
168