diff options
author | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-12 18:48:00 +0200 |
---|---|---|
committer | Bjoern Schiessle <bjoern@schiessle.org> | 2016-07-14 16:39:48 +0200 |
commit | 5bbba490c4444f7977e7ad0ce4266acbd67eee86 (patch) | |
tree | d9b9ebe78d82ba03c6be37e93be437b55efdfc5a /apps/federatedfilesharing/tests/js | |
parent | 2f23054b0126ec3497a7b632ff2399f6f3843a0f (diff) | |
download | nextcloud-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.js | 245 |
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); + }); + }); +}); |