From 1d1c7dd86c35dc0f138393dee7aaf8431c3e0ce7 Mon Sep 17 00:00:00 2001
From: Shane Tomlinson <stomlinson@mozilla.com>
Date: Mon, 24 Sep 2012 14:13:23 +0100
Subject: [PATCH] Clean up the dialog unit tests.

* Further use of the testExpectGetFailure, testExpectGetSuccess, testRelativeURLNotAllowed and testMustBeAbsolutePath
---
 .../test/cases/dialog/js/modules/dialog.js    | 398 ++++--------------
 1 file changed, 81 insertions(+), 317 deletions(-)

diff --git a/resources/static/test/cases/dialog/js/modules/dialog.js b/resources/static/test/cases/dialog/js/modules/dialog.js
index ee9fb9eaa..ca94b8128 100644
--- a/resources/static/test/cases/dialog/js/modules/dialog.js
+++ b/resources/static/test/cases/dialog/js/modules/dialog.js
@@ -72,13 +72,13 @@
     });
   }
 
-  function testExpectGetFailure(options, expectedErrorMessage) {
+  function testExpectGetFailure(options, expectedErrorMessage, domain) {
     _.extend(options, {
       ready: function() {
         testMessageNotExpected("kpi_data");
         testMessageNotExpected("start");
 
-        var retval = controller.get(HTTPS_TEST_DOMAIN, options);
+        var retval = controller.get(domain || HTTPS_TEST_DOMAIN, options);
 
         if (expectedErrorMessage) {
           equal(retval, expectedErrorMessage, "expected error: " + expectedErrorMessage);
@@ -87,6 +87,9 @@
           ok(retval, "error message returned");
         }
 
+        // If a parameter is not properly escaped, scriptRun will be true.
+        equal(typeof window.scriptRun, "undefined", "script was not run");
+
         testErrorVisible();
         start();
       }
@@ -102,7 +105,7 @@
     testExpectGetFailure(options, "must be an absolute path: (" + path + ")");
   }
 
-  function testExpectGetSuccess(options, expected) {
+  function testExpectGetSuccess(options, expected, domain, done) {
     createController({
       ready: function() {
         var startInfo;
@@ -110,11 +113,14 @@
           startInfo = info;
         });
 
-        var retval = controller.get(HTTP_TEST_DOMAIN, options);
+        var retval = controller.get(domain || HTTPS_TEST_DOMAIN, options);
         testHelpers.testObjectValuesEqual(startInfo, expected);
 
         equal(typeof retval, "undefined", "no error expected");
         testErrorNotVisible();
+
+        done && done();
+
         start();
       }
     });
@@ -263,154 +269,66 @@
 
 
   asyncTest("get with relative termsOfService & valid privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "relative.html",
-          privacyPolicy: "/privacy.html"
-        });
-        equal(retval, "relative urls not allowed: (relative.html)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    testRelativeURLNotAllowed({
+      termsOfService: "relative.html",
+      privacyPolicy: "/privacy.html"
+    }, "relative.html");
   });
 
   asyncTest("get with script containing termsOfService - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "relative.html<script>window.scriptRun=true;</script>",
-          privacyPolicy: "/privacy.html"
-        });
-
-        // If termsOfService is not properly escaped, scriptRun will be true.
-        equal(typeof window.scriptRun, "undefined", "script was not run");
-        equal(retval, "relative urls not allowed: (relative.html<script>window.scriptRun=true;</script>)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "relative.html<script>window.scriptRun=true;</script>";
+    testRelativeURLNotAllowed({
+      termsOfService: URL,
+      privacyPolicy: "/privacy.html"
+    }, URL);
   });
 
   asyncTest("get with valid termsOfService & relative privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "/tos.html",
-          privacyPolicy: "relative.html"
-        });
-        equal(retval, "relative urls not allowed: (relative.html)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "relative.html";
+    testRelativeURLNotAllowed({
+      termsOfService: "/tos.html",
+      privacyPolicy: URL
+    }, URL);
   });
 
   asyncTest("get with valid termsOfService & privacyPolicy='/' - print error screen", function() {
+    var URL = "/";
     testRelativeURLNotAllowed({
       termsOfService: "/tos.html",
-      privacyPolicy: "/"
-    }, "/");
+      privacyPolicy: URL
+    }, URL);
   });
 
   asyncTest("get with valid termsOfService='/' and valid privacyPolicy - print error screen", function() {
+    var URL = "/"
     testRelativeURLNotAllowed({
-      termsOfService: "/",
+      termsOfService: URL,
       privacyPolicy: "/privacy.html"
-    }, "/");
+    }, URL);
   });
 
   asyncTest("get with script containing privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "/tos.html",
-          privacyPolicy: "relative.html<script>window.scriptRun=true;</script>"
-        });
-
-        // If privacyPolicy is not properly escaped, scriptRun will be true.
-        equal(typeof window.scriptRun, "undefined", "script was not run");
-        equal(retval, "relative urls not allowed: (relative.html<script>window.scriptRun=true;</script>)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
-  });
-
-  asyncTest("get with privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "/tos.html",
-          privacyPolicy: "relative.html<script>window.scriptRun=true;</script>"
-        });
-
-        // If privacyPolicy is not properly escaped, scriptRun will be true.
-        equal(typeof window.scriptRun, "undefined", "script was not run");
-        equal(retval, "relative urls not allowed: (relative.html<script>window.scriptRun=true;</script>)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "relative.html<script>window.scriptRun=true;</script>";
+    testRelativeURLNotAllowed({
+      termsOfService: "/tos.html",
+      privacyPolicy: URL
+    }, URL);
   });
 
   asyncTest("get with javascript protocol for privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "/tos.html",
-          privacyPolicy: "javascript:alert(1)"
-        });
-
-        equal(retval, "relative urls not allowed: (javascript:alert(1))", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "javascript:alert(1)";
+    testRelativeURLNotAllowed({
+      termsOfService: "/tos.html",
+      privacyPolicy: URL
+    }, URL);
   });
 
   asyncTest("get with invalid httpg protocol for privacyPolicy - print error screen", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          termsOfService: "/tos.html",
-          privacyPolicy: "httpg://testdomain.com/privacy.html"
-        });
-
-        equal(retval, "relative urls not allowed: (httpg://testdomain.com/privacy.html)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "httpg://testdomain.com/privacy.html";
+    testRelativeURLNotAllowed({
+      termsOfService: "/tos.html",
+      privacyPolicy: URL
+    }, URL);
   });
 
 
