From f5adf14de55f08e4fac94d503f0fe7aaa4f79f9f Mon Sep 17 00:00:00 2001
From: Shane Tomlinson <stomlinson@mozilla.com>
Date: Thu, 6 Oct 2011 13:51:18 +0100
Subject: [PATCH] Moving the passwordAndValidationPassword tests to the
 validation module.  Adding tests.

---
 .../static/dialog/resources/validation.js     | 49 +++++++++++++++++--
 .../dialog/test/qunit/validation_unit_test.js | 38 ++++++++++++++
 .../static/js/pages/verify_email_address.js   | 27 +---------
 3 files changed, 84 insertions(+), 30 deletions(-)

diff --git a/browserid/static/dialog/resources/validation.js b/browserid/static/dialog/resources/validation.js
index 12b3d5c0d..371f60e4c 100644
--- a/browserid/static/dialog/resources/validation.js
+++ b/browserid/static/dialog/resources/validation.js
@@ -31,10 +31,48 @@ BrowserID.Validation = (function() {
     var valid = validateEmail(email);
 
     if (valid) {
-      if (!password) {
-        tooltip.showTooltip("#password_required");
-        valid = false;
-      }
+      valid = passwordExists(password);
+    }
+
+    return valid;
+  }
+
+  function passwordExists(password) {
+    var valid = !!password;
+
+    if (!valid) {
+      tooltip.showTooltip("#password_required");
+    }
+
+    return valid;
+  }
+
+  function passwordLength(password) {
+    var valid = password && (password.length >= 8);
+
+    if(!valid) {
+      tooltip.showTooltip("#password_too_short");
+    }
+
+    return valid;
+  }
+
+  function validationPasswordExists(vpass) {
+    var valid = !!vpass;
+
+    if(!valid) {
+      tooltip.showTooltip("#vpassword_required");
+    }
+
+    return valid;
+  }
+
+  function passwordAndValidationPassword(pass, vpass) {
+    var valid = passwordExists(pass) && passwordLength(pass) && validationPasswordExists(vpass);
+
+    if (valid && pass !== vpass) {
+      valid = false;
+      tooltip.showTooltip("#passwords_no_match");
     }
 
     return valid;
@@ -42,7 +80,8 @@ BrowserID.Validation = (function() {
 
   return {
     email: validateEmail,
-    emailAndPassword: validateEmailAndPassword
+    emailAndPassword: validateEmailAndPassword,
+    passwordAndValidationPassword: passwordAndValidationPassword
   };
   
 }());
diff --git a/browserid/static/dialog/test/qunit/validation_unit_test.js b/browserid/static/dialog/test/qunit/validation_unit_test.js
index 380c6d1b1..5a0be014f 100644
--- a/browserid/static/dialog/test/qunit/validation_unit_test.js
+++ b/browserid/static/dialog/test/qunit/validation_unit_test.js
@@ -138,6 +138,44 @@ steal.plugins("jquery", "funcunit/qunit").then("/dialog/resources/browserid", fu
     equal(tooltipShown, true, "empty password shows tooltip");
   });
 
+
+  test("passwordAndValidationPassword with empty password", function() {
+    var valid = validation.passwordAndValidationPassword("", "password");
+
+    equal(valid, false, "empty password is invalid");
+    equal(tooltipShown, true, "empty password shows tooltip");
+  });
+
+
+  test("passwordAndValidationPassword with too short password", function() {
+    var valid = validation.passwordAndValidationPassword("pass", "password");
+
+    equal(valid, false, "too short password is invalid");
+    equal(tooltipShown, true, "too short password shows tooltip");
+  });
+
+  test("passwordAndValidationPassword with empty validation password", function() {
+    var valid = validation.passwordAndValidationPassword("password", "");
+
+    equal(valid, false, "empty validation password is invalid");
+    equal(tooltipShown, true, "empty validation password shows tooltip");
+  });
+
+
+  test("passwordAndValidationPassword with different validation password", function() {
+    var valid = validation.passwordAndValidationPassword("password", "pass");
+
+    equal(valid, false, "different password is invalid");
+    equal(tooltipShown, true, "different password shows tooltip");
+  });
+
+  test("passwordAndValidationPassword all valid", function() {
+    var valid = validation.passwordAndValidationPassword("password", "password");
+
+    equal(valid, true, "passwords valid");
+    equal(tooltipShown, false, "tooltip not shown");
+  });
+
 });
 
 
diff --git a/browserid/static/js/pages/verify_email_address.js b/browserid/static/js/pages/verify_email_address.js
index d43556140..07642d077 100644
--- a/browserid/static/js/pages/verify_email_address.js
+++ b/browserid/static/js/pages/verify_email_address.js
@@ -45,37 +45,14 @@
     $("#signUpForm").remove();
   }
 
-  function validate(pass, vpass) {
-    var valid = false;
-
-    if(!pass) {
-      tooltip.showTooltip("#password_required"); 
-    }
-    else if(pass.length < 8) {
-      tooltip.showTooltip("#password_too_short"); 
-    }
-    else if(!vpass) {
-      tooltip.showTooltip("#vpassword_required"); 
-    }
-    else if(pass !== vpass) {
-      tooltip.showTooltip("#passwords_no_match"); 
-    }
-    else {
-      valid = true;
-    }
-
-    return valid;
-  }
-
   bid.verifyEmailAddress = function(token) {
     $("#signUpForm").submit(function(event) {
       event.preventDefault();
 
-      var email = $("#email").val(),
-          pass = $("#password").val(),
+      var pass = $("#password").val(),
           vpass = $("#vpassword").val();
 
-      var valid = validate(pass, vpass);
+      var valid = bid.Validation.passwordAndValidationPassword(pass, vpass);
 
       if (valid) {
         bid.Network.completeUserRegistration(token, pass, function onSuccess(registered) {
-- 
GitLab