Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorVincent Petry <pvince81@owncloud.com>2016-03-23 12:53:40 +0300
committerVincent Petry <pvince81@owncloud.com>2016-04-01 17:55:55 +0300
commitc58e96e6395dff5cf914d66df099922c0b1b6981 (patch)
tree14850befe6422eae78609b9f9b6f3f58773c519e /core
parent51ff3e7443592461dba9ba3730e80ca775f2c04b (diff)
Adjust core unit tests for unload/reload cases
Diffstat (limited to 'core')
-rw-r--r--core/js/js.js4
-rw-r--r--core/js/tests/specs/coreSpec.js45
2 files changed, 43 insertions, 6 deletions
diff --git a/core/js/js.js b/core/js/js.js
index f4e0fa464d8..b74775a935f 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -1448,10 +1448,10 @@ function initCore() {
$('html').addClass('edge');
}
- $(window).on('unload', function() {
+ $(window).on('unload.main', function() {
OC._unloadCalled = true;
});
- $(window).on('beforeunload', function() {
+ $(window).on('beforeunload.main', function() {
// super-trick thanks to http://stackoverflow.com/a/4651049
// in case another handler displays a confirmation dialog (ex: navigating away
// during an upload), there are two possible outcomes: user clicked "ok" or
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 774c2fdc72f..f18ecbc1a44 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -20,6 +20,15 @@
*/
describe('Core base tests', function() {
+ afterEach(function() {
+ // many tests call window.initCore so need to unregister global events
+ // ideally in the future we'll need a window.unloadCore() function
+ $(document).off('ajaxError.main');
+ $(document).off('unload.main');
+ $(document).off('beforeunload.main');
+ OC._userIsNavigatingAway = false;
+ OC._reloadCalled = false;
+ });
describe('Base values', function() {
it('Sets webroots', function() {
expect(OC.webroot).toBeDefined();
@@ -925,9 +934,10 @@ describe('Core base tests', function() {
});
});
describe('global ajax errors', function() {
- var reloadStub, ajaxErrorStub;
+ var reloadStub, ajaxErrorStub, clock;
beforeEach(function() {
+ clock = sinon.useFakeTimers();
reloadStub = sinon.stub(OC, 'reload');
// unstub the error processing method
ajaxErrorStub = OC._processAjaxError;
@@ -936,15 +946,17 @@ describe('Core base tests', function() {
});
afterEach(function() {
reloadStub.restore();
- $(document).off('ajaxError');
+ clock.restore();
});
- it('reloads current page in case of auth error', function () {
+ it('reloads current page in case of auth error', function() {
var dataProvider = [
[200, false],
[400, false],
+ [0, true],
[401, true],
[302, true],
+ [303, true],
[307, true]
];
@@ -953,9 +965,13 @@ describe('Core base tests', function() {
var expectedCall = dataProvider[i][1];
reloadStub.reset();
+ OC._reloadCalled = false;
$(document).trigger(new $.Event('ajaxError'), xhr);
+ // trigger timers
+ clock.tick(1000);
+
if (expectedCall) {
expect(reloadStub.calledOnce).toEqual(true);
} else {
@@ -963,6 +979,27 @@ describe('Core base tests', function() {
}
}
});
- })
+ it('reload only called once in case of auth error', function() {
+ var xhr = { status: 401 };
+
+ $(document).trigger(new $.Event('ajaxError'), xhr);
+ $(document).trigger(new $.Event('ajaxError'), xhr);
+
+ // trigger timers
+ clock.tick(1000);
+
+ expect(reloadStub.calledOnce).toEqual(true);
+ });
+ it('does not reload the page if the user was navigating away', function() {
+ var xhr = { status: 0 };
+ OC._userIsNavigatingAway = true;
+ clock.tick(100);
+
+ $(document).trigger(new $.Event('ajaxError'), xhr);
+
+ clock.tick(1000);
+ expect(reloadStub.notCalled).toEqual(true);
+ });
+ });
});