michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: "use strict"; michael@0: michael@0: XPCOMUtils.defineLazyModuleGetter(this, "IDService", michael@0: "resource://gre/modules/identity/Identity.jsm", michael@0: "IdentityService"); michael@0: michael@0: function test_overall() { michael@0: do_check_neq(IDService, null); michael@0: run_next_test(); michael@0: } michael@0: michael@0: function test_mock_doc() { michael@0: do_test_pending(); michael@0: let mockedDoc = mock_doc(null, TEST_URL, function(action, params) { michael@0: do_check_eq(action, 'coffee'); michael@0: do_test_finished(); michael@0: run_next_test(); michael@0: }); michael@0: michael@0: mockedDoc.doCoffee(); michael@0: } michael@0: michael@0: function test_add_identity() { michael@0: IDService.reset(); michael@0: michael@0: IDService.addIdentity(TEST_USER); michael@0: michael@0: let identities = IDService.RP.getIdentitiesForSite(TEST_URL); michael@0: do_check_eq(identities.result.length, 1); michael@0: do_check_eq(identities.result[0], TEST_USER); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: function test_select_identity() { michael@0: do_test_pending(); michael@0: michael@0: IDService.reset(); michael@0: michael@0: let id = "ishtar@mockmyid.com"; michael@0: setup_test_identity(id, TEST_CERT, function() { michael@0: let gotAssertion = false; michael@0: let mockedDoc = mock_doc(null, TEST_URL, call_sequentially( michael@0: function(action, params) { michael@0: // ready emitted from first watch() call michael@0: do_check_eq(action, 'ready'); michael@0: do_check_null(params); michael@0: }, michael@0: // first the login call michael@0: function(action, params) { michael@0: do_check_eq(action, 'login'); michael@0: do_check_neq(params, null); michael@0: michael@0: // XXX - check that the assertion is for the right email michael@0: michael@0: gotAssertion = true; michael@0: }, michael@0: // then the ready call michael@0: function(action, params) { michael@0: do_check_eq(action, 'ready'); michael@0: do_check_null(params); michael@0: michael@0: // we should have gotten the assertion already michael@0: do_check_true(gotAssertion); michael@0: michael@0: do_test_finished(); michael@0: run_next_test(); michael@0: })); michael@0: michael@0: // register the callbacks michael@0: IDService.RP.watch(mockedDoc); michael@0: michael@0: // register the request UX observer michael@0: makeObserver("identity-request", function (aSubject, aTopic, aData) { michael@0: // do the select identity michael@0: // we expect this to succeed right away because of test_identity michael@0: // so we don't mock network requests or otherwise michael@0: IDService.selectIdentity(aSubject.wrappedJSObject.rpId, id); michael@0: }); michael@0: michael@0: // do the request michael@0: IDService.RP.request(mockedDoc.id, {}); michael@0: }); michael@0: } michael@0: michael@0: function test_parse_good_email() { michael@0: var parsed = IDService.parseEmail('prime-minister@jed.gov'); michael@0: do_check_eq(parsed.username, 'prime-minister'); michael@0: do_check_eq(parsed.domain, 'jed.gov'); michael@0: run_next_test(); michael@0: } michael@0: michael@0: function test_parse_bogus_emails() { michael@0: do_check_eq(null, IDService.parseEmail('@evil.org')); michael@0: do_check_eq(null, IDService.parseEmail('foo@bar@baz.com')); michael@0: do_check_eq(null, IDService.parseEmail('you@wellsfargo.com/accounts/transfer?to=dolske&amt=all')); michael@0: run_next_test(); michael@0: } michael@0: michael@0: let TESTS = [test_overall, test_mock_doc]; michael@0: michael@0: TESTS.push(test_add_identity); michael@0: TESTS.push(test_select_identity); michael@0: TESTS.push(test_parse_good_email); michael@0: TESTS.push(test_parse_bogus_emails); michael@0: michael@0: TESTS.forEach(add_test); michael@0: michael@0: function run_test() { michael@0: run_next_test(); michael@0: }