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