more comment fixes
[civicrm-core.git] / tests / phpunit / CRM / Utils / versionCheckTest.php
CommitLineData
986e458b
CW
1<?php
2
3require_once 'CiviTest/CiviUnitTestCase.php';
4
5class 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}