summaryrefslogtreecommitdiffstats
path: root/apps/federatedfilesharing/tests/js
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/js
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/js')
-rw-r--r--apps/federatedfilesharing/tests/js/externalSpec.js245
1 files changed, 245 insertions, 0 deletions
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);
+ });
+ });
+});