diff --git a/resources/static/shared/network.js b/resources/static/shared/network.js index 874d81df6ed7530e4933f107382f9bf88dac2eb0..3ee3ad0c0a3cf70eed618cc266655b518c20db1d 100644 --- a/resources/static/shared/network.js +++ b/resources/static/shared/network.js @@ -235,7 +235,15 @@ BrowserID.Network = (function() { auth_status = false; if (onComplete) onComplete(); }, - error: onFailure + error: function(info, xhr, textStatus) { + if (info.network.status === 400) { + auth_status = false; + if (onComplete) onComplete(); + } + else { + onFailure && onFailure(info); + } + } }); }, diff --git a/resources/static/test/qunit/mocks/xhr.js b/resources/static/test/qunit/mocks/xhr.js index 2652c8cee6ce2478a1f2051a9513454393e4be94..0d84daec0dfb77db227712b2227c6bd08547dddd 100644 --- a/resources/static/test/qunit/mocks/xhr.js +++ b/resources/static/test/qunit/mocks/xhr.js @@ -61,7 +61,8 @@ BrowserID.Mocks.xhr = (function() { "post /wsapi/complete_user_creation invalid": { success: false }, "post /wsapi/complete_user_creation ajaxError": undefined, "post /wsapi/logout valid": { success: true }, - "post /wsapi/logout ajaxError": undefined, + "post /wsapi/logout not_authenticated": 400, + "post /wsapi/logout ajaxError": 401, "get /wsapi/have_email?email=registered%40testuser.com valid": { email_known: true }, "get /wsapi/have_email?email=registered%40testuser.com throttle": { email_known: true }, "get /wsapi/have_email?email=registered%40testuser.com ajaxError": undefined, diff --git a/resources/static/test/qunit/shared/network_unit_test.js b/resources/static/test/qunit/shared/network_unit_test.js index 1ec356c80a08afac5d7532a64834c68e966bdc5f..c9aeb14cb75409d2a289047fa86852e4d08fce08 100644 --- a/resources/static/test/qunit/shared/network_unit_test.js +++ b/resources/static/test/qunit/shared/network_unit_test.js @@ -102,10 +102,19 @@ network.logout(function onSuccess() { ok(true, "we can logout"); start(); - }, testHelpers.unexpectedFailure); + }, testHelpers.unexpectedXHRFailure); }); + asyncTest("logout with 400 failure - user already logged out", function() { + xhr.useResult("not_authenticated"); + + network.logout(function onSuccess() { + ok(true, "we can logout"); + start(); + }, testHelpers.unexpectedXHRFailure); + }); + asyncTest("logout with XHR failure", function() { failureCheck(network.logout); });