created unittests and factored out version test into seperate method

This commit is contained in:
Bernhard Posselt 2013-02-25 12:38:00 +01:00
parent ecd40f0abc
commit 5bf3d286f0
2 changed files with 84 additions and 4 deletions

View File

@ -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
*/

52
tests/lib/app.php Normal file
View File

@ -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));
}
}