diff options
Diffstat (limited to 'settings/tests/js')
-rw-r--r-- | settings/tests/js/users/deleteHandlerSpec.js | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/settings/tests/js/users/deleteHandlerSpec.js b/settings/tests/js/users/deleteHandlerSpec.js new file mode 100644 index 00000000000..6b6328be801 --- /dev/null +++ b/settings/tests/js/users/deleteHandlerSpec.js @@ -0,0 +1,185 @@ +/** +* ownCloud +* +* @author Vincent Petry +* @copyright 2014 Vincent Petry <pvince81@owncloud.com> +* +* This library is free software; you can redistribute it and/or +* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE +* License as published by the Free Software Foundation; either +* version 3 of the License, or any later version. +* +* This library 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 along with this library. If not, see <http://www.gnu.org/licenses/>. +* +*/ + +describe('DeleteHandler tests', function() { + var showNotificationSpy; + var hideNotificationSpy; + var clock; + var removeCallback; + var markCallback; + var undoCallback; + + function init(markCallback, removeCallback, undoCallback) { + var handler = new DeleteHandler('dummyendpoint.php', 'paramid', markCallback, removeCallback); + handler.setNotification(OC.Notification, 'dataid', 'removed %oid entry', undoCallback); + return handler; + } + + beforeEach(function() { + showNotificationSpy = sinon.spy(OC.Notification, 'showHtml'); + hideNotificationSpy = sinon.spy(OC.Notification, 'hide'); + clock = sinon.useFakeTimers(); + removeCallback = sinon.stub(); + markCallback = sinon.stub(); + undoCallback = sinon.stub(); + + $('#testArea').append('<div id="notification"></div>'); + }); + afterEach(function() { + showNotificationSpy.restore(); + hideNotificationSpy.restore(); + clock.restore(); + }); + it('shows a notification when marking for delete', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + + expect(showNotificationSpy.calledOnce).toEqual(true); + expect(showNotificationSpy.getCall(0).args[0]).toEqual('removed some_uid entry'); + + expect(markCallback.calledOnce).toEqual(true); + expect(markCallback.getCall(0).args[0]).toEqual('some_uid'); + expect(removeCallback.notCalled).toEqual(true); + expect(undoCallback.notCalled).toEqual(true); + + expect(fakeServer.requests.length).toEqual(0); + }); + it('deletes first entry and reshows notification on second delete', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + + expect(showNotificationSpy.calledOnce).toEqual(true); + expect(showNotificationSpy.getCall(0).args[0]).toEqual('removed some_uid entry'); + showNotificationSpy.reset(); + + handler.mark('some_other_uid'); + + expect(hideNotificationSpy.calledOnce).toEqual(true); + expect(showNotificationSpy.calledOnce).toEqual(true); + expect(showNotificationSpy.getCall(0).args[0]).toEqual('removed some_other_uid entry'); + + expect(markCallback.calledTwice).toEqual(true); + expect(markCallback.getCall(0).args[0]).toEqual('some_uid'); + expect(markCallback.getCall(1).args[0]).toEqual('some_other_uid'); + expect(removeCallback.notCalled).toEqual(true); + expect(undoCallback.notCalled).toEqual(true); + + // previous one was delete + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php'); + }); + it('automatically deletes after timeout', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + + clock.tick(5000); + // nothing happens yet + expect(fakeServer.requests.length).toEqual(0); + + clock.tick(3000); + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php'); + }); + it('deletes when deleteEntry is called', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + + handler.deleteEntry(); + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + expect(request.url).toEqual(OC.webroot + '/index.php/settings/ajax/dummyendpoint.php'); + }); + it('cancels deletion when undo is clicked', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.setNotification(OC.Notification, 'dataid', 'removed %oid entry <span class="undo">Undo</span>', undoCallback); + handler.mark('some_uid'); + $('#notification .undo').click(); + + expect(undoCallback.calledOnce).toEqual(true); + + // timer was cancelled + clock.tick(10000); + expect(fakeServer.requests.length).toEqual(0); + }); + it('cancels deletion when cancel method is called', function() { + var handler = init(markCallback, removeCallback, undoCallback); + handler.setNotification(OC.Notification, 'dataid', 'removed %oid entry <span class="undo">Undo</span>', undoCallback); + handler.mark('some_uid'); + handler.cancel(); + + // not sure why, seems to be by design + expect(undoCallback.notCalled).toEqual(true); + + // timer was cancelled + clock.tick(10000); + expect(fakeServer.requests.length).toEqual(0); + }); + it('calls removeCallback after successful server side deletion', function() { + fakeServer.respondWith(/\/index\.php\/settings\/ajax\/dummyendpoint.php/, [ + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'success'}) + ]); + + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + handler.deleteEntry(); + + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + var query = OC.parseQueryString(request.requestBody); + expect(query.paramid).toEqual('some_uid'); + + expect(removeCallback.calledOnce).toEqual(true); + expect(undoCallback.notCalled).toEqual(true); + expect(removeCallback.getCall(0).args[0]).toEqual('some_uid'); + }); + it('calls undoCallback and shows alert after failed server side deletion', function() { + // stub t to avoid extra calls + var tStub = sinon.stub(window, 't').returns('text'); + fakeServer.respondWith(/\/index\.php\/settings\/ajax\/dummyendpoint.php/, [ + 200, + { 'Content-Type': 'application/json' }, + JSON.stringify({status: 'error', data: {message: 'test error'}}) + ]); + + var alertDialogStub = sinon.stub(OC.dialogs, 'alert'); + var handler = init(markCallback, removeCallback, undoCallback); + handler.mark('some_uid'); + handler.deleteEntry(); + + expect(fakeServer.requests.length).toEqual(1); + var request = fakeServer.requests[0]; + var query = OC.parseQueryString(request.requestBody); + expect(query.paramid).toEqual('some_uid'); + + expect(removeCallback.notCalled).toEqual(true); + expect(undoCallback.calledOnce).toEqual(true); + expect(undoCallback.getCall(0).args[0]).toEqual('some_uid'); + + expect(alertDialogStub.calledOnce); + + alertDialogStub.restore(); + tStub.restore(); + }); +}); |