From 4bf35ba56bb9f06de0cb9ab920b799a39f8eaffc Mon Sep 17 00:00:00 2001 From: VirtualTam Date: Tue, 24 Nov 2015 02:52:22 +0100 Subject: application: refactor version checks, move to ApplicationUtils Relates to #372 Modifications: - move checkUpdate() to ApplicationUtils - reduce file I/O operations during version checks - apply coding conventions - add test coverage Tools: - create a sandbox directory for tests Signed-off-by: VirtualTam --- tests/ApplicationUtilsTest.php | 218 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 218 insertions(+) (limited to 'tests/ApplicationUtilsTest.php') diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php index 01301e68..437c21fd 100644 --- a/tests/ApplicationUtilsTest.php +++ b/tests/ApplicationUtilsTest.php @@ -5,12 +5,230 @@ require_once 'application/ApplicationUtils.php'; +/** + * Fake ApplicationUtils class to avoid HTTP requests + */ +class FakeApplicationUtils extends ApplicationUtils +{ + public static $VERSION_CODE = ''; + + /** + * Toggle HTTP requests, allow overriding the version code + */ + public static function getLatestGitVersionCode($url, $timeout=0) + { + return self::$VERSION_CODE; + } +} + /** * Unitary tests for Shaarli utilities */ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase { + protected static $testUpdateFile = 'sandbox/update.txt'; + protected static $testVersion = '0.5.0'; + protected static $versionPattern = '/^\d+\.\d+\.\d+$/'; + + /** + * Reset test data for each test + */ + public function setUp() + { + FakeApplicationUtils::$VERSION_CODE = ''; + if (file_exists(self::$testUpdateFile)) { + unlink(self::$testUpdateFile); + } + } + + /** + * Retrieve the latest version code available on Git + * + * Expected format: Semantic Versioning - major.minor.patch + */ + public function testGetLatestGitVersionCode() + { + $testTimeout = 10; + + $this->assertEquals( + '0.5.4', + ApplicationUtils::getLatestGitVersionCode( + 'https://raw.githubusercontent.com/shaarli/Shaarli/' + .'v0.5.4/shaarli_version.php', + $testTimeout + ) + ); + $this->assertRegexp( + self::$versionPattern, + ApplicationUtils::getLatestGitVersionCode( + 'https://raw.githubusercontent.com/shaarli/Shaarli/' + .'master/shaarli_version.php', + $testTimeout + ) + ); + } + + /** + * Attempt to retrieve the latest version from an invalid URL + */ + public function testGetLatestGitVersionCodeInvalidUrl() + { + $this->assertFalse( + ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 0) + ); + } + + /** + * Test update checks - the user is logged off + */ + public function testCheckUpdateLoggedOff() + { + $this->assertFalse( + ApplicationUtils::checkUpdate(self::$testVersion, 'null', 0, false, false) + ); + } + + /** + * Test update checks - the user has disabled updates + */ + public function testCheckUpdateUserDisabled() + { + $this->assertFalse( + ApplicationUtils::checkUpdate(self::$testVersion, 'null', 0, false, true) + ); + } + + /** + * A newer version is available + */ + public function testCheckUpdateNewVersionNew() + { + $newVersion = '1.8.3'; + FakeApplicationUtils::$VERSION_CODE = $newVersion; + + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertEquals($newVersion, $version); + } + + /** + * No available information about versions + */ + public function testCheckUpdateNewVersionUnavailable() + { + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertFalse($version); + } + + /** + * Shaarli is up-to-date + */ + public function testCheckUpdateNewVersionUpToDate() + { + FakeApplicationUtils::$VERSION_CODE = self::$testVersion; + + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertFalse($version); + } + + /** + * Time-traveller's Shaarli + */ + public function testCheckUpdateNewVersionMaartiMcFly() + { + FakeApplicationUtils::$VERSION_CODE = '0.4.1'; + + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertFalse($version); + } + + /** + * The version has been checked recently and Shaarli is up-to-date + */ + public function testCheckUpdateNewVersionTwiceUpToDate() + { + FakeApplicationUtils::$VERSION_CODE = self::$testVersion; + + // Create the update file + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertFalse($version); + + // Reuse the update file + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + + $this->assertFalse($version); + } + + /** + * The version has been checked recently and Shaarli is outdated + */ + public function testCheckUpdateNewVersionTwiceOutdated() + { + $newVersion = '1.8.3'; + FakeApplicationUtils::$VERSION_CODE = $newVersion; + + // Create the update file + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + $this->assertEquals($newVersion, $version); + + // Reuse the update file + $version = FakeApplicationUtils::checkUpdate( + self::$testVersion, + self::$testUpdateFile, + 100, + true, + true + ); + $this->assertEquals($newVersion, $version); + } + /** * Check supported PHP versions */ -- cgit v1.2.3