summaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/tests
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2016-04-11 11:13:00 +0200
committerMorris Jobke <hey@morrisjobke.de>2016-04-11 11:13:00 +0200
commit929a28421ac1b5e4576d8866306b5cde62d178b7 (patch)
tree8c0cc33b8786bf2c8991c064f893169d7d82771a /apps/federatedfilesharing/tests
parent8652ef28aac7d103b147ae82271522b9f09e03b6 (diff)
parentfbd5c28c39ff5ba338a95e2ca18e72b436eb9515 (diff)
downloadnextcloud-server-929a28421ac1b5e4576d8866306b5cde62d178b7.tar.gz
nextcloud-server-929a28421ac1b5e4576d8866306b5cde62d178b7.zip
Merge pull request #23798 from owncloud/federated-unshare-background-job
re-try to send unshare notification if remote server is not available
Diffstat (limited to 'apps/federatedfilesharing/tests')
-rw-r--r--apps/federatedfilesharing/tests/notificationstest.php151
1 files changed, 151 insertions, 0 deletions
diff --git a/apps/federatedfilesharing/tests/notificationstest.php b/apps/federatedfilesharing/tests/notificationstest.php
new file mode 100644
index 00000000000..bde69a82bad
--- /dev/null
+++ b/apps/federatedfilesharing/tests/notificationstest.php
@@ -0,0 +1,151 @@
+<?php
+/**
+ * @author Björn Schießle <schiessle@owncloud.com>
+ *
+ * @copyright Copyright (c) 2016, 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/>
+ *
+ */
+
+
+namespace OCA\FederatedFileSharing\Tests;
+
+
+use OCA\FederatedFileSharing\AddressHandler;
+use OCA\FederatedFileSharing\DiscoveryManager;
+use OCA\FederatedFileSharing\Notifications;
+use OCP\BackgroundJob\IJobList;
+use OCP\Http\Client\IClientService;
+use Test\TestCase;
+
+class NotificationsTest extends TestCase {
+
+ /** @var AddressHandler | \PHPUnit_Framework_MockObject_MockObject */
+ private $addressHandler;
+
+ /** @var IClientService | \PHPUnit_Framework_MockObject_MockObject*/
+ private $httpClientService;
+
+ /** @var DiscoveryManager | \PHPUnit_Framework_MockObject_MockObject */
+ private $discoveryManager;
+
+ /** @var IJobList | \PHPUnit_Framework_MockObject_MockObject */
+ private $jobList;
+
+ public function setUp() {
+ parent::setUp();
+
+ $this->jobList = $this->getMock('OCP\BackgroundJob\IJobList');
+ $this->discoveryManager = $this->getMockBuilder('OCA\FederatedFileSharing\DiscoveryManager')
+ ->disableOriginalConstructor()->getMock();
+ $this->httpClientService = $this->getMock('OCP\Http\Client\IClientService');
+ $this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
+ ->disableOriginalConstructor()->getMock();
+
+ }
+
+ /**
+ * get instance of Notifications class
+ *
+ * @param array $mockedMethods methods which should be mocked
+ * @return Notifications | \PHPUnit_Framework_MockObject_MockObject
+ */
+ private function getInstance(array $mockedMethods = []) {
+ if (empty($mockedMethods)) {
+ $instance = new Notifications(
+ $this->addressHandler,
+ $this->httpClientService,
+ $this->discoveryManager,
+ $this->jobList
+ );
+ } else {
+ $instance = $this->getMockBuilder('OCA\FederatedFileSharing\Notifications')
+ ->setConstructorArgs(
+ [
+ $this->addressHandler,
+ $this->httpClientService,
+ $this->discoveryManager,
+ $this->jobList
+ ]
+ )->setMethods($mockedMethods)->getMock();
+ }
+
+ return $instance;
+ }
+
+ /**
+ * @dataProvider dataTestSendRemoteUnShare
+ *
+ * @param int $try
+ * @param array $httpRequestResult
+ * @param bool $expected
+ */
+ public function testSendRemoteUnShare($try, $httpRequestResult, $expected) {
+ $remote = 'remote';
+ $id = 42;
+ $timestamp = 63576;
+ $token = 'token';
+ $instance = $this->getInstance(['tryHttpPostToShareEndpoint', 'getTimestamp']);
+
+ $instance->expects($this->any())->method('getTimestamp')->willReturn($timestamp);
+
+ $instance->expects($this->once())->method('tryHttpPostToShareEndpoint')
+ ->with($remote, '/'.$id.'/unshare', ['token' => $token, 'format' => 'json'])
+ ->willReturn($httpRequestResult);
+
+ $this->addressHandler->expects($this->once())->method('removeProtocolFromUrl')
+ ->with($remote)->willReturn($remote);
+
+ // only add background job on first try
+ if ($try === 0 && $expected === false) {
+ $this->jobList->expects($this->once())->method('add')
+ ->with(
+ 'OCA\FederatedFileSharing\BackgroundJob\UnShare',
+ [
+ 'remote' => $remote,
+ 'id' => $id,
+ 'token' => $token,
+ 'try' => $try,
+ 'lastRun' => $timestamp
+ ]
+ );
+ } else {
+ $this->jobList->expects($this->never())->method('add');
+ }
+
+ $this->assertSame($expected,
+ $instance->sendRemoteUnShare($remote, $id, $token, $try)
+ );
+
+ }
+
+ public function dataTestSendRemoteUnshare() {
+ return [
+ // test if background job is added correctly
+ [0, ['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], true],
+ [1, ['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], true],
+ [0, ['success' => false, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], false],
+ [1, ['success' => false, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], false],
+ // test all combinations of 'statuscode' and 'success'
+ [0, ['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], true],
+ [0, ['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])], true],
+ [0, ['success' => true, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 400]]])], false],
+ [0, ['success' => false, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 200]]])], false],
+ [0, ['success' => false, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 100]]])], false],
+ [0, ['success' => false, 'result' => json_encode(['ocs' => ['meta' => ['statuscode' => 400]]])], false],
+ ];
+ }
+
+}