1<?php
2// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
3//
4// All Rights Reserved. See copyright.txt for details and a complete list of authors.
5// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
6// $Id$
7
8
9class TikiVersionTest extends PHPUnit_Framework_TestCase
10{
11	function versions()
12	{
13		return [
14			['9.0', new Tiki_Version_Version(9, 0)],
15			['9.1', new Tiki_Version_Version(9, 1)],
16			['9.1beta2', new Tiki_Version_Version(9, 1, null, 'beta', 2)],
17			['1.9.12.1beta2', new Tiki_Version_Version(1, 9, '12.1', 'beta', 2)],
18			['9.0pre', new Tiki_Version_Version(9, 0, null, 'pre')],
19		];
20	}
21
22	/**
23	 * @dataProvider versions
24	 */
25	function testParseVersions($string, $version)
26	{
27		$this->assertEquals($version, Tiki_Version_Version::get($string));
28	}
29
30	/**
31	 * @dataProvider versions
32	 */
33	function testWriteVersions($string, $version)
34	{
35		$this->assertEquals($string, (string) $version);
36	}
37
38	function testVerifyLatestVersion()
39	{
40		$checker = new Tiki_Version_Checker;
41		$checker->setCycle('regular');
42		$checker->setVersion('9.0');
43
44		$response = $checker->check(
45			function ($url) use (& $out) {
46				$out = $url;
47				return <<<O
489.0
498.4
506.7
51O;
52			}
53		);
54
55		$this->assertEquals('http://tiki.org/regular.cycle', $out);
56		$this->assertEquals([], $response);
57	}
58
59	function testVerifyPastSupportedVersion()
60	{
61		$checker = new Tiki_Version_Checker;
62		$checker->setCycle('regular');
63		$checker->setVersion('8.4');
64
65		$response = $checker->check(
66			function ($url) use (& $out) {
67				$out = $url;
68				return <<<O
699.0
708.4
716.7
72O;
73			}
74		);
75
76		$this->assertEquals(
77			[
78				new Tiki_Version_Upgrade('8.4', '9.0', false),
79			],
80			$response
81		);
82	}
83
84	function testVerifyMinorUpdate()
85	{
86		$checker = new Tiki_Version_Checker;
87		$checker->setCycle('regular');
88		$checker->setVersion('8.2');
89
90		$response = $checker->check(
91			function ($url) use (& $out) {
92				$out = $url;
93				return <<<O
949.0
958.4
966.7
97O;
98			}
99		);
100
101		$this->assertEquals(
102			[
103				new Tiki_Version_Upgrade('8.2', '8.4', true),
104				new Tiki_Version_Upgrade('8.4', '9.0', false),
105			],
106			$response
107		);
108	}
109
110	function testVerifyUpgradePrerelease()
111	{
112		$checker = new Tiki_Version_Checker;
113		$checker->setCycle('regular');
114		$checker->setVersion('8.4beta3');
115
116		$response = $checker->check(
117			function ($url) use (& $out) {
118				$out = $url;
119				return <<<O
1209.0
1218.4
1226.7
123O;
124			}
125		);
126
127		$this->assertEquals(
128			[
129				new Tiki_Version_Upgrade('8.4beta3', '8.4', true),
130				new Tiki_Version_Upgrade('8.4', '9.0', false),
131			],
132			$response
133		);
134	}
135
136	function testUpgradeFromUnsupportedVersion()
137	{
138		$checker = new Tiki_Version_Checker;
139		$checker->setCycle('regular');
140		$checker->setVersion('4.3');
141
142		$response = $checker->check(
143			function ($url) use (& $out) {
144				$out = $url;
145				return <<<O
1468.4
1479.0
1486.7
149O;
150			}
151		);
152
153		$this->assertEquals(
154			[
155				new Tiki_Version_Upgrade('4.3', '9.0', true),
156			],
157			$response
158		);
159	}
160
161	function testCurrentVersionMoreRecent()
162	{
163		$checker = new Tiki_Version_Checker;
164		$checker->setCycle('regular');
165		$checker->setVersion('10.0');
166
167		$response = $checker->check(
168			function ($url) use (& $out) {
169				$out = $url;
170				return <<<O
1718.4
1729.0
1736.7
174O;
175			}
176		);
177
178		$this->assertEquals([], $response);
179	}
180
181	/**
182	 * @dataProvider upgradeMessages
183	 */
184	function testObtainMessages($string, $upgrade)
185	{
186		$this->assertEquals($string, $upgrade->getMessage());
187	}
188
189	function upgradeMessages()
190	{
191		return [
192			['Version 8.2 is no longer supported. A minor upgrade to 8.4 is strongly recommended.', new Tiki_Version_Upgrade('8.2', '8.4', true)],
193			['Version 4.3 is no longer supported. A major upgrade to 9.0 is strongly recommended.', new Tiki_Version_Upgrade('4.3', '9.0', true)],
194			['Version 8.4 is still supported. However, a major upgrade to 9.0 is available.', new Tiki_Version_Upgrade('8.4', '9.0', false)],
195		];
196	}
197}
198