diff --git a/lib/private/ocsclient.php b/lib/private/ocsclient.php index 84469cb5e0dd93cda0ef0c29582ff2a18ca2642b..b00772fb799f35fd6620b022d2bab99a8e3201b6 100644 --- a/lib/private/ocsclient.php +++ b/lib/private/ocsclient.php @@ -262,6 +262,9 @@ class OCSClient { } $tmp = $data->data->content; + if (is_null($tmp)) { + return null; + } $app = []; $app['id'] = (int)$tmp->id; diff --git a/tests/lib/OCSClientTest.php b/tests/lib/ocsclienttest.php similarity index 95% rename from tests/lib/OCSClientTest.php rename to tests/lib/ocsclienttest.php index fa3f1fe7848e52d8fcdab94ee55b05a0c626e458..f4bf1536291d9751b291e09798482ca1d49571df 100644 --- a/tests/lib/OCSClientTest.php +++ b/tests/lib/ocsclienttest.php @@ -773,6 +773,51 @@ class OCSClientTest extends \Test\TestCase { ]; $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