From 724d027f199f77c6e1442c03dba4b3363f973412 Mon Sep 17 00:00:00 2001 From: Georg Ehrke Date: Wed, 4 Jun 2014 16:29:41 +0200 Subject: [PATCH] add unit test --- lib/private/installer.php | 41 ++++++++++++-------- settings/ajax/updateapp.php | 2 +- tests/data/testapp.zip | Bin 0 -> 895 bytes tests/data/testapp2.zip | Bin 0 -> 2449 bytes tests/lib/installer.php | 74 ++++++++++++++++++++++++++++++++++++ 5 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 tests/data/testapp.zip create mode 100644 tests/data/testapp2.zip create mode 100644 tests/lib/installer.php diff --git a/lib/private/installer.php b/lib/private/installer.php index bbb8bc5a152..06677115c8e 100644 --- a/lib/private/installer.php +++ b/lib/private/installer.php @@ -164,21 +164,7 @@ class OC_Installer{ * upgrade.php can determine the current installed version of the app using * "OC_Appconfig::getValue($appid, 'installed_version')" */ - public static function updateApp( $app ) { - $appdata = OC_OCSClient::getApplication($app); - $download = OC_OCSClient::getApplicationDownload($app, 1); - - if (isset($download['downloadlink']) && trim($download['downloadlink']) !== '') { - $download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']); - $info = array( - 'source' => 'http', - 'href' => $download['downloadlink'], - 'appdata' => $appdata - ); - } else { - throw new \Exception('Could not fetch app info!'); - } - + public static function updateApp( $info=array() ) { list($extractDir, $path) = self::downloadApp($info); $info = self::checkAppsIntegrity($info, $extractDir, $path); @@ -206,6 +192,29 @@ class OC_Installer{ return OC_App::updateApp($info['id']); } + /** + * update an app by it's id + * @param integer $ocsid + * @return bool + * @throws Exception + */ + public static function updateAppByOCSId($ocsid) { + $appdata = OC_OCSClient::getApplication($ocsid); + $download = OC_OCSClient::getApplicationDownload($ocsid, 1); + + if (isset($download['downloadlink']) && trim($download['downloadlink']) !== '') { + $download['downloadlink'] = str_replace(' ', '%20', $download['downloadlink']); + $info = array( + 'source' => 'http', + 'href' => $download['downloadlink'], + 'appdata' => $appdata + ); + } else { + throw new \Exception('Could not fetch app info!'); + } + + return self::updateApp($info); + } /** * @param array $data @@ -322,7 +331,7 @@ class OC_Installer{ $version = trim($info['version']); } - if($version<>trim($data['appdata']['version'])) { + if(isset($data['appdata']['version']) && $version<>trim($data['appdata']['version'])) { OC_Helper::rmdirr($extractDir); throw new \Exception($l->t("App can't be installed because the version in info.xml/version is not the same as the version reported from the app store")); } diff --git a/settings/ajax/updateapp.php b/settings/ajax/updateapp.php index 5eb0a277cba..7010dfe23b5 100644 --- a/settings/ajax/updateapp.php +++ b/settings/ajax/updateapp.php @@ -30,7 +30,7 @@ if (!is_numeric($appId)) { $appId = OC_App::cleanAppId($appId); -$result = OC_Installer::updateApp($appId); +$result = OC_Installer::updateAppByOCSId($appId); if($result !== false) { OC_JSON::success(array('data' => array('appid' => $appId))); } else { diff --git a/tests/data/testapp.zip b/tests/data/testapp.zip new file mode 100644 index 0000000000000000000000000000000000000000..e76c0d187248193e90ad487fbd172af065695aa3 GIT binary patch literal 895 zcmWIWW@h1H00FbwBQ9VDl;B_xU?@o~E=epX&<~B^VNh1;50(JpuZ$uL0dQSbXu1TD zbOCi{=B4F>bt?jODq!gTSc7V(I2PSNQ}hZl3P4U^0~#<*5#a<81`Z(PMRS4#7DGVp z(5uMJfthj&YKm{)M!rJ^JTB>h+dAn%+M)JM%MN9U_D|Vcp!I8M zT+QYBRZBZ1`_|SC?7O`eOTSvj8{o~(QCF+?y#W~L zTY(r9un=E;Cn9LdQj3Z+^YdVyS_Ji!@rBJSK$F-xmhIK(X9b$d3^tjONt78^RPz8; zfPupcM-YvOcn)~P2Y4e)z>Ice6U>lIKqLYV23R6MHVHEcAeq!yg2g0wg5ZEB2#A4* zbteIJdSK}OSc7V(I2PSNQ}hZl3P4Vnrq~}0!l+J2Msoru(2)3eUq@&E z;0UnYnLv9%7{4|_WNpYECr-O0HtonEfNqQk0|yYIhkz13WAx&21V(S~ZmvTKJgtir z9z9w1;EH%gX4Xb=_4cObqe<2loJ)IuCFfu0`c=2Dk$=h0Ty=Hk_@W{UMS~eU3;7=$ z@7%;Yb?>FAUlNW;oSFS_Z~KSvwTm*YuX=xU^2vIozvtwceI^@Sf3)h9NB4_+6|OWyzmTx% z-W_nUWQi5`l~R?ktvuW>Q}0wxIFRRPe!Nw>YF_-O?+LOiUZ1#sfjz*Rog;L4nZZ$D z0yJb~04Fj?An~HbummuWU@-&>Vo*xctH{j(rIY8tG;#`>PJH_|@*OhZaY_Fq8fxEg zVd3n;qel)MIKc0+QgGTW6^qQH&#!ZZB<-#)-^SN=-o{kh^O?lC+;W?(%u)|N^kncI zP!>CNbSX>N)=3Z24z+Jub|_1R++*UVcLP^2X>>+FVV4 zIbEIJx3+Fz-|f9v`qesKkgw`$^}aU%eYF*cL0Jd8uaxmeJuVOS_5tJGLBQ4B@yIE^ zgIe|zHf(15v|*D+x`0V*ud9b!>=|w$!+-PZAN=pw+&OhBbGvQvPG;`KHznE_66Z+V z-dkv}Z?W+VgGrUfd-z%Yn7-Dy_4Qh;&CEB;js83fZm0};78VmK87a8cH$WwIRaf!- zYD4!1SFbSn=c$ED-E*(HlnR?K@!tL{WtVo$Eg{+STZ6x7KU;XAkmK)eCx5PKVKXzT zZ|QNhIwY+wo!LFfHrUC1$%g0)SM&Q`yl+;}`N`g1;4BXcBd+Por4Iwc#{ebfWzk|D zTLDp)T2!2wp9hL~P#${)jd-|AJ(hRKHcZJ!eu>+fpueBWCt@Bi$F@x^_ASrWv=XLg)2QWXpeUjKQA zM@rqxa{V-B1AmV%rD0FZv$O*RLrX&@OWl3F`JwK`GM$pz^PUD8Gs70W7GmS?+?Tq^ z2%la?@YO56DI!2NbOI$7hrzic$K&h=IEXW)yOW zp&E&(PLRt`B_ty^G?w8r5~*@Q4?IM9g@HxQNq{R-g$0N{GrX8-^I literal 0 HcmV?d00001 diff --git a/tests/lib/installer.php b/tests/lib/installer.php new file mode 100644 index 00000000000..97b14ef579a --- /dev/null +++ b/tests/lib/installer.php @@ -0,0 +1,74 @@ + + * This file is licensed under the Affero General Public License version 3 or + * later. + * See the COPYING-README file. + */ + +class Test_Installer extends PHPUnit_Framework_TestCase { + + private static $appid = 'testapp'; + + public function testInstallApp() { + $pathOfTestApp = __DIR__; + $pathOfTestApp .= '/../data/'; + $pathOfTestApp .= 'testapp.zip'; + + $tmp = OC_Helper::tmpFile(); + OC_Helper::copyr($pathOfTestApp, $tmp); + + $data = array( + 'path' => $tmp, + 'source' => 'path', + ); + + OC_Installer::installApp($data); + $isInstalled = OC_Installer::isInstalled(self::$appid); + + $this->assertTrue($isInstalled); + + //clean-up + OC_Installer::removeApp(self::$appid); + unlink($tmp); + } + + public function testUpdateApp() { + $pathOfOldTestApp = __DIR__; + $pathOfOldTestApp .= '/../data/'; + $pathOfOldTestApp .= 'testapp.zip'; + + $oldTmp = OC_Helper::tmpFile(); + OC_Helper::copyr($pathOfOldTestApp, $oldTmp); + + $oldData = array( + 'path' => $oldTmp, + 'source' => 'path', + ); + + $pathOfNewTestApp = __DIR__; + $pathOfNewTestApp .= '/../data/'; + $pathOfNewTestApp .= 'testapp2.zip'; + + $newTmp = OC_Helper::tmpFile(); + OC_Helper::copyr($pathOfNewTestApp, $newTmp); + + $newData = array( + 'path' => $newTmp, + 'source' => 'path', + ); + + OC_Installer::installApp($oldData); + $oldVersionNumber = OC_App::getAppVersion(self::$appid); + + OC_Installer::updateApp($newData); + $newVersionNumber = OC_App::getAppVersion(self::$appid); + + $this->assertNotEquals($oldVersionNumber, $newVersionNumber); + + //clean-up + OC_Installer::removeApp(self::$appid); + unlink($oldTmp); + unlink($newTmp); + } +}