summaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/tests
diff options
context:
space:
mode:
authorBjoern Schiessle <bjoern@schiessle.org>2016-07-12 18:48:00 +0200
committerBjoern Schiessle <bjoern@schiessle.org>2016-07-14 16:39:48 +0200
commit5bbba490c4444f7977e7ad0ce4266acbd67eee86 (patch)
treed9b9ebe78d82ba03c6be37e93be437b55efdfc5a /apps/federatedfilesharing/tests
parent2f23054b0126ec3497a7b632ff2399f6f3843a0f (diff)
downloadnextcloud-server-5bbba490c4444f7977e7ad0ce4266acbd67eee86.tar.gz
nextcloud-server-5bbba490c4444f7977e7ad0ce4266acbd67eee86.zip
move some stuff over to the federatedfilesharing app
Diffstat (limited to 'apps/federatedfilesharing/tests')
-rw-r--r--apps/federatedfilesharing/tests/Controller/SaveToNextcloudControllerTest.php30
-rw-r--r--apps/federatedfilesharing/tests/js/externalSpec.js245
2 files changed, 269 insertions, 6 deletions
diff --git a/apps/federatedfilesharing/tests/Controller/SaveToNextcloudControllerTest.php b/apps/federatedfilesharing/tests/Controller/SaveToNextcloudControllerTest.php
index 60136212c31..0e36df9b25a 100644
--- a/apps/federatedfilesharing/tests/Controller/SaveToNextcloudControllerTest.php
+++ b/apps/federatedfilesharing/tests/Controller/SaveToNextcloudControllerTest.php
@@ -28,8 +28,11 @@ use OCA\FederatedFileSharing\Controller\SaveToNextcloudController;
use OCA\FederatedFileSharing\FederatedShareProvider;
use OCP\AppFramework\Http;
use OCP\Files\IRootFolder;
+use OCP\Http\Client\IClientService;
+use OCP\IL10N;
use OCP\ISession;
use OCP\IUserManager;
+use OCP\IUserSession;
use OCP\Share;
use OCP\Share\IManager;
use OCP\Share\IShare;
@@ -60,29 +63,44 @@ class SaveToNextcloudControllerTest extends \Test\TestCase {
/** @var ISession | \PHPUnit_Framework_MockObject_MockObject */
private $session;
+ /** @var IL10N | \PHPUnit_Framework_MockObject_MockObject */
+ private $l10n;
+
+ /** @var IUserSession | \PHPUnit_Framework_MockObject_MockObject */
+ private $userSession;
+
+ /** @var IClientService | \PHPUnit_Framework_MockObject_MockObject */
+ private $clientService;
+
/** @var IShare */
private $share;
public function setUp() {
parent::setUp();
- $this->request = $this->getMock('OCP\IRequest');
+ $this->request = $this->getMockBuilder('OCP\IRequest')->disableOriginalConstructor()->getMock();
$this->federatedShareProvider = $this->getMockBuilder('OCA\FederatedFileSharing\FederatedShareProvider')
->disableOriginalConstructor()->getMock();
- $this->shareManager = $this->getMock('OCP\Share\IManager');
+ $this->shareManager = $this->getMockBuilder('OCP\Share\IManager')->disableOriginalConstructor()->getMock();
$this->addressHandler = $this->getMockBuilder('OCA\FederatedFileSharing\AddressHandler')
->disableOriginalConstructor()->getMock();
- $this->rootFolder = $this->getMock('OCP\Files\IRootFolder');
- $this->userManager = $this->getMock('OCP\IUserManager');
+ $this->rootFolder = $this->getMockBuilder('OCP\Files\IRootFolder')->disableOriginalConstructor()->getMock();
+ $this->userManager = $this->getMockBuilder('OCP\IUserManager')->disableOriginalConstructor()->getMock();
$this->share = new \OC\Share20\Share($this->rootFolder, $this->userManager);
- $this->session = $this->getMock('OCP\ISession');
+ $this->session = $this->getMockBuilder('OCP\ISession')->disableOriginalConstructor()->getMock();
+ $this->l10n = $this->getMockBuilder('OCP\IL10N')->disableOriginalConstructor()->getMock();
+ $this->userSession = $this->getMockBuilder('OCP\IUserSession')->disableOriginalConstructor()->getMock();
+ $this->clientService = $this->getMockBuilder('OCP\Http\Client\IClientService')->disableOriginalConstructor()->getMock();
$this->controller = new SaveToNextcloudController(
'federatedfilesharing', $this->request,
$this->federatedShareProvider,
$this->shareManager,
$this->addressHandler,
- $this->session
+ $this->session,
+ $this->l10n,
+ $this->userSession,
+ $this->clientService
);
}
diff --git a/apps/federatedfilesharing/tests/js/externalSpec.js b/apps/federatedfilesharing/tests/js/externalSpec.js
new file mode 100644
index 00000000000..362df49252b
--- /dev/null
+++ b/apps/federatedfilesharing/tests/js/externalSpec.js
@@ -0,0 +1,245 @@
+/*
+ * Copyright (c) 2015 Vincent Petry <pvince81@owncloud.com>
+ *
+ * This file is licensed under the Affero General Public License version 3
+ * or later.
+ *
+ * See the COPYING-README file.
+ *
+ */
+
+describe('OCA.Sharing external tests', function() {
+ var plugin;
+ var urlQueryStub;
+ var promptDialogStub;
+ var confirmDialogStub;
+
+ function dummyShowDialog() {
+ var deferred = $.Deferred();
+ deferred.resolve();
+ return deferred.promise();
+ }
+
+ beforeEach(function() {
+ plugin = OCA.Sharing.ExternalShareDialogPlugin;
+ urlQueryStub = sinon.stub(OC.Util.History, 'parseUrlQuery');
+
+ confirmDialogStub = sinon.stub(OC.dialogs, 'confirm', dummyShowDialog);
+ promptDialogStub = sinon.stub(OC.dialogs, 'prompt', dummyShowDialog);
+
+ plugin.filesApp = {
+ fileList: {
+ reload: sinon.stub()
+ }
+ };
+ });
+ afterEach(function() {
+ urlQueryStub.restore();
+ confirmDialogStub.restore();
+ promptDialogStub.restore();
+ plugin = null;
+ });
+ describe('confirmation dialog from URL', function() {
+ var testShare;
+
+ /**
+ * Checks that the server call's query matches what is
+ * expected.
+ *
+ * @param {Object} expectedQuery expected query params
+ */
+ function checkRequest(expectedQuery) {
+ var request = fakeServer.requests[0];
+ var query = OC.parseQueryString(request.requestBody);
+ expect(request.method).toEqual('POST');
+ expect(query).toEqual(expectedQuery);
+
+ request.respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify({status: 'success'})
+ );
+ expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true);
+ }
+
+ beforeEach(function() {
+ testShare = {
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
+ name: 'the share name'
+ };
+ });
+ it('does nothing when no share was passed in URL', function() {
+ urlQueryStub.returns({});
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.notCalled).toEqual(true);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ it('sends share info to server on confirm', function() {
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+ confirmDialogStub.getCall(0).args[2](true);
+ expect(fakeServer.requests.length).toEqual(1);
+ checkRequest({
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
+ name: 'the share name',
+ password: ''
+ });
+ });
+ it('sends share info with password to server on confirm', function() {
+ testShare = _.extend(testShare, {protected: 1});
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.calledOnce).toEqual(true);
+ expect(confirmDialogStub.notCalled).toEqual(true);
+ promptDialogStub.getCall(0).args[2](true, 'thepassword');
+ expect(fakeServer.requests.length).toEqual(1);
+ checkRequest({
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
+ name: 'the share name',
+ password: 'thepassword'
+ });
+ });
+ it('does not send share info on cancel', function() {
+ urlQueryStub.returns(testShare);
+ plugin.processIncomingShareFromUrl();
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+ confirmDialogStub.getCall(0).args[2](false);
+ expect(fakeServer.requests.length).toEqual(0);
+ });
+ });
+ describe('show dialog for each share to confirm', function() {
+ var testShare;
+
+ /**
+ * Call processSharesToConfirm() and make the fake server
+ * return the passed response.
+ *
+ * @param {Array} response list of shares to process
+ */
+ function processShares(response) {
+ plugin.processSharesToConfirm();
+
+ expect(fakeServer.requests.length).toEqual(1);
+
+ var req = fakeServer.requests[0];
+ expect(req.method).toEqual('GET');
+ expect(req.url).toEqual(OC.webroot + '/index.php/apps/files_sharing/api/externalShares');
+
+ req.respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify(response)
+ );
+ }
+
+ beforeEach(function() {
+ testShare = {
+ id: 123,
+ remote: 'http://example.com/owncloud',
+ token: 'abcdefg',
+ owner: 'theowner',
+ ownerDisplayName: 'The Generous Owner',
+ name: 'the share name'
+ };
+ });
+
+ it('does not show any dialog if no shares to confirm', function() {
+ processShares([]);
+ expect(confirmDialogStub.notCalled).toEqual(true);
+ expect(promptDialogStub.notCalled).toEqual(true);
+ });
+ it('sends accept info to server on confirm', function() {
+ processShares([testShare]);
+
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+
+ confirmDialogStub.getCall(0).args[2](true);
+
+ expect(fakeServer.requests.length).toEqual(2);
+
+ var request = fakeServer.requests[1];
+ var query = OC.parseQueryString(request.requestBody);
+ expect(request.method).toEqual('POST');
+ expect(query).toEqual({id: '123'});
+ expect(request.url).toEqual(
+ OC.webroot + '/index.php/apps/files_sharing/api/externalShares'
+ );
+
+ expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true);
+ request.respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify({status: 'success'})
+ );
+ expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true);
+ });
+ it('sends delete info to server on cancel', function() {
+ processShares([testShare]);
+
+ expect(promptDialogStub.notCalled).toEqual(true);
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+
+ confirmDialogStub.getCall(0).args[2](false);
+
+ expect(fakeServer.requests.length).toEqual(2);
+
+ var request = fakeServer.requests[1];
+ expect(request.method).toEqual('DELETE');
+ expect(request.url).toEqual(
+ OC.webroot + '/index.php/apps/files_sharing/api/externalShares/123'
+ );
+
+ expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true);
+ request.respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify({status: 'success'})
+ );
+ expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true);
+ });
+ xit('shows another dialog when multiple shares need to be accepted', function() {
+ // TODO: enable this test when fixing multiple dialogs issue / confirm loop
+ var testShare2 = _.extend({}, testShare);
+ testShare2.id = 256;
+ processShares([testShare, testShare2]);
+
+ // confirm first one
+ expect(confirmDialogStub.calledOnce).toEqual(true);
+ confirmDialogStub.getCall(0).args[2](true);
+
+ // next dialog not shown yet
+ expect(confirmDialogStub.calledOnce);
+
+ // respond to the first accept request
+ fakeServer.requests[1].respond(
+ 200,
+ {'Content-Type': 'application/json'},
+ JSON.stringify({status: 'success'})
+ );
+
+ // don't reload yet, there are other shares to confirm
+ expect(plugin.filesApp.fileList.reload.notCalled).toEqual(true);
+
+ // cancel second share
+ expect(confirmDialogStub.calledTwice).toEqual(true);
+ confirmDialogStub.getCall(1).args[2](true);
+
+ // reload only called at the very end
+ expect(plugin.filesApp.fileList.reload.calledOnce).toEqual(true);
+ });
+ });
+});