From 724d027f199f77c6e1442c03dba4b3363f973412 Mon Sep 17 00:00:00 2001 From: Georg Ehrke <developer@georgehrke.com> 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 bbb8bc5a15..06677115c8 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 5eb0a277cb..7010dfe23b 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@h1H00FbwBQ78shB+7n7)nx$OA-qT^g|<f7?hRzgC&&ugTFG0Fd%eUq3IGp z(v?_HkeQd357w=y)E}&Xq5ESEs-5CkbSD-R=oMrXfSkal)E_)e5#a<81`Y-e23|BL zNMJDp<PN=x+#HxGr=X_z_HE=lWWeK+{z){{zTv{c*@Z`s96E4--({uXv|B0`nMa>r z=L$*MU0uG7ukE~zskY}ciF3K-Hd~pc9(?G@;5(o!cIxO-mawgp9;6*=-?Z#dmT3Q! zy#-pomd4dwu3xpZ)0Wl0V&}d5g!1K$(WkVzn*MUSI=ydg-N3%vd$IJZb-V%I>>PEq zdfyuu7#OxPFn|LV;;ZjO1Wj3LQE_H|9?VmVpq?_mu$hGcWb(4T8vU#c3=GU*lNp&r znQ=um4=mOlUO0l7h=}KaM|^-c!UW7{M>fHXfdQU$5Q%_;0hS1mO~On9NG3IwU@-}v zAUGIc2?AmuB;Y{F0Xaw|7?2IziN!!f;((Y4N*u^0f}#RBD8*4s>}SOEEIeW$27)3c Wz?+o~6tb)gtPBl|3=A(BK|BCHMCA7X literal 0 HcmV?d00001 diff --git a/tests/data/testapp2.zip b/tests/data/testapp2.zip new file mode 100644 index 0000000000000000000000000000000000000000..f46832f7a757b2199f293ab05d16c368f55b3e8e GIT binary patch literal 2449 zcmWIWW@h1H00H0HBQ78shB+7n7)nx$OA-qT^g|<f7?PFxgPoN6gTFG0Fd%dVpy?7o z(v?_HkeQd357wQe)F14Dq5ESEs-5CkbSD-R=oMrXfSfQ*u|F7uQJs*C<^)a#0fzW^ zUq@&E;0UnYnM(b^AdFv|AhI@OkAt*=Fn;Zl*t8>u0LTash8ZKmz`?-5fF1%$_>9qu z#}OF4y}P*%CGfN^R(SMe*@G+M8JSrd#ns!JnvW(~TW~Jz{gs@5q3c)OzDE8fKXcX9 znd6I!EEEl9@GRtiaJ+L9@6^4QrhZ8{B5`K+!@cbv!q+a!xW4NB(a9(4mHwWSXZD$F zbp6q)Qy$$f?p3%3En8%<b*FeS!;Ga%wwA?-iC0~T@(nRBbT%r<?OV0?$j;0KPj94k z<sG$Qi4t2_E&M{ls(W|9#gZjf+*e9f!nX2ozf8STIpIK_qxtbx>8g40pS~x^u6TXo z{sr~`Z+4E*<z)s(85kH085zKd3=&AZXfZ5-C7FOynqEb24k(>GSL_cyr3gu?zI_|{ z4jJ&cq<<0(wQsnvaCYI*BZm$g;CERmIPI2-Mds1x*SSKHc2}2g<7+!_W2)`>OyXQ_ zxy@E)sRti=GWZTCi=8^UlqGEIqz7q-+BYpblqK3fWp9DjucdJ{m+Mz8?X+d}uh@An zKcReiWArI)uBN}7u1@b;TQ{)p_FgRgY8@}gS9P^|-y0Yh7`8It^OZ9GsK@2O-oD*j zha3c4-5rmd@;j(yKVidWwoe;2d87-NwD!7sxW%5~7Bc)dzy87hj?JA@r!u$O7Vl){ zUVKxcjUjQ4#O=L>2KyEp&oG!&X}pJ@<&WuWjay%@#oEk#v)t&<v*3oxpl4w*p^}k; zTYUpmQde~q->)`wZ*cVrlYgFCxYRxOs!OS``4aE#&r)`2$J`Q<J-;>hi}tgH7YaH4 z?soF$nie)QqxzN}SF1zP>e89rlWc>X+?Q;KzHl|a@5TFO1)ZPl?FG*ApfKW^zFhh+ z0|SErO3cfm#XPnGqAazjI5R&F6!D<^^$HsC##f9%q0P==ns4@<m4ShQ871`5O(u}> za9GmYeU_^!K%iA!aZ%{*rdvOl;$%esWL{Ou5O(C;DmwSor1}LD_r>R52>v2=_G;K# zsUHul+l>w8^f@r!aND@g`i1)6>Q&8#$%grDpA#7C?`rXU-&-p0|LlkH#eIKS62!!3 zcAPR&6$}bq|9OW;O5MwH{WN9+e~&MvVNcAnv;zf0OG740-F?0Jq3*>pos!z~o(38- z!xp_3V&m`Jm%7R1lEd-vvZ)!fJaVQ=dC%6Jx=hO>Njzr}KPbF4d2@`mF)%PlgTtGV zNt78^HNXR_5gdLvf|!W1kpo^S1b8D%z^oFGO)z6%fLAMs;*o;^RzV<}gkCs`Ga#AN zSc1hQc=^b|0IDcJ7}-F~ssdr)U&oyc49FD+2LmWMfiONJ1d-hI*YN|g5y$}rG6sb4 z86}Bgls+SpYhXqphZx8>5QZ2DDJelAhFpd!AsM-$u?(M)NR<nE;6cm=mBPp+nFNyA zKN@E<Va6+>$l_ptmC4Ai1(}GP@0F2E+|XFaj3)r};t3fJ%HYUZA2snzWx;eVJdZ<S m9#oJZyB1_1a;`xQ+xIMZU5nLhRyI(6;%4AxC}U<|fbam|df8_H literal 0 HcmV?d00001 diff --git a/tests/lib/installer.php b/tests/lib/installer.php new file mode 100644 index 0000000000..97b14ef579 --- /dev/null +++ b/tests/lib/installer.php @@ -0,0 +1,74 @@ +<?php +/** + * Copyright (c) 2014 Georg Ehrke <georg@owncloud.com> + * 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); + } +} -- GitLab