summaryrefslogtreecommitdiffstats
path: root/browser/components/aboutlogins/tests/browser/browser_fxAccounts.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/aboutlogins/tests/browser/browser_fxAccounts.js')
-rw-r--r--browser/components/aboutlogins/tests/browser/browser_fxAccounts.js96
1 files changed, 96 insertions, 0 deletions
diff --git a/browser/components/aboutlogins/tests/browser/browser_fxAccounts.js b/browser/components/aboutlogins/tests/browser/browser_fxAccounts.js
new file mode 100644
index 0000000000..b66f204c92
--- /dev/null
+++ b/browser/components/aboutlogins/tests/browser/browser_fxAccounts.js
@@ -0,0 +1,96 @@
+/* Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/publicdomain/zero/1.0/ */
+
+const { UIState } = ChromeUtils.importESModule(
+ "resource://services-sync/UIState.sys.mjs"
+);
+
+function mockState(state) {
+ UIState.get = () => ({
+ status: state.status,
+ lastSync: new Date(),
+ email: state.email,
+ avatarURL: state.avatarURL,
+ });
+}
+
+add_setup(async function () {
+ let aboutLoginsTab = await BrowserTestUtils.openNewForegroundTab({
+ gBrowser,
+ url: "about:logins",
+ });
+ let getState = UIState.get;
+ registerCleanupFunction(() => {
+ BrowserTestUtils.removeTab(aboutLoginsTab);
+ UIState.get = getState;
+ });
+});
+
+add_task(async function test_logged_out() {
+ mockState({ status: UIState.STATUS_NOT_CONFIGURED });
+ Services.obs.notifyObservers(null, UIState.ON_UPDATE);
+
+ let browser = gBrowser.selectedBrowser;
+ await SpecialPowers.spawn(browser, [], async () => {
+ let fxAccountsButton = content.document.querySelector("fxaccounts-button");
+ Assert.ok(fxAccountsButton, "fxAccountsButton should exist");
+ fxAccountsButton = Cu.waiveXrays(fxAccountsButton);
+ await ContentTaskUtils.waitForCondition(
+ () => fxAccountsButton._loggedIn === false,
+ "waiting for _loggedIn to strictly equal false"
+ );
+ Assert.equal(
+ fxAccountsButton._loggedIn,
+ false,
+ "state should reflect not logged in"
+ );
+ });
+});
+
+add_task(async function test_login_syncing_enabled() {
+ const TEST_EMAIL = "test@example.com";
+ const TEST_AVATAR_URL =
+ "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==";
+ mockState({
+ status: UIState.STATUS_SIGNED_IN,
+ email: TEST_EMAIL,
+ avatarURL: TEST_AVATAR_URL,
+ });
+ await SpecialPowers.pushPrefEnv({
+ set: [["services.sync.engine.passwords", true]],
+ });
+ Services.obs.notifyObservers(null, UIState.ON_UPDATE);
+
+ let browser = gBrowser.selectedBrowser;
+ await SpecialPowers.spawn(
+ browser,
+ [[TEST_EMAIL, TEST_AVATAR_URL]],
+ async ([expectedEmail, expectedAvatarURL]) => {
+ let fxAccountsButton =
+ content.document.querySelector("fxaccounts-button");
+ Assert.ok(fxAccountsButton, "fxAccountsButton should exist");
+ fxAccountsButton = Cu.waiveXrays(fxAccountsButton);
+ await ContentTaskUtils.waitForCondition(
+ () => fxAccountsButton._email === expectedEmail,
+ "waiting for _email to strictly equal expectedEmail"
+ );
+ Assert.equal(
+ fxAccountsButton._loggedIn,
+ true,
+ "state should reflect logged in"
+ );
+ Assert.equal(
+ fxAccountsButton._email,
+ expectedEmail,
+ "state should have email set"
+ );
+ Assert.equal(
+ fxAccountsButton._avatarURL,
+ expectedAvatarURL,
+ "state should have avatarURL set"
+ );
+ }
+ );
+
+ await SpecialPowers.popPrefEnv();
+});