@@ -420,8 +338,8 @@
       privacyPolicy: "/privacy.html"
     },
     {
-      termsOfService: HTTP_TEST_DOMAIN + "/tos.html",
-      privacyPolicy: HTTP_TEST_DOMAIN + "/privacy.html"
+      termsOfService: HTTPS_TEST_DOMAIN + "/tos.html",
+      privacyPolicy: HTTPS_TEST_DOMAIN + "/privacy.html"
     });
   });
 
@@ -456,159 +374,51 @@
       privacyURL: "/privacy_deprecated.html"
     },
     {
-      termsOfService: HTTP_TEST_DOMAIN + "/tos.html",
-      privacyPolicy: HTTP_TEST_DOMAIN + "/privacy.html"
+      termsOfService: HTTPS_TEST_DOMAIN + "/tos.html",
+      privacyPolicy: HTTPS_TEST_DOMAIN + "/privacy.html"
     });
   });
 
   asyncTest("get with relative siteLogo - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: "logo.png",
-        });
-
-        equal(retval, "must be an absolute path: (logo.png)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "logo.png";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with javascript: siteLogo - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: "javascript:alert('xss')",
-        });
-
-        equal(retval, "must be an absolute path: (javascript:alert('xss'))", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "javascript:alert('xss')";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with data-uri: siteLogo - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: "data:image/png,FAKEDATA",
-        });
-
-        equal(retval, "must be an absolute path: (data:image/png,FAKEDATA)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "data:image/png,FAKEDATA";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with http: siteLogo - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: HTTP_TEST_DOMAIN + "://logo.png",
-        });
-
-        equal(retval, "must be an absolute path: (" + HTTP_TEST_DOMAIN + "://logo.png)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = HTTP_TEST_DOMAIN + "://logo.png";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with https: siteLogo - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: HTTPS_TEST_DOMAIN + "://logo.png",
-        });
-
-        equal(retval, "must be an absolute path: (" + HTTPS_TEST_DOMAIN + "://logo.png)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = HTTPS_TEST_DOMAIN + "://logo.png";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with absolute path and http RP - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var siteLogo = '/i/card.png';
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          siteLogo: siteLogo
-        });
-
-        equal(retval, "only https sites can specify a siteLogo", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var siteLogo = '/i/card.png';
+    testExpectGetFailure({ siteLogo: siteLogo }, "only https sites can specify a siteLogo", HTTP_TEST_DOMAIN);
   });
 
   asyncTest("get with absolute path that is too long - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        // create a logo path that is one character too long
-        var siteLogo = '/' + testHelpers.generateString(bid.PATH_MAX_LENGTH);
-        var retval = controller.get(HTTPS_TEST_DOMAIN, {
-          siteLogo: siteLogo
-        });
-
-        equal(retval, "path portion of a url must be < " + bid.PATH_MAX_LENGTH + " characters");
-        testErrorVisible();
-        start();
-      }
-    });
+    var siteLogo = '/' + testHelpers.generateString(bid.PATH_MAX_LENGTH);
+    testExpectGetFailure({ siteLogo: siteLogo }, "path portion of a url must be < " + bid.PATH_MAX_LENGTH + " characters");
   });
 
   asyncTest("get with absolute path causing too long of a URL - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var shortHTTPSDomain = "https://test.com";
-        // create a URL that is one character too long
-        var siteLogo = '/' + testHelpers.generateString(bid.URL_MAX_LENGTH - shortHTTPSDomain.length);
-        var retval = controller.get(shortHTTPSDomain, {
-          siteLogo: siteLogo
-        });
-
-        equal(retval, "urls must be < " + bid.URL_MAX_LENGTH + " characters");
-        testErrorVisible();
-        start();
-      }
-    });
+    var shortHTTPSDomain = "https://test.com";
+    // create a URL that is one character too long
+    var siteLogo = '/' + testHelpers.generateString(bid.URL_MAX_LENGTH - shortHTTPSDomain.length);
+    testExpectGetFailure({ siteLogo: siteLogo }, "urls must be < " + bid.URL_MAX_LENGTH + " characters");
   });
 
   asyncTest("get with absolute path and https RP - allowed URL but is properly escaped", function() {
@@ -635,82 +445,36 @@
   });
 
   asyncTest("get with a scheme-relative siteLogo URL - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "start should not have been called");
-        });
-
-        var retval = controller.get(HTTPS_TEST_DOMAIN, {
-          siteLogo: "//example.com/image.png"
-        });
-
-        equal(retval, "must be an absolute path: (//example.com/image.png)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = "//example.com/image.png";
+    testMustBeAbsolutePath({ siteLogo: URL }, URL);
   });
 
   asyncTest("get with siteLogo='/' URL - not allowed", function() {
     testMustBeAbsolutePath({ siteLogo: "/" }, "/");
   });
 
