Commit | Line | Data |
---|---|---|
986e458b CW |
1 | <?php |
2 | ||
3 | require_once 'CiviTest/CiviUnitTestCase.php'; | |
4 | ||
5 | class CRM_Utils_versionCheckTest extends CiviUnitTestCase { | |
6 | ||
7 | /** | |
8 | * @return array | |
9 | */ | |
00be9182 | 10 | public function get_info() { |
986e458b CW |
11 | return array( |
12 | 'name' => 'VersionCheck Test', | |
13 | 'description' => 'Test versionCheck functionality', | |
14 | 'group' => 'CiviCRM BAO Tests', | |
15 | ); | |
16 | } | |
17 | ||
00be9182 | 18 | public function setUp() { |
986e458b CW |
19 | parent::setUp(); |
20 | } | |
21 | ||
22 | /** | |
23 | * @var array | |
24 | */ | |
25 | protected $sampleVersionInfo = array( | |
26 | '4.2' => array( | |
27 | 'status' => 'eol', | |
28 | 'releases' => array( | |
29 | array('version' => '4.2.0', 'date' => '2012-08-20'), | |
30 | array('version' => '4.2.1', 'date' => '2012-09-12'), | |
31 | array('version' => '4.2.2', 'date' => '2012-09-27'), | |
32 | array('version' => '4.2.4', 'date' => '2012-10-18'), | |
6c6e6187 TO |
33 | array('version' => '4.2.6', 'date' => '2012-11-01', 'security' => TRUE), |
34 | array('version' => '4.2.7', 'date' => '2013-01-02', 'security' => TRUE), | |
986e458b CW |
35 | array('version' => '4.2.8', 'date' => '2013-02-20'), |
36 | array('version' => '4.2.9', 'date' => '2013-04-03'), | |
6c6e6187 | 37 | array('version' => '4.2.10', 'date' => '2013-07-29', 'security' => TRUE), |
986e458b | 38 | array('version' => '4.2.11', 'date' => '2013-09-25'), |
6c6e6187 TO |
39 | array('version' => '4.2.12', 'date' => '2013-10-02', 'security' => TRUE), |
40 | array('version' => '4.2.13', 'date' => '2013-11-06', 'security' => TRUE), | |
986e458b | 41 | array('version' => '4.2.14', 'date' => '2013-11-20'), |
6c6e6187 | 42 | array('version' => '4.2.15', 'date' => '2014-02-07', 'security' => TRUE), |
986e458b | 43 | array('version' => '4.2.16', 'date' => '2014-02-18'), |
6c6e6187 | 44 | array('version' => '4.2.17', 'date' => '2014-07-01', 'security' => TRUE), |
986e458b | 45 | array('version' => '4.2.18', 'date' => '2014-08-06'), |
21dfd5f5 | 46 | array('version' => '4.2.19', 'date' => '2014-09-17', 'security' => TRUE), |
986e458b CW |
47 | ), |
48 | ), | |
49 | '4.3' => array( | |
50 | 'status' => 'lts', | |
51 | 'releases' => array( | |
52 | array('version' => '4.3.0', 'date' => '2013-04-10'), | |
53 | array('version' => '4.3.1', 'date' => '2013-04-18'), | |
54 | array('version' => '4.3.2', 'date' => '2013-05-02'), | |
55 | array('version' => '4.3.3', 'date' => '2013-05-08'), | |
6c6e6187 TO |
56 | array('version' => '4.3.4', 'date' => '2013-06-10', 'security' => TRUE), |
57 | array('version' => '4.3.5', 'date' => '2013-07-08', 'security' => TRUE), | |
986e458b | 58 | array('version' => '4.3.6', 'date' => '2013-09-25'), |
6c6e6187 TO |
59 | array('version' => '4.3.7', 'date' => '2013-10-02', 'security' => TRUE), |
60 | array('version' => '4.3.8', 'date' => '2013-11-06', 'security' => TRUE), | |
21dfd5f5 | 61 | array('version' => '4.3.9', 'date' => '2014-09-07', 'security' => TRUE), |
986e458b CW |
62 | ), |
63 | ), | |
64 | '4.4' => array( | |
65 | 'status' => 'lts', | |
66 | 'releases' => array( | |
67 | array('version' => '4.4.0', 'date' => '2013-10-23'), | |
6c6e6187 | 68 | array('version' => '4.4.1', 'date' => '2013-11-06', 'security' => TRUE), |
986e458b CW |
69 | array('version' => '4.4.2', 'date' => '2013-11-20'), |
70 | array('version' => '4.4.3', 'date' => '2013-12-05'), | |
6c6e6187 | 71 | array('version' => '4.4.4', 'date' => '2014-02-07', 'security' => TRUE), |
986e458b | 72 | array('version' => '4.4.5', 'date' => '2014-04-17'), |
6c6e6187 TO |
73 | array('version' => '4.4.6', 'date' => '2014-07-01', 'security' => TRUE), |
74 | array('version' => '4.4.7', 'date' => '2014-09-17', 'security' => TRUE), | |
986e458b CW |
75 | array('version' => '4.4.8', 'date' => '2014-10-14'), |
76 | array('version' => '4.4.9', 'date' => '2014-11-05'), | |
77 | array('version' => '4.4.10', 'date' => '2014-11-19'), | |
21dfd5f5 | 78 | array('version' => '4.4.11', 'date' => '2014-12-17', 'security' => TRUE), |
986e458b CW |
79 | ), |
80 | ), | |
81 | '4.5' => array( | |
82 | 'status' => 'stable', | |
83 | 'releases' => array( | |
84 | array('version' => '4.5.0', 'date' => '2014-09-18'), | |
85 | array('version' => '4.5.1', 'date' => '2014-10-09'), | |
86 | array('version' => '4.5.2', 'date' => '2014-10-14'), | |
87 | array('version' => '4.5.3', 'date' => '2014-11-05'), | |
88 | array('version' => '4.5.4', 'date' => '2014-11-19'), | |
6c6e6187 | 89 | array('version' => '4.5.5', 'date' => '2014-12-17', 'security' => TRUE), |
21dfd5f5 | 90 | ), |
986e458b CW |
91 | ), |
92 | '4.6' => array( | |
93 | 'status' => 'testing', | |
94 | 'releases' => array( | |
95 | array('version' => '4.6.alpha1', 'date' => '2015-02-01'), | |
96 | array('version' => '4.6.beta1', 'date' => '2015-03-01'), | |
21dfd5f5 | 97 | ), |
986e458b CW |
98 | ), |
99 | ); | |
100 | ||
101 | /** | |
102 | * @dataProvider newerVersionDataProvider | |
103 | * @param string $localVersion | |
104 | * @param array $versionInfo | |
105 | * @param mixed $expectedResult | |
106 | */ | |
00be9182 | 107 | public function testNewerVersion($localVersion, $versionInfo, $expectedResult) { |
986e458b CW |
108 | $vc = CRM_Utils_VersionCheck::singleton(); |
109 | // These values are set by the constructor but for testing we override them | |
110 | $vc->localVersion = $localVersion; | |
111 | $vc->localMajorVersion = $vc->getMajorVersion($localVersion); | |
112 | $vc->versionInfo = $versionInfo; | |
113 | $this->assertEquals($vc->isNewerVersionAvailable(), $expectedResult); | |
114 | } | |
115 | ||
116 | /** | |
a6c01b45 CW |
117 | * @return array |
118 | * (localVersion, versionInfo, expectedResult) | |
986e458b | 119 | */ |
00be9182 | 120 | public function newerVersionDataProvider() { |
986e458b CW |
121 | $data = array(); |
122 | ||
123 | // Make sure we do not get unstable release updates for a stable localVersion | |
124 | $data[] = array('4.5.5', $this->sampleVersionInfo, NULL); | |
125 | ||
126 | // Make sure we do get unstable release updates for unstable localVersion | |
127 | $data[] = array('4.6.alpha1', $this->sampleVersionInfo, '4.6.beta1'); | |
128 | ||
129 | // Make sure we get nothing (and no errors) if no versionInfo available | |
130 | $data[] = array('4.7.beta1', array(), NULL); | |
131 | ||
132 | // Make sure alerts prioritize the localMajorVersion | |
133 | $data[] = array('4.4.1', $this->sampleVersionInfo, '4.4.11'); | |
134 | ||
135 | return $data; | |
136 | } | |
137 | ||
138 | /** | |
139 | * @dataProvider securityUpdateDataProvider | |
140 | * @param string $localVersion | |
141 | * @param array $versionInfo | |
142 | * @param bool $expectedResult | |
143 | */ | |
00be9182 | 144 | public function testSecurityUpdate($localVersion, $versionInfo, $expectedResult) { |
986e458b CW |
145 | $vc = CRM_Utils_VersionCheck::singleton(); |
146 | // These values are set by the constructor but for testing we override them | |
147 | $vc->localVersion = $localVersion; | |
148 | $vc->localMajorVersion = $vc->getMajorVersion($localVersion); | |
149 | $vc->versionInfo = $versionInfo; | |
150 | $this->assertEquals($vc->isSecurityUpdateAvailable(), $expectedResult); | |
151 | } | |
152 | ||
153 | /** | |
a6c01b45 CW |
154 | * @return array |
155 | * (localVersion, versionInfo, expectedResult) | |
986e458b | 156 | */ |
00be9182 | 157 | public function securityUpdateDataProvider() { |
986e458b CW |
158 | $data = array(); |
159 | ||
160 | // Make sure we get alerted if a security release is available | |
161 | $data[] = array('4.5.1', $this->sampleVersionInfo, TRUE); | |
162 | ||
163 | // Make sure we do not get alerted if a security release is not available | |
164 | $data[] = array('4.5.5', $this->sampleVersionInfo, FALSE); | |
165 | ||
166 | // Make sure we get false (and no errors) if no versionInfo available (this will be the case for pre-alphas) | |
167 | $data[] = array('4.7.alpha1', array(), FALSE); | |
168 | ||
169 | // If there are 2 security updates on the same day (e.g. lts and stable majorVersions) | |
170 | // we should not get alerted to one if we are using the other | |
171 | $data[] = array('4.4.11', $this->sampleVersionInfo, FALSE); | |
172 | ||
173 | // This version predates the ones in the info array, it should be assumed to be EOL and insecure | |
174 | $data[] = array('4.0.1', $this->sampleVersionInfo, TRUE); | |
175 | ||
176 | return $data; | |
177 | } | |
96025800 | 178 | |
986e458b | 179 | } |