services/sync/tests/unit/test_service_createAccount.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/services/sync/tests/unit/test_service_createAccount.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,75 @@
     1.4 +/* Any copyright is dedicated to the Public Domain.
     1.5 +   http://creativecommons.org/publicdomain/zero/1.0/ */
     1.6 +
     1.7 +Cu.import("resource://services-sync/util.js");
     1.8 +Cu.import("resource://services-sync/service.js");
     1.9 +Cu.import("resource://testing-common/services/sync/utils.js");
    1.10 +
    1.11 +function run_test() {
    1.12 +  initTestLogging("Trace");
    1.13 +
    1.14 +  let requestBody;
    1.15 +  let secretHeader;
    1.16 +  function send(statusCode, status, body) {
    1.17 +    return function(request, response) {
    1.18 +      requestBody = readBytesFromInputStream(request.bodyInputStream);
    1.19 +      if (request.hasHeader("X-Weave-Secret")) {
    1.20 +        secretHeader = request.getHeader("X-Weave-Secret");
    1.21 +      }
    1.22 +
    1.23 +      response.setStatusLine(request.httpVersion, statusCode, status);
    1.24 +      response.bodyOutputStream.write(body, body.length);
    1.25 +    };
    1.26 +  }
    1.27 +
    1.28 +  do_test_pending();
    1.29 +  let server = httpd_setup({
    1.30 +    // john@doe.com
    1.31 +    "/user/1.0/7wohs32cngzuqt466q3ge7indszva4of": send(200, "OK", "0"),
    1.32 +    // jane@doe.com
    1.33 +    "/user/1.0/vuuf3eqgloxpxmzph27f5a6ve7gzlrms": send(400, "Bad Request", "2"),
    1.34 +    // jim@doe.com
    1.35 +    "/user/1.0/vz6fhecgw5t3sgx3a4cektoiokyczkqd": send(500, "Server Error", "Server Error")
    1.36 +  });
    1.37 +  try {
    1.38 +    Service.serverURL = server.baseURI;
    1.39 +
    1.40 +    _("Create an account.");
    1.41 +    let res = Service.createAccount("john@doe.com", "mysecretpw",
    1.42 +                                    "challenge", "response");
    1.43 +    do_check_eq(res, null);
    1.44 +    let payload = JSON.parse(requestBody);
    1.45 +    do_check_eq(payload.password, "mysecretpw");
    1.46 +    do_check_eq(payload.email, "john@doe.com");
    1.47 +    do_check_eq(payload["captcha-challenge"], "challenge");
    1.48 +    do_check_eq(payload["captcha-response"], "response");
    1.49 +
    1.50 +    _("A non-ASCII password is UTF-8 encoded.");
    1.51 +    const moneyPassword = "moneyislike$£¥";
    1.52 +    res = Service.createAccount("john@doe.com", moneyPassword,
    1.53 +                                "challenge", "response");
    1.54 +    do_check_eq(res, null);
    1.55 +    payload = JSON.parse(requestBody);
    1.56 +    do_check_eq(payload.password, Utils.encodeUTF8(moneyPassword));
    1.57 +
    1.58 +    _("Invalid captcha or other user-friendly error.");
    1.59 +    res = Service.createAccount("jane@doe.com", "anothersecretpw",
    1.60 +                                "challenge", "response");
    1.61 +    do_check_eq(res, "invalid-captcha");
    1.62 +
    1.63 +    _("Generic server error.");
    1.64 +    res = Service.createAccount("jim@doe.com", "preciousss",
    1.65 +                                "challenge", "response");
    1.66 +    do_check_eq(res, "generic-server-error");
    1.67 +
    1.68 +    _("Admin secret preference is passed as HTTP header token.");
    1.69 +    Svc.Prefs.set("admin-secret", "my-server-secret");
    1.70 +    res = Service.createAccount("john@doe.com", "mysecretpw",
    1.71 +                                "challenge", "response");
    1.72 +    do_check_eq(secretHeader, "my-server-secret");
    1.73 +
    1.74 +  } finally {
    1.75 +    Svc.Prefs.resetBranch("");
    1.76 +    server.stop(do_test_finished);
    1.77 +  }
    1.78 +}

mercurial