Inject OCSClient

Fixes https://github.com/owncloud/core/issues/21451
This commit is contained in:
Lukas Reschke 2016-01-06 00:03:08 +01:00 committed by Roeland Jago Douma
parent c77917f48c
commit 88c7face07
5 changed files with 38 additions and 32 deletions

View File

@ -62,7 +62,8 @@ API::register('get', '/cloud/groups/{groupid}/subadmins', [$groups, 'getSubAdmin
// Apps // Apps
$apps = new \OCA\Provisioning_API\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', [$apps, 'getApps'], 'provisioning_api', API::ADMIN_AUTH);
API::register('get', '/cloud/apps/{appid}', [$apps, 'getAppInfo'], 'provisioning_api', API::ADMIN_AUTH); API::register('get', '/cloud/apps/{appid}', [$apps, 'getAppInfo'], 'provisioning_api', API::ADMIN_AUTH);

View File

@ -25,19 +25,23 @@
namespace OCA\Provisioning_API; namespace OCA\Provisioning_API;
use OC\OCSClient;
use \OC_OCS_Result; use \OC_OCS_Result;
use \OC_App; use \OC_App;
class Apps { class Apps {
/** @var \OCP\App\IAppManager */ /** @var \OCP\App\IAppManager */
private $appManager; private $appManager;
/** @var OCSClient */
private $ocsClient;
/** /**
* @param \OCP\App\IAppManager $appManager * @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->appManager = $appManager;
$this->ocsClient = $ocsClient;
} }
/** /**
@ -45,7 +49,7 @@ class Apps {
* @return OC_OCS_Result * @return OC_OCS_Result
*/ */
public function getApps($parameters) { public function getApps($parameters) {
$apps = OC_App::listAllApps(); $apps = OC_App::listAllApps(false, true, $this->ocsClient);
$list = []; $list = [];
foreach($apps as $app) { foreach($apps as $app) {
$list[] = $app['id']; $list[] = $app['id'];

View File

@ -23,6 +23,7 @@
*/ */
namespace OCA\Provisioning_API\Tests; namespace OCA\Provisioning_API\Tests;
use OC\OCSClient;
use OCA\Provisioning_API\Apps; use OCA\Provisioning_API\Apps;
use OCP\API; use OCP\API;
use OCP\App\IAppManager; use OCP\App\IAppManager;
@ -36,42 +37,43 @@ use OCP\IUserSession;
* @package OCA\Provisioning_API\Tests * @package OCA\Provisioning_API\Tests
*/ */
class AppsTest extends TestCase { class AppsTest extends TestCase {
/** @var IAppManager */ /** @var IAppManager */
private $appManager; private $appManager;
/** @var Apps */ /** @var Apps */
private $api; private $api;
/** @var IUserSession */ /** @var IUserSession */
private $userSession; private $userSession;
/** @var OCSClient */
private $ocsClient;
public function setup() { public function setup() {
parent::setup(); parent::setup();
$this->appManager = \OC::$server->getAppManager(); $this->appManager = \OC::$server->getAppManager();
$this->groupManager = \OC::$server->getGroupManager(); $this->groupManager = \OC::$server->getGroupManager();
$this->userSession = \OC::$server->getUserSession(); $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() { public function testGetAppInfo() {
$result = $this->api->getAppInfo(['appid' => 'provisioning_api']); $result = $this->api->getAppInfo(['appid' => 'provisioning_api']);
$this->assertInstanceOf('OC_OCS_Result', $result); $this->assertInstanceOf('OC_OCS_Result', $result);
$this->assertTrue($result->succeeded()); $this->assertTrue($result->succeeded());
} }
public function testGetAppInfoOnBadAppID() { public function testGetAppInfoOnBadAppID() {
$result = $this->api->getAppInfo(['appid' => 'not_provisioning_api']); $result = $this->api->getAppInfo(['appid' => 'not_provisioning_api']);
$this->assertInstanceOf('OC_OCS_Result', $result); $this->assertInstanceOf('OC_OCS_Result', $result);
$this->assertFalse($result->succeeded()); $this->assertFalse($result->succeeded());
$this->assertEquals(API::RESPOND_NOT_FOUND, $result->getStatusCode()); $this->assertEquals(API::RESPOND_NOT_FOUND, $result->getStatusCode());
} }
public function testGetApps() { public function testGetApps() {
$this->ocsClient
->expects($this->any())
->method($this->anything())
->will($this->returnValue(null));
$user = $this->generateUsers(); $user = $this->generateUsers();
$this->groupManager->get('admin')->addUser($user); $this->groupManager->get('admin')->addUser($user);
$this->userSession->setUser($user); $this->userSession->setUser($user);
@ -80,27 +82,27 @@ class AppsTest extends TestCase {
$this->assertTrue($result->succeeded()); $this->assertTrue($result->succeeded());
$data = $result->getData(); $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() { public function testGetAppsEnabled() {
$_GET['filter'] = 'enabled'; $_GET['filter'] = 'enabled';
$result = $this->api->getApps(['filter' => 'enabled']); $result = $this->api->getApps(['filter' => 'enabled']);
$this->assertTrue($result->succeeded()); $this->assertTrue($result->succeeded());
$data = $result->getData(); $data = $result->getData();
$this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps'])); $this->assertEquals(count(\OC_App::getEnabledApps()), count($data['apps']));
} }
public function testGetAppsDisabled() { public function testGetAppsDisabled() {
$this->ocsClient
->expects($this->any())
->method($this->anything())
->will($this->returnValue(null));
$_GET['filter'] = 'disabled'; $_GET['filter'] = 'disabled';
$result = $this->api->getApps(['filter' => 'disabled']); $result = $this->api->getApps(['filter' => 'disabled']);
$this->assertTrue($result->succeeded()); $this->assertTrue($result->succeeded());
$data = $result->getData(); $data = $result->getData();
$apps = \OC_App::listAllApps(); $apps = \OC_App::listAllApps(false, true, $this->ocsClient);
$list = array(); $list = array();
foreach($apps as $app) { foreach($apps as $app) {
$list[] = $app['id']; $list[] = $app['id'];

View File

@ -760,9 +760,12 @@ class OC_App {
* @param bool $onlyLocal * @param bool $onlyLocal
* @param bool $includeUpdateInfo Should we check whether there is an update * @param bool $includeUpdateInfo Should we check whether there is an update
* in the app store? * in the app store?
* @param OCSClient $ocsClient
* @return array * @return array
*/ */
public static function listAllApps($onlyLocal = false, $includeUpdateInfo = true) { public static function listAllApps($onlyLocal = false,
$includeUpdateInfo = true,
OCSClient $ocsClient) {
$installedApps = OC_App::getAllApps(); $installedApps = OC_App::getAllApps();
//TODO which apps do we want to blacklist and how do we integrate //TODO which apps do we want to blacklist and how do we integrate
@ -825,7 +828,7 @@ class OC_App {
if ($onlyLocal) { if ($onlyLocal) {
$remoteApps = []; $remoteApps = [];
} else { } else {
$remoteApps = OC_App::getAppstoreApps(); $remoteApps = OC_App::getAppstoreApps('approved', null, $ocsClient);
} }
if ($remoteApps) { if ($remoteApps) {
// Remove duplicates // Remove duplicates
@ -865,20 +868,16 @@ class OC_App {
/** /**
* Get a list of all apps on the appstore * Get a list of all apps on the appstore
* @param string $filter * @param string $filter
* @param string $category * @param string|null $category
* @param OCSClient $ocsClient
* @return array|bool multi-dimensional array of apps. * @return array|bool multi-dimensional array of apps.
* Keys: id, name, type, typename, personid, license, detailpage, preview, changed, description * 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]; $categories = [$category];
$ocsClient = new OCSClient(
\OC::$server->getHTTPClientService(),
\OC::$server->getConfig(),
\OC::$server->getLogger()
);
if (is_null($category)) { if (is_null($category)) {
$categoryNames = $ocsClient->getCategories(\OCP\Util::getVersion()); $categoryNames = $ocsClient->getCategories(\OCP\Util::getVersion());
if (is_array($categoryNames)) { if (is_array($categoryNames)) {

View File

@ -218,7 +218,7 @@ class AppSettingsController extends Controller {
break; break;
// not-installed apps // not-installed apps
case 1: case 1:
$apps = \OC_App::listAllApps(true, $includeUpdateInfo); $apps = \OC_App::listAllApps(true, $includeUpdateInfo, $this->ocsClient);
$apps = array_filter($apps, function ($app) { $apps = array_filter($apps, function ($app) {
return !$app['active']; return !$app['active'];
}); });
@ -244,7 +244,7 @@ class AppSettingsController extends Controller {
default: default:
$filter = $this->config->getSystemValue('appstore.experimental.enabled', false) ? 'all' : 'approved'; $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) { if (!$apps) {
$apps = array(); $apps = array();
} else { } else {
@ -310,7 +310,7 @@ class AppSettingsController extends Controller {
* @return array * @return array
*/ */
private function getInstalledApps($includeUpdateInfo = true) { 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) { $apps = array_filter($apps, function ($app) {
return $app['active']; return $app['active'];
}); });