00a65e30ce
In case an application gets disabled the level is set to "experimental" if it does not contain a `shipped` tag. This can for example be reproduced by installing the documents app from the appstore and then disabling it. Or cloning an app from git. With this change the controller will now load the level of the application from the appstore if a valid OCSID has been provided. Fixes https://github.com/owncloud/core/issues/17003
981 lines
27 KiB
PHP
981 lines
27 KiB
PHP
<?php
|
|
/**
|
|
* @author Lukas Reschke <lukas@owncloud.com>
|
|
*
|
|
* @copyright Copyright (c) 2015, ownCloud, Inc.
|
|
* @license AGPL-3.0
|
|
*
|
|
* This code is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License, version 3,
|
|
* as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License, version 3,
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>
|
|
*
|
|
*/
|
|
|
|
use OC\OCSClient;
|
|
use OCP\Http\Client\IClientService;
|
|
use OCP\IConfig;
|
|
use OCP\ILogger;
|
|
|
|
/**
|
|
* Class OCSClientTest
|
|
*/
|
|
class OCSClientTest extends \Test\TestCase {
|
|
/** @var OCSClient */
|
|
private $ocsClient;
|
|
/** @var IConfig */
|
|
private $config;
|
|
/** @var IClientService */
|
|
private $clientService;
|
|
/** @var ILogger */
|
|
private $logger;
|
|
|
|
public function setUp() {
|
|
parent::setUp();
|
|
|
|
$this->config = $this->getMockBuilder('\OCP\IConfig')
|
|
->disableOriginalConstructor()->getMock();
|
|
$this->clientService = $this->getMock('\OCP\Http\Client\IClientService');
|
|
$this->logger = $this->getMock('\OCP\ILogger');
|
|
|
|
$this->ocsClient = new OCSClient(
|
|
$this->clientService,
|
|
$this->config,
|
|
$this->logger
|
|
);
|
|
}
|
|
|
|
public function testIsAppStoreEnabledSuccess() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->assertTrue($this->ocsClient->isAppStoreEnabled());
|
|
}
|
|
|
|
public function testIsAppStoreEnabledFail() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(false));
|
|
$this->assertFalse($this->ocsClient->isAppStoreEnabled());
|
|
}
|
|
|
|
public function testGetAppStoreUrl() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
$this->assertSame('https://api.owncloud.com/v1', self::invokePrivate($this->ocsClient, 'getAppStoreUrl'));
|
|
}
|
|
|
|
public function testGetCategoriesDisabledAppStore() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(false));
|
|
$this->assertNull($this->ocsClient->getCategories());
|
|
}
|
|
|
|
public function testGetCategoriesExceptionClient() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/categories',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->throwException(new \Exception('TheErrorMessage')));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get categories: TheErrorMessage',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getCategories());
|
|
}
|
|
|
|
public function testGetCategoriesParseError() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('MyInvalidXml'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/categories',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get categories, content was no valid XML',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getCategories());
|
|
}
|
|
|
|
public function testGetCategoriesSuccessful() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('<?xml version="1.0"?>
|
|
<ocs>
|
|
<meta>
|
|
<status>ok</status>
|
|
<statuscode>100</statuscode>
|
|
<message></message>
|
|
<totalitems>6</totalitems>
|
|
</meta>
|
|
<data>
|
|
<category>
|
|
<id>920</id>
|
|
<name>ownCloud Multimedia</name>
|
|
</category>
|
|
<category>
|
|
<id>921</id>
|
|
<name>ownCloud PIM</name>
|
|
</category>
|
|
<category>
|
|
<id>922</id>
|
|
<name>ownCloud Productivity</name>
|
|
</category>
|
|
<category>
|
|
<id>923</id>
|
|
<name>ownCloud Game</name>
|
|
</category>
|
|
<category>
|
|
<id>924</id>
|
|
<name>ownCloud Tool</name>
|
|
</category>
|
|
<category>
|
|
<id>925</id>
|
|
<name>ownCloud other</name>
|
|
</category>
|
|
</data>
|
|
</ocs>
|
|
'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/categories',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$expected = [
|
|
920 => 'ownCloud Multimedia',
|
|
921 => 'ownCloud PIM',
|
|
922 => 'ownCloud Productivity',
|
|
923 => 'ownCloud Game',
|
|
924 => 'ownCloud Tool',
|
|
925 => 'ownCloud other',
|
|
];
|
|
$this->assertSame($expected, $this->ocsClient->getCategories());
|
|
}
|
|
|
|
public function testGetApplicationsDisabledAppStore() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(false));
|
|
$this->assertSame([], $this->ocsClient->getApplications([], 1, 'approved'));
|
|
}
|
|
|
|
public function testGetApplicationsExceptionClient() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data',
|
|
[
|
|
'timeout' => 5,
|
|
'query' => [
|
|
'version' => implode('x', \OC_Util::getVersion()),
|
|
'filter' => 'approved',
|
|
'categories' => '815x1337',
|
|
'sortmode' => 'new',
|
|
'page' => 1,
|
|
'pagesize' => 100,
|
|
'approved' => 'approved',
|
|
],
|
|
]
|
|
)
|
|
->will($this->throwException(new \Exception('TheErrorMessage')));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get applications: TheErrorMessage',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertSame([], $this->ocsClient->getApplications([815, 1337], 1, 'approved'));
|
|
}
|
|
|
|
public function testGetApplicationsParseError() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('MyInvalidXml'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data',
|
|
[
|
|
'timeout' => 5,
|
|
'query' => [
|
|
'version' => implode('x', \OC_Util::getVersion()),
|
|
'filter' => 'approved',
|
|
'categories' => '815x1337',
|
|
'sortmode' => 'new',
|
|
'page' => 1,
|
|
'pagesize' => 100,
|
|
'approved' => 'approved',
|
|
],
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get applications, content was no valid XML',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertSame([], $this->ocsClient->getApplications([815, 1337], 1, 'approved'));
|
|
}
|
|
|
|
public function testGetApplicationsSuccessful() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('<?xml version="1.0"?>
|
|
<ocs>
|
|
<meta>
|
|
<status>ok</status>
|
|
<statuscode>100</statuscode>
|
|
<message></message>
|
|
<totalitems>2</totalitems>
|
|
<itemsperpage>100</itemsperpage>
|
|
</meta>
|
|
<data>
|
|
<content details="summary">
|
|
<id>168707</id>
|
|
<name>Calendar 8.0</name>
|
|
<version>0.6.4</version>
|
|
<label>recommended</label>
|
|
<changed>2015-02-09T15:23:56+01:00</changed>
|
|
<created>2015-01-26T04:35:19+01:00</created>
|
|
<typeid>921</typeid>
|
|
<typename>ownCloud PIM</typename>
|
|
<language></language>
|
|
<personid>owncloud</personid>
|
|
<profilepage>http://opendesktop.org/usermanager/search.php?username=owncloud</profilepage>
|
|
<downloads>5393</downloads>
|
|
<score>60</score>
|
|
<description>Calendar App for ownCloud</description>
|
|
<comments>7</comments>
|
|
<fans>10</fans>
|
|
<licensetype>16</licensetype>
|
|
<approved>0</approved>
|
|
<category>1</category>
|
|
<license>AGPL</license>
|
|
<preview1></preview1>
|
|
<detailpage>https://apps.owncloud.com/content/show.php?content=168707</detailpage>
|
|
<downloadtype1></downloadtype1>
|
|
<downloadway1>0</downloadway1>
|
|
<downloadprice1>0</downloadprice1>
|
|
<downloadlink1>http://apps.owncloud.com/content/download.php?content=168707&id=1</downloadlink1>
|
|
<downloadgpgsignature1></downloadgpgsignature1>
|
|
<downloadgpgfingerprint1></downloadgpgfingerprint1>
|
|
<downloadpackagename1></downloadpackagename1>
|
|
<downloadrepository1></downloadrepository1>
|
|
<downloadname1></downloadname1>
|
|
<downloadsize1>885</downloadsize1>
|
|
</content>
|
|
<content details="summary">
|
|
<id>168708</id>
|
|
<name>Contacts 8.0</name>
|
|
<version>0.3.0.18</version>
|
|
<label>recommended</label>
|
|
<changed>2015-02-09T15:18:58+01:00</changed>
|
|
<created>2015-01-26T04:45:17+01:00</created>
|
|
<typeid>921</typeid>
|
|
<typename>ownCloud PIM</typename>
|
|
<language></language>
|
|
<personid>owncloud</personid>
|
|
<profilepage>http://opendesktop.org/usermanager/search.php?username=owncloud</profilepage>
|
|
<downloads>4237</downloads>
|
|
<score>58</score>
|
|
<description></description>
|
|
<comments>3</comments>
|
|
<fans>6</fans>
|
|
<licensetype>16</licensetype>
|
|
<approved>200</approved>
|
|
<category>1</category>
|
|
<license>AGPL</license>
|
|
<preview1></preview1>
|
|
<detailpage>https://apps.owncloud.com/content/show.php?content=168708</detailpage>
|
|
<downloadtype1></downloadtype1>
|
|
<downloadway1>0</downloadway1>
|
|
<downloadprice1>0</downloadprice1>
|
|
<downloadlink1>http://apps.owncloud.com/content/download.php?content=168708&id=1</downloadlink1>
|
|
<downloadgpgsignature1></downloadgpgsignature1>
|
|
<downloadgpgfingerprint1></downloadgpgfingerprint1>
|
|
<downloadpackagename1></downloadpackagename1>
|
|
<downloadrepository1></downloadrepository1>
|
|
<downloadname1></downloadname1>
|
|
<downloadsize1>1409</downloadsize1>
|
|
</content>
|
|
</data>
|
|
</ocs> '));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data',
|
|
[
|
|
'timeout' => 5,
|
|
'query' => [
|
|
'version' => implode('x', \OC_Util::getVersion()),
|
|
'filter' => 'approved',
|
|
'categories' => '815x1337',
|
|
'sortmode' => 'new',
|
|
'page' => 1,
|
|
'pagesize' => 100,
|
|
'approved' => 'approved',
|
|
],
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$expected = [
|
|
[
|
|
'id' => '168707',
|
|
'name' => 'Calendar 8.0',
|
|
'label' => 'recommended',
|
|
'version' => '0.6.4',
|
|
'type' => '921',
|
|
'typename' => 'ownCloud PIM',
|
|
'personid' => 'owncloud',
|
|
'license' => 'AGPL',
|
|
'detailpage' => 'https://apps.owncloud.com/content/show.php?content=168707',
|
|
'preview' => '',
|
|
'preview-full' => '',
|
|
'changed' => 1423491836,
|
|
'description' => 'Calendar App for ownCloud',
|
|
'score' => '60',
|
|
'downloads' => 5393,
|
|
'level' => 0,
|
|
'profilepage' => 'http://opendesktop.org/usermanager/search.php?username=owncloud',
|
|
],
|
|
[
|
|
'id' => '168708',
|
|
'name' => 'Contacts 8.0',
|
|
'label' => 'recommended',
|
|
'version' => '0.3.0.18',
|
|
'type' => '921',
|
|
'typename' => 'ownCloud PIM',
|
|
'personid' => 'owncloud',
|
|
'license' => 'AGPL',
|
|
'detailpage' => 'https://apps.owncloud.com/content/show.php?content=168708',
|
|
'preview' => '',
|
|
'preview-full' => '',
|
|
'changed' => 1423491538,
|
|
'description' => '',
|
|
'score' => '58',
|
|
'downloads' => 4237,
|
|
'level' => 200,
|
|
'profilepage' => 'http://opendesktop.org/usermanager/search.php?username=owncloud',
|
|
],
|
|
];
|
|
$this->assertEquals($expected, $this->ocsClient->getApplications([815, 1337], 1, 'approved'));
|
|
}
|
|
|
|
public function tesGetApplicationDisabledAppStore() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(false));
|
|
$this->assertNull($this->ocsClient->getApplication('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationExceptionClient() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data/MyId',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->throwException(new \Exception('TheErrorMessage')));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get application: TheErrorMessage',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getApplication('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationParseError() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('MyInvalidXml'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data/MyId',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get application, content was no valid XML',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getApplication('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationSuccessful() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('<?xml version="1.0"?>
|
|
<ocs>
|
|
<meta>
|
|
<status>ok</status>
|
|
<statuscode>100</statuscode>
|
|
<message></message>
|
|
</meta>
|
|
<data>
|
|
<content details="full">
|
|
<id>166053</id>
|
|
<name>Versioning</name>
|
|
<version>0.0.1</version>
|
|
<label>recommended</label>
|
|
<typeid>925</typeid>
|
|
<typename>ownCloud other</typename>
|
|
<language></language>
|
|
<personid>owncloud</personid>
|
|
<profilepage>http://opendesktop.org/usermanager/search.php?username=owncloud</profilepage>
|
|
<created>2014-07-07T16:34:40+02:00</created>
|
|
<changed>2014-07-07T16:34:40+02:00</changed>
|
|
<downloads>140</downloads>
|
|
<score>50</score>
|
|
<description>Placeholder for future updates</description>
|
|
<summary></summary>
|
|
<feedbackurl></feedbackurl>
|
|
<changelog></changelog>
|
|
<homepage></homepage>
|
|
<homepagetype></homepagetype>
|
|
<homepage2></homepage2>
|
|
<homepagetype2></homepagetype2>
|
|
<homepage3></homepage3>
|
|
<homepagetype3></homepagetype3>
|
|
<homepage4></homepage4>
|
|
<homepagetype4></homepagetype4>
|
|
<homepage5></homepage5>
|
|
<homepagetype5></homepagetype5>
|
|
<homepage6></homepage6>
|
|
<homepagetype6></homepagetype6>
|
|
<homepage7></homepage7>
|
|
<homepagetype7></homepagetype7>
|
|
<homepage8></homepage8>
|
|
<homepagetype8></homepagetype8>
|
|
<homepage9></homepage9>
|
|
<homepagetype9></homepagetype9>
|
|
<homepage10></homepage10>
|
|
<homepagetype10></homepagetype10>
|
|
<licensetype>16</licensetype>
|
|
<license>AGPL</license>
|
|
<donationpage></donationpage>
|
|
<comments>0</comments>
|
|
<commentspage>http://apps.owncloud.com/content/show.php?content=166053</commentspage>
|
|
<fans>0</fans>
|
|
<fanspage>http://apps.owncloud.com/content/show.php?action=fan&content=166053</fanspage>
|
|
<knowledgebaseentries>0</knowledgebaseentries>
|
|
<knowledgebasepage>http://apps.owncloud.com/content/show.php?action=knowledgebase&content=166053</knowledgebasepage>
|
|
<depend>ownCloud 7</depend>
|
|
<preview1></preview1>
|
|
<preview2></preview2>
|
|
<preview3></preview3>
|
|
<previewpic1></previewpic1>
|
|
<previewpic2></previewpic2>
|
|
<previewpic3></previewpic3>
|
|
<picsmall1></picsmall1>
|
|
<picsmall2></picsmall2>
|
|
<picsmall3></picsmall3>
|
|
<detailpage>https://apps.owncloud.com/content/show.php?content=166053</detailpage>
|
|
<downloadtype1></downloadtype1>
|
|
<downloadprice1>0</downloadprice1>
|
|
<downloadlink1>http://apps.owncloud.com/content/download.php?content=166053&id=1</downloadlink1>
|
|
<downloadname1></downloadname1>
|
|
<downloadgpgfingerprint1></downloadgpgfingerprint1>
|
|
<downloadgpgsignature1></downloadgpgsignature1>
|
|
<downloadpackagename1></downloadpackagename1>
|
|
<downloadrepository1></downloadrepository1>
|
|
<downloadsize1>1</downloadsize1>
|
|
<approved>200</approved>
|
|
</content>
|
|
</data>
|
|
</ocs>
|
|
'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data/MyId',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$expected = [
|
|
'id' => 166053,
|
|
'name' => 'Versioning',
|
|
'version' => '0.0.1',
|
|
'type' => '925',
|
|
'label' => 'recommended',
|
|
'typename' => 'ownCloud other',
|
|
'personid' => 'owncloud',
|
|
'profilepage' => 'http://opendesktop.org/usermanager/search.php?username=owncloud',
|
|
'detailpage' => 'https://apps.owncloud.com/content/show.php?content=166053',
|
|
'preview1' => '',
|
|
'preview2' => '',
|
|
'preview3' => '',
|
|
'changed' => 1404743680,
|
|
'description' => 'Placeholder for future updates',
|
|
'score' => 50,
|
|
'level' => 200,
|
|
];
|
|
$this->assertSame($expected, $this->ocsClient->getApplication('MyId'));
|
|
}
|
|
public function testGetApplicationEmptyXml() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('<?xml version="1.0"?>
|
|
<ocs>
|
|
<meta>
|
|
<status>ok</status>
|
|
<statuscode>100</statuscode>
|
|
<message></message>
|
|
</meta>
|
|
</ocs>
|
|
'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/data/MyId',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->assertSame(null, $this->ocsClient->getApplication('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationDownloadDisabledAppStore() {
|
|
$this->config
|
|
->expects($this->once())
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(false));
|
|
$this->assertNull($this->ocsClient->getApplicationDownload('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationDownloadExceptionClient() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/download/MyId/1',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->throwException(new \Exception('TheErrorMessage')));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get application download URL: TheErrorMessage',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getApplicationDownload('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationDownloadParseError() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('MyInvalidXml'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/download/MyId/1',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$this->logger
|
|
->expects($this->once())
|
|
->method('error')
|
|
->with(
|
|
'Could not get application download URL, content was no valid XML',
|
|
[
|
|
'app' => 'core',
|
|
]
|
|
);
|
|
|
|
$this->assertNull($this->ocsClient->getApplicationDownload('MyId'));
|
|
}
|
|
|
|
public function testGetApplicationDownloadUrlSuccessful() {
|
|
$this->config
|
|
->expects($this->at(0))
|
|
->method('getSystemValue')
|
|
->with('appstoreenabled', true)
|
|
->will($this->returnValue(true));
|
|
$this->config
|
|
->expects($this->at(1))
|
|
->method('getSystemValue')
|
|
->with('appstoreurl', 'https://api.owncloud.com/v1')
|
|
->will($this->returnValue('https://api.owncloud.com/v1'));
|
|
|
|
$response = $this->getMock('\OCP\Http\Client\IResponse');
|
|
$response
|
|
->expects($this->once())
|
|
->method('getBody')
|
|
->will($this->returnValue('<?xml version="1.0"?>
|
|
<ocs>
|
|
<meta>
|
|
<status>ok</status>
|
|
<statuscode>100</statuscode>
|
|
<message></message>
|
|
</meta>
|
|
<data>
|
|
<content details="download">
|
|
<downloadlink>https://apps.owncloud.com/CONTENT/content-files/166052-files_trashbin.zip</downloadlink>
|
|
<mimetype>application/zip</mimetype>
|
|
<gpgfingerprint></gpgfingerprint>
|
|
<gpgsignature></gpgsignature>
|
|
<packagename></packagename>
|
|
<repository></repository>
|
|
</content>
|
|
</data>
|
|
</ocs>
|
|
'));
|
|
|
|
$client = $this->getMock('\OCP\Http\Client\IClient');
|
|
$client
|
|
->expects($this->once())
|
|
->method('get')
|
|
->with(
|
|
'https://api.owncloud.com/v1/content/download/MyId/1',
|
|
[
|
|
'timeout' => 5,
|
|
]
|
|
)
|
|
->will($this->returnValue($response));
|
|
|
|
$this->clientService
|
|
->expects($this->once())
|
|
->method('newClient')
|
|
->will($this->returnValue($client));
|
|
|
|
$expected = [
|
|
'downloadlink' => 'https://apps.owncloud.com/CONTENT/content-files/166052-files_trashbin.zip',
|
|
];
|
|
$this->assertSame($expected, $this->ocsClient->getApplicationDownload('MyId'));
|
|
}
|
|
}
|