Skip to content
Snippets Groups Projects
Commit 182b1937 authored by Vincent Petry's avatar Vincent Petry
Browse files

Only reload file list after remote share accept request returns

When accepting a remote share, an ajax request is sent to the server.
Only once this request returns should the file list be reloaded.
parent bd888748
No related branches found
No related tags found
No related merge requests found
...@@ -131,8 +131,10 @@ ...@@ -131,8 +131,10 @@
function(result, share) { function(result, share) {
if (result) { if (result) {
// Accept // Accept
$.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id}); $.post(OC.generateUrl('/apps/files_sharing/api/externalShares'), {id: share.id})
fileList.reload(); .then(function() {
fileList.reload();
});
} else { } else {
// Delete // Delete
$.ajax({ $.ajax({
......
...@@ -31,7 +31,7 @@ describe('OCA.Sharing external tests', function() { ...@@ -31,7 +31,7 @@ describe('OCA.Sharing external tests', function() {
fileList: { fileList: {
reload: sinon.stub() reload: sinon.stub()
} }
} };
}); });
afterEach(function() { afterEach(function() {
urlQueryStub.restore(); urlQueryStub.restore();
...@@ -118,6 +118,124 @@ describe('OCA.Sharing external tests', function() { ...@@ -118,6 +118,124 @@ describe('OCA.Sharing external tests', function() {
}); });
}); });
describe('show dialog for each share to confirm', function() { describe('show dialog for each share to confirm', function() {
// TODO test plugin.processSharesToConfirm() 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',
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);
});
}); });
}); });
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment