diff options
author | Bernhard Posselt <nukeawhale@gmail.com> | 2013-02-25 12:38:00 +0100 |
---|---|---|
committer | Bernhard Posselt <nukeawhale@gmail.com> | 2013-02-25 12:38:00 +0100 |
commit | 5bf3d286f02474c99dd52b2680594c9ed272f92a (patch) | |
tree | e793845f1507171e3a26f5d34ad6ed70f0e9936f | |
parent | ecd40f0abc8328692df44a2b082fb2ba5dcfbbd2 (diff) | |
download | nextcloud-server-5bf3d286f02474c99dd52b2680594c9ed272f92a.tar.gz nextcloud-server-5bf3d286f02474c99dd52b2680594c9ed272f92a.zip |
created unittests and factored out version test into seperate method
-rw-r--r-- | lib/app.php | 36 | ||||
-rw-r--r-- | tests/lib/app.php | 52 |
2 files changed, 84 insertions, 4 deletions
diff --git a/lib/app.php b/lib/app.php index 91bb833b0d0..2eb43a582e2 100644 --- a/lib/app.php +++ b/lib/app.php @@ -223,8 +223,7 @@ class OC_App{ // check if the app is compatible with this version of ownCloud $info=OC_App::getAppInfo($app); $version=OC_Util::getVersion(); - $fullVersion = (float) ($version[0] . '.' . $version[1] . $version[2]); - if(!isset($info['require']) or ($fullVersion < (float) $info['require'])) { + if(!isset($info['require']) or !self::isAppVersionCompatible($version, $info['require'])) { OC_Log::write('core', 'App "'.$info['name'].'" can\'t be installed because it is' .' not compatible with this version of ownCloud', @@ -852,8 +851,7 @@ class OC_App{ foreach($apps as $app) { // check if the app is compatible with this version of ownCloud $info = OC_App::getAppInfo($app); - $fullVersion = (float) ($version[0] . '.' . $version[1] . $version[2]); - if(!isset($info['require']) or ($fullVersion < (float) $info['require'])) { + if(!isset($info['require']) or !self::isAppVersionCompatible($version, $info['require'])) { OC_Log::write('core', 'App "'.$info['name'].'" ('.$app.') can\'t be used because it is' .' not compatible with this version of ownCloud', @@ -864,6 +862,36 @@ class OC_App{ } } + + /** + * Compares the app version with the owncloud version to see if the app + * requires a newer version than the currently active one + * @param array $owncloudVersions array with 3 entries: major minor bugfix + * @param string $appRequired the required version from the xml + * major.minor.bugfix + * @return boolean true if compatible, otherwise false + */ + public static function isAppVersionCompatible($owncloudVersions, $appRequired){ + $appVersions = explode('.', $appRequired); + + for($i=0; $i<count($appVersions); $i++){ + $appVersion = (int) $appVersions[$i]; + + if(isset($owncloudVersions[$i])){ + $owncloudVersion = $owncloudVersions[$i]; + } else { + $owncloudVersion = 0; + } + + if($owncloudVersion < $appVersion){ + return false; + } + } + + return true; + } + + /** * get the installed version of all apps */ diff --git a/tests/lib/app.php b/tests/lib/app.php new file mode 100644 index 00000000000..2bcc34d3321 --- /dev/null +++ b/tests/lib/app.php @@ -0,0 +1,52 @@ +<?php +/** + * Copyright (c) 2012 Bernhard Posselt <nukeawhale@gmail.com> + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_App extends PHPUnit_Framework_TestCase { + + + public function testIsAppVersionCompatibleSingleOCNumber(){ + $oc = array(4); + $app = '4.0'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleMultipleOCNumber(){ + $oc = array(4, 3, 1); + $app = '4.3'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleMultipleAppNumber(){ + $oc = array(4); + $app = '4'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleSingleAppNumber(){ + $oc = array(4, 3); + $app = '4'; + + $this->assertTrue(OC_App::isAppVersionCompatible($oc, $app)); + } + + + public function testIsAppVersionCompatibleShouldFail(){ + $oc = array(4, 3, 1); + $app = '4.3.2'; + + $this->assertFalse(OC_App::isAppVersionCompatible($oc, $app)); + } + + +}
\ No newline at end of file |