-  asyncTest("get with fully qualified URL for returnTo - not allowed", function() {
-    createController({
-      ready: function() {
-        var URL = HTTP_TEST_DOMAIN + "/path";
-
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "unexpected start");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          returnTo: URL
-        });
-
-        equal(retval, "must be an absolute path: (" + URL + ")", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+  asyncTest("get with fully qualified returnTo - not allowed", function() {
+    var URL = HTTPS_TEST_DOMAIN + "/path";
+    testMustBeAbsolutePath({ returnTo: URL }, URL);
   });
 
   asyncTest("get with a scheme-relative returnTo URL - not allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          ok(false, "unexpected start");
-        });
-
-        var retval = controller.get(HTTP_TEST_DOMAIN, {
-          returnTo: '//example.com/return'
-        });
-
-        equal(retval, "must be an absolute path: (//example.com/return)", "expected error");
-        testErrorVisible();
-        start();
-      }
-    });
+    var URL = '//example.com/return';
+    testMustBeAbsolutePath({ returnTo: URL }, URL);
   });
 
   asyncTest("get with absolute path returnTo - allowed", function() {
-    createController({
-      ready: function() {
-        mediator.subscribe("start", function(msg, info) {
-          equal(user.getReturnTo(), HTTPS_TEST_DOMAIN + "/path", "returnTo correctly set");
-          start();
-        });
-
-        var retval = controller.get(HTTPS_TEST_DOMAIN, {
-          returnTo: "/path"
-        });
-      }
+    testExpectGetSuccess({ returnTo: "/path"}, {}, undefined, function() {
+      equal(user.getReturnTo(),
+        HTTPS_TEST_DOMAIN + "/path", "returnTo correctly set");
     });
   });
 
   asyncTest("get with returnTo='/' - allowed", function() {
-    testExpectGetSuccess({ returnTo: "/"}, {});
+    testExpectGetSuccess({ returnTo: "/"}, {}, undefined, function() {
+      equal(user.getReturnTo(),
+        HTTPS_TEST_DOMAIN + "/", "returnTo correctly set");
+    });
   });
 
   asyncTest("get with valid rp_api - allowed", function() {
-- 
GitLab