]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix and update tests
authorRoeland Jago Douma <roeland@famdouma.nl>
Tue, 2 May 2017 06:59:53 +0000 (08:59 +0200)
committerRoeland Jago Douma <roeland@famdouma.nl>
Tue, 2 May 2017 06:59:53 +0000 (08:59 +0200)
Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
tests/lib/App/AppStore/Fetcher/FetcherBase.php

index 1cec52700004d19c8a7856ee7c64c7900e3887ea..96e4f3ae81a821c82cd84a9e40a0fcbdc2b9e3ce 100644 (file)
@@ -181,23 +181,16 @@ abstract class FetcherBase extends TestCase {
        }
 
        public function testGetWithAlreadyExistingFileAndOutdatedTimestamp() {
-               $this->config
-                       ->expects($this->at(0))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(1))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(2))
-                       ->method('getSystemValue')
-                       ->with(
-                               $this->equalTo('version'),
-                               $this->anything()
-                       )->willReturn('11.0.0.2');
+               $this->config->method('getSystemValue')
+                       ->willReturnCallback(function($key, $default) {
+                               if ($key === 'appstoreenabled') {
+                                       return true;
+                               } else if ($key === 'version') {
+                                       return '11.0.0.2';
+                               } else {
+                                       return $default;
+                               }
+                       });
 
                $folder = $this->createMock(ISimpleFolder::class);
                $file = $this->createMock(ISimpleFile::class);
@@ -421,16 +414,14 @@ abstract class FetcherBase extends TestCase {
        }
 
        public function testGetWithExceptionInClient() {
-               $this->config
-                       ->expects($this->at(0))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(1))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
+               $this->config->method('getSystemValue')
+                       ->willReturnCallback(function($key, $default) {
+                               if ($key === 'appstoreenabled') {
+                                       return true;
+                               } else {
+                                       return $default;
+                               }
+                       });
 
                $folder = $this->createMock(ISimpleFolder::class);
                $file = $this->createMock(ISimpleFile::class);
@@ -448,10 +439,6 @@ abstract class FetcherBase extends TestCase {
                        ->expects($this->at(0))
                        ->method('getContent')
                        ->willReturn('{"timestamp":1200,"data":{"MyApp":{"id":"MyApp"}}}');
-               $this->timeFactory
-                       ->expects($this->at(0))
-                       ->method('getTime')
-                       ->willReturn(1501);
                $client = $this->createMock(IClient::class);
                $this->clientService
                        ->expects($this->once())
@@ -467,23 +454,16 @@ abstract class FetcherBase extends TestCase {
        }
 
        public function testGetMatchingETag() {
-               $this->config
-                       ->expects($this->at(0))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(1))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(2))
-                       ->method('getSystemValue')
-                       ->with(
-                               $this->equalTo('version'),
-                               $this->anything()
-                       )->willReturn('11.0.0.2');
+               $this->config->method('getSystemValue')
+                       ->willReturnCallback(function($key, $default) {
+                               if ($key === 'appstoreenabled') {
+                                       return true;
+                               } else if ($key === 'version') {
+                                       return '11.0.0.2';
+                               } else {
+                                       return $default;
+                               }
+                       });
 
                $folder = $this->createMock(ISimpleFolder::class);
                $file = $this->createMock(ISimpleFile::class);
@@ -554,23 +534,16 @@ abstract class FetcherBase extends TestCase {
        }
 
        public function testGetNoMatchingETag() {
-               $this->config
-                       ->expects($this->at(0))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(1))
-                       ->method('getSystemValue')
-                       ->with('appstoreenabled', true)
-                       ->willReturn(true);
-               $this->config
-                       ->expects($this->at(2))
-                       ->method('getSystemValue')
-                       ->with(
-                               $this->equalTo('version'),
-                               $this->anything()
-                       )->willReturn('11.0.0.2');
+               $this->config->method('getSystemValue')
+                       ->willReturnCallback(function($key, $default) {
+                               if ($key === 'appstoreenabled') {
+                                       return true;
+                               } else if ($key === 'version') {
+                                       return '11.0.0.2';
+                               } else {
+                                       return $default;
+                               }
+                       });
 
                $folder = $this->createMock(ISimpleFolder::class);
                $file = $this->createMock(ISimpleFile::class);
@@ -644,4 +617,82 @@ abstract class FetcherBase extends TestCase {
                ];
                $this->assertSame($expected, $this->fetcher->get());
        }
+
+
+       public function testFetchAfterUpgradeNoETag() {
+               $this->config->method('getSystemValue')
+                       ->willReturnCallback(function($key, $default) {
+                               if ($key === 'appstoreenabled') {
+                                       return true;
+                               } else if ($key === 'version') {
+                                       return '11.0.0.3';
+                               } else {
+                                       return $default;
+                               }
+                       });
+
+               $folder = $this->createMock(ISimpleFolder::class);
+               $file = $this->createMock(ISimpleFile::class);
+               $this->appData
+                       ->expects($this->once())
+                       ->method('getFolder')
+                       ->with('/')
+                       ->willReturn($folder);
+               $folder
+                       ->expects($this->at(0))
+                       ->method('getFile')
+                       ->with($this->fileName)
+                       ->willReturn($file);
+               $file
+                       ->expects($this->at(0))
+                       ->method('getContent')
+                       ->willReturn('{"data":[{"id":"MyOldApp","abc":"def"}],"timestamp":1200,"ncversion":"11.0.0.2","ETag":"\"myETag\""}');
+               $client = $this->createMock(IClient::class);
+               $this->clientService
+                       ->expects($this->once())
+                       ->method('newClient')
+                       ->willReturn($client);
+               $response = $this->createMock(IResponse::class);
+               $client
+                       ->expects($this->once())
+                       ->method('get')
+                       ->with(
+                               $this->equalTo($this->endpoint),
+                               $this->equalTo([])
+                       )
+                       ->willReturn($response);
+               $response->method('getStatusCode')
+                       ->willReturn(200);
+               $response
+                       ->expects($this->once())
+                       ->method('getBody')
+                       ->willReturn('[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}]');
+               $response->method('getHeader')
+                       ->with($this->equalTo('ETag'))
+                       ->willReturn('"newETag"');
+               $fileData = '{"data":[{"id":"MyNewApp","foo":"foo"},{"id":"bar"}],"timestamp":1501,"ncversion":"11.0.0.3","ETag":"\"newETag\""}';
+               $file
+                       ->expects($this->at(1))
+                       ->method('putContent')
+                       ->with($fileData);
+               $file
+                       ->expects($this->at(2))
+                       ->method('getContent')
+                       ->willReturn($fileData);
+               $this->timeFactory
+                       ->expects($this->once())
+                       ->method('getTime')
+                       ->willReturn(1501);
+
+               $expected = [
+                       [
+                               'id' => 'MyNewApp',
+                               'foo' => 'foo',
+                       ],
+                       [
+                               'id' => 'bar',
+                       ],
+               ];
+               $this->assertSame($expected, $this->fetcher->get());
+       }
 }