From 4c04cfa60ceda72491732ac026d4297a6129358e Mon Sep 17 00:00:00 2001
From: Shane Tomlinson <stomlinson@mozilla.com>
Date: Fri, 13 Jan 2012 16:21:50 +0000
Subject: [PATCH] If the user is already logged out when they hit "sign out",
 do not show error.

close #630.
---
 resources/static/shared/network.js                    | 10 +++++++++-
 resources/static/test/qunit/mocks/xhr.js              |  3 ++-
 .../static/test/qunit/shared/network_unit_test.js     | 11 ++++++++++-
 3 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/resources/static/shared/network.js b/resources/static/shared/network.js
index 874d81df6..3ee3ad0c0 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 2652c8cee..0d84daec0 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 1ec356c80..c9aeb14cb 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);
   });
-- 
GitLab