diff --git a/apps/provisioning_api/appinfo/routes.php b/apps/provisioning_api/appinfo/routes.php index 22a923f5c2..1b9328d608 100644 --- a/apps/provisioning_api/appinfo/routes.php +++ b/apps/provisioning_api/appinfo/routes.php @@ -62,7 +62,8 @@ API::register('get', '/cloud/groups/{groupid}/subadmins', [$groups, 'getSubAdmin // Apps $apps = new \OCA\Provisioning_API\Apps( - \OC::$server->getAppManager() + \OC::$server->getAppManager(), + \OC::$server->getOcsClient() ); API::register('get', '/cloud/apps', [$apps, 'getApps'], 'provisioning_api', API::ADMIN_AUTH); API::register('get', '/cloud/apps/{appid}', [$apps, 'getAppInfo'], 'provisioning_api', API::ADMIN_AUTH); diff --git a/apps/provisioning_api/lib/apps.php b/apps/provisioning_api/lib/apps.php index e0fa63cca3..2a3fd414d3 100644 --- a/apps/provisioning_api/lib/apps.php +++ b/apps/provisioning_api/lib/apps.php @@ -25,19 +25,23 @@ namespace OCA\Provisioning_API; +use OC\OCSClient; use \OC_OCS_Result; use \OC_App; class Apps { - /** @var \OCP\App\IAppManager */ private $appManager; + /** @var OCSClient */ + private $ocsClient; /** * @param \OCP\App\IAppManager $appManager */ - public function __construct(\OCP\App\IAppManager $appManager) { + public function __construct(\OCP\App\IAppManager $appManager, + OCSClient $ocsClient) { $this->appManager = $appManager; + $this->ocsClient = $ocsClient; } /** @@ -45,7 +49,7 @@ class Apps { * @return OC_OCS_Result */ public function getApps($parameters) { - $apps = OC_App::listAllApps(); + $apps = OC_App::listAllApps(false, true, $this->ocsClient); $list = []; foreach($apps as $app) { $list[] = $app['id']; diff --git a/apps/provisioning_api/tests/appstest.php b/apps/provisioning_api/tests/appstest.php index 4ccba704a3..871158c554 100644 --- a/apps/provisioning_api/tests/appstest.php +++ b/apps/provisioning_api/tests/appstest.php @@ -23,6 +23,7 @@ */ namespace OCA\Provisioning_API\Tests; +use OC\OCSClient; use OCA\Provisioning_API\Apps; use OCP\API; use OCP\App\IAppManager; @@ -36,42 +37,43 @@ use OCP\IUserSession; * @package OCA\Provisioning_API\Tests */ class AppsTest extends TestCase { - /** @var IAppManager */ private $appManager; - /** @var Apps */ private $api; - /** @var IUserSession */ private $userSession; + /** @var OCSClient */ + private $ocsClient; public function setup() { parent::setup(); $this->appManager = \OC::$server->getAppManager(); $this->groupManager = \OC::$server->getGroupManager(); $this->userSession = \OC::$server->getUserSession(); - $this->api = new Apps($this->appManager); + $this->ocsClient = $this->getMockBuilder('\OC\OCSClient') + ->disableOriginalConstructor()->getMock(); + $this->api = new Apps($this->appManager, $this->ocsClient); } public function testGetAppInfo() { $result = $this->api->getAppInfo(['appid' => 'provisioning_api']); $this->assertInstanceOf('OC_OCS_Result', $result); $this->assertTrue($result->succeeded()); - } public function testGetAppInfoOnBadAppID() { - $result = $this->api->getAppInfo(['appid' => 'not_provisioning_api']); $this->assertInstanceOf('OC_OCS_Result', $result); $this->assertFalse($result->succeeded()); $this->assertEquals(API::RESPOND_NOT_FOUND, $result->getStatusCode()); - } public function testGetApps() { - + $this->ocsClient + ->expects($this->any()) + ->method($this->anything()) + ->will($this->returnValue(null)); $user = $this->generateUsers(); $this->groupManager->get('admin')->addUser($user); $this->userSession->setUser($user); @@ -80,27 +82,27 @@ class AppsTest extends TestCase { $this->assertTrue($result->succeeded()); $data = $result->getData(); - $this->assertEquals(count(\OC_App::listAllApps()), count($data['apps'])); - + $this->assertEquals(count(\OC_App::listAllApps(false, true, $this->ocsClient)), count($data['apps'])); } public function testGetAppsEnabled() { - $_GET['filter'] = 'enabled'; $result = $this->api->getApps(['filter' => 'enabled']); $this->assertTrue($result->succeeded()); $data = $result->getData(); $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps'])); - } public function testGetAppsDisabled() { - + $this->ocsClient + ->expects($this->any()) + ->method($this->anything()) + ->will($this->returnValue(null)); $_GET['filter'] = 'disabled'; $result = $this->api->getApps(['filter' => 'disabled']); $this->assertTrue($result->succeeded()); $data = $result->getData(); - $apps = \OC_App::listAllApps(); + $apps = \OC_App::listAllApps(false, true, $this->ocsClient); $list = array(); foreach($apps as $app) { $list[] = $app['id']; diff --git a/lib/private/app.php b/lib/private/app.php index 5f6ca9596c..500a60060e 100644 --- a/lib/private/app.php +++ b/lib/private/app.php @@ -760,9 +760,12 @@ class OC_App { * @param bool $onlyLocal * @param bool $includeUpdateInfo Should we check whether there is an update * in the app store? + * @param OCSClient $ocsClient * @return array */ - public static function listAllApps($onlyLocal = false, $includeUpdateInfo = true) { + public static function listAllApps($onlyLocal = false, + $includeUpdateInfo = true, + OCSClient $ocsClient) { $installedApps = OC_App::getAllApps(); //TODO which apps do we want to blacklist and how do we integrate @@ -825,7 +828,7 @@ class OC_App { if ($onlyLocal) { $remoteApps = []; } else { - $remoteApps = OC_App::getAppstoreApps(); + $remoteApps = OC_App::getAppstoreApps('approved', null, $ocsClient); } if ($remoteApps) { // Remove duplicates @@ -865,20 +868,16 @@ class OC_App { /** * Get a list of all apps on the appstore * @param string $filter - * @param string $category + * @param string|null $category + * @param OCSClient $ocsClient * @return array|bool multi-dimensional array of apps. * Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description */ - public static function getAppstoreApps($filter = 'approved', $category = null) { + public static function getAppstoreApps($filter = 'approved', + $category = null, + OCSClient $ocsClient) { $categories = [$category]; - $ocsClient = new OCSClient( - \OC::$server->getHTTPClientService(), - \OC::$server->getConfig(), - \OC::$server->getLogger() - ); - - if (is_null($category)) { $categoryNames = $ocsClient->getCategories(\OCP\Util::getVersion()); if (is_array($categoryNames)) { diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php index d2430f9b55..765fe2d285 100644 --- a/settings/controller/appsettingscontroller.php +++ b/settings/controller/appsettingscontroller.php @@ -218,7 +218,7 @@ class AppSettingsController extends Controller { break; // not-installed apps case 1: - $apps = \OC_App::listAllApps(true, $includeUpdateInfo); + $apps = \OC_App::listAllApps(true, $includeUpdateInfo, $this->ocsClient); $apps = array_filter($apps, function ($app) { return !$app['active']; }); @@ -244,7 +244,7 @@ class AppSettingsController extends Controller { default: $filter = $this->config->getSystemValue('appstore.experimental.enabled', false) ? 'all' : 'approved'; - $apps = \OC_App::getAppstoreApps($filter, $category); + $apps = \OC_App::getAppstoreApps($filter, $category, $this->ocsClient); if (!$apps) { $apps = array(); } else { @@ -310,7 +310,7 @@ class AppSettingsController extends Controller { * @return array */ private function getInstalledApps($includeUpdateInfo = true) { - $apps = \OC_App::listAllApps(true, $includeUpdateInfo); + $apps = \OC_App::listAllApps(true, $includeUpdateInfo, $this->ocsClient); $apps = array_filter($apps, function ($app) { return $app['active']; });