1<?php
2
3class ProfileTest extends TikiTestCase
4{
5	/**
6	 * @dataProvider versionProfiles
7	 *
8	 * @param $profileData
9	 * @param $expected
10	 */
11	public function testGetTikiSupportedVersions($profileData, $expected)
12	{
13		$profile = Tiki_Profile::fromString($profileData);
14
15		$this->assertEquals($expected, $profile->getTikiSupportedVersions());
16	}
17
18	public function versionProfiles()
19	{
20		return [
21			[
22				'{CODE(caption=>YAML,wrap=1)}' .
23				\Symfony\Component\Yaml\Yaml::dump(
24					[
25						'profile' => [
26							'tiki' => '^19.0'
27						],
28						'preferences' => [
29							'feature_trackers' => 'y'
30						],
31					]
32				) . '{CODE}',
33				'^19.0'
34			],
35		];
36	}
37
38	/**
39	 * @dataProvider tikiVersionCompatibility
40	 * @param $profileData
41	 * @param $tikiVersion
42	 * @param $expected
43	 */
44	public function testTikiVersionCompatibility($profileData, $tikiVersion, $expected)
45	{
46
47		$profile = Tiki_Profile::fromString($profileData);
48
49		$this->assertEquals($expected, $profile->isCompatible($tikiVersion));
50	}
51
52	public function tikiVersionCompatibility()
53	{
54		$code = "{CODE(caption=>YAML,wrap=1)}\n%s\n{CODE}";
55
56		$base = [
57			'profile' => [
58				'tiki' => '^19.0',
59			],
60			'preferences' => [
61				'feature_trackers' => 'y'
62			]
63		];
64
65		$versionsLoop = [
66			[
67				'constraint' => '>18.3',
68				'tiki' => [
69					'19.0alpha',
70					'19.0beta1',
71					'19.0RC1',
72					'19.0',
73					'19.1',
74				],
75				'expected' => true
76			],
77			[
78				'constraint' => '^19.0',
79				'tiki' => [
80					'19.0',
81					'19.1',
82				],
83				'expected' => true
84			],
85			[
86				'constraint' => '^19.0',
87				'tiki' => [
88					'15.0',
89					'18.3',
90					'20.0alpha',
91					'20.0',
92				],
93				'expected' => false
94			],
95			[
96				'constraint' => '^19.0-stable',
97				'tiki' => [
98					'19.0alpha',
99					'19.0beta1',
100					'19.0RC1',
101				],
102				'expected' => false
103			],
104		];
105
106		$data = [];
107		foreach ($versionsLoop as $item) {
108			$base['profile']['tiki'] = $item['constraint'];
109			$expected = $item['expected'];
110			foreach ($item['tiki'] as $version) {
111				$data[] = [
112					sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
113					$version,
114					$expected
115				];
116			}
117		}
118
119		$base['profile']['tiki'] = '';
120		$data[] = [
121			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
122			'19.x',
123			true
124		];
125
126		unset($base['profile']['tiki']);
127		$data[] = [
128			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
129			'19.x',
130			true
131		];
132
133		unset($base['profile']);
134		$data[] = [
135			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
136			'19.x',
137			true
138		];
139
140		return $data;
141	}
142
143	/**
144	 * @dataProvider profileDependencies
145	 */
146	public function testGetReferences($profileData, $expected)
147	{
148		$profile = Tiki_Profile::fromString($profileData);
149
150		$this->assertEquals($expected, $profile->getReferences());
151	}
152
153	/**
154	 * @dataProvider profileReferences
155	 * @param $reference
156	 * @param $expected
157	 */
158	public function testIsValidReference($reference, $expected)
159	{
160		$this->assertEquals($expected, Tiki_Profile::isValidReference($reference));
161	}
162
163	public function profileReferences()
164	{
165		return [
166			['$profiles.tiki.org:Test_All_Themes:Test_All_Themes', true],
167			['$profiles.tiki.org:Test_All_Themes', true],
168			['$profileobject:user_tracker_acceptedTerms$', true],
169			['$profilestikiorg:BugTrackerProfile:bug_tracker', true],
170			['$profiles.tiki.org:Client.Management.Profile:client_tracker', false],
171			['$profiles.tiki.org:Sample.Data.Profile', false]
172		];
173	}
174
175	public function profileDependencies()
176	{
177		$code = "{CODE(caption=>YAML,wrap=1)}\n%s\n{CODE}";
178
179		$base = [
180			'dependencies' => [
181				'$profiles.tiki.org:Test_All_Themes:Test_All_Themes',
182			]
183		];
184
185		$data = [];
186		$data[] = [
187			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
188			[['domain' => 'profiles.tiki.org', 'profile' => 'Test_All_Themes', 'object' => 'Test_All_Themes']],
189		];
190
191		$base['dependencies'] = ['$profiles.tiki.org:Test_All_Themes'];
192		$data[] = [
193			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
194			[['domain' => 'profiles.tiki.org', 'profile' => 'Test_All_Themes', 'object' => null]]
195		];
196
197		$base['dependencies'] = ['$profiles.tiki.org:Test_All_Themes', '$profiles.tiki.org:Test_All_Modules:Test_All_Modules'];
198		$data[] = [
199			sprintf($code, \Symfony\Component\Yaml\Yaml::dump($base)),
200			[
201				['domain' => 'profiles.tiki.org', 'profile' => 'Test_All_Themes', 'object' => null],
202				['domain' => 'profiles.tiki.org', 'profile' => 'Test_All_Modules', 'object' => 'Test_All_Modules']
203			]
204		];
205
206		return $data;
207	}
208}
209