summaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/tests/NotificationsTest.php
diff options
context:
space:
mode:
authorJoas Schilling <nickvergessen@owncloud.com>2016-05-18 15:28:50 +0200
committerJoas Schilling <nickvergessen@owncloud.com>2016-05-18 15:28:50 +0200
commit8dc25321d3ca1725b970e86aa72e1f8106e05913 (patch)
tree58eec03fe5019762c285106d3ab59e8c27840f0d /apps/federatedfilesharing/tests/NotificationsTest.php
parent765782445a24fb1b239f2a3cd5c7b239ae4f6455 (diff)
downloadnextcloud-server-8dc25321d3ca1725b970e86aa72e1f8106e05913.tar.gz
nextcloud-server-8dc25321d3ca1725b970e86aa72e1f8106e05913.zip
Move FederatedFileSharing to PSR-4
Diffstat (limited to 'apps/federatedfilesharing/tests/NotificationsTest.php')
-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],
+ ];
+ }
+
+}