]> source.dussan.org Git - nextcloud-server.git/commitdiff
created unittests and factored out version test into seperate method
authorBernhard Posselt <nukeawhale@gmail.com>
Mon, 25 Feb 2013 11:38:00 +0000 (12:38 +0100)
committerBernhard Posselt <nukeawhale@gmail.com>
Mon, 25 Feb 2013 11:38:00 +0000 (12:38 +0100)
lib/app.php
tests/lib/app.php [new file with mode: 0644]

index 91bb833b0d03e7730e06abc65f4670aceb1e206c..2eb43a582e27b07c22a22aa523cab7bf164447d5 100644 (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
         */
diff --git a/tests/lib/app.php b/tests/lib/app.php
new file mode 100644 (file)
index 0000000..2bcc34d
--- /dev/null
@@ -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