/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/ */

add_task(async function test_state_prefs_unset() {
  await SpecialPowers.clearUserPref(TAB_PICKUP_STATE_PREF);
  await SpecialPowers.clearUserPref(RECENTLY_CLOSED_STATE_PREF);

  const sandbox = sinon.createSandbox();
  let setupCompleteStub = sandbox.stub(
    TabsSetupFlowManager,
    "isTabSyncSetupComplete"
  );
  setupCompleteStub.returns(true);

  await withFirefoxView({}, async function (browser) {
    const { document } = browser.contentWindow;
    let recentlyClosedTabsContainer = document.querySelector(
      "#recently-closed-tabs-container"
    );
    ok(
      recentlyClosedTabsContainer.open,
      "Recently Closed Tabs should be open if the pref is unset and sync setup is complete"
    );

    let tabPickupContainer = document.querySelector("#tab-pickup-container");
    ok(
      tabPickupContainer.open,
      "Tab Pickup container should be open if the pref is unset and sync setup is complete"
    );

    sandbox.restore();
  });
});

add_task(async function test_state_prefs_defined() {
  await SpecialPowers.pushPrefEnv({
    set: [
      [TAB_PICKUP_STATE_PREF, false],
      [RECENTLY_CLOSED_STATE_PREF, false],
    ],
  });

  const sandbox = sinon.createSandbox();
  let setupCompleteStub = sandbox.stub(
    TabsSetupFlowManager,
    "isTabSyncSetupComplete"
  );
  setupCompleteStub.returns(true);

  await withFirefoxView({}, async function (browser) {
    const { document } = browser.contentWindow;
    let recentlyClosedTabsContainer = document.querySelector(
      "#recently-closed-tabs-container"
    );
    ok(
      !recentlyClosedTabsContainer.getAttribute("open"),
      "Recently Closed Tabs should not be open if the pref is set to false"
    );

    let tabPickupContainer = document.querySelector("#tab-pickup-container");
    ok(
      !tabPickupContainer.getAttribute("open"),
      "Tab Pickup container should not be open if the pref is set to false and sync setup is complete"
    );

    sandbox.restore();
  });
});

add_task(async function test_state_pref_set_on_toggle() {
  await SpecialPowers.pushPrefEnv({
    set: [
      [TAB_PICKUP_STATE_PREF, true],
      [RECENTLY_CLOSED_STATE_PREF, true],
    ],
  });

  const sandbox = sinon.createSandbox();
  let setupCompleteStub = sandbox.stub(
    TabsSetupFlowManager,
    "isTabSyncSetupComplete"
  );
  setupCompleteStub.returns(true);

  await withFirefoxView({}, async function (browser) {
    const { document } = browser.contentWindow;

    await waitForElementVisible(browser, "#tab-pickup-container > summary");

    document.querySelector("#tab-pickup-container > summary").click();

    document.querySelector("#recently-closed-tabs-container > summary").click();

    // Wait a turn for the click to propagate to the pref.
    await TestUtils.waitForTick();

    ok(
      !Services.prefs.getBoolPref(RECENTLY_CLOSED_STATE_PREF),
      "Hiding the recently closed container should have flipped the UI state pref value"
    );
    ok(
      !Services.prefs.getBoolPref(TAB_PICKUP_STATE_PREF),
      "Hiding the tab pickup container should have flipped the UI state pref value"
    );

    sandbox.restore();
  });
});

add_task(async function test_state_prefs_ignored_during_sync_setup() {
  await SpecialPowers.pushPrefEnv({
    set: [
      [TAB_PICKUP_STATE_PREF, false],
      [RECENTLY_CLOSED_STATE_PREF, false],
    ],
  });
  const sandbox = sinon.createSandbox();
  let setupCompleteStub = sandbox.stub(
    TabsSetupFlowManager,
    "isTabSyncSetupComplete"
  );
  setupCompleteStub.returns(false);
  await withFirefoxView({}, async function (browser) {
    const { document } = browser.contentWindow;
    let recentlyClosedTabsContainer = document.querySelector(
      "#recently-closed-tabs-container"
    );
    ok(
      !recentlyClosedTabsContainer.open,
      "Recently Closed Tabs should not be open if the pref is set to false"
    );

    let tabPickupContainer = document.querySelector("#tab-pickup-container");
    ok(
      tabPickupContainer.open,
      "Tab Pickup container should be open if the pref is set to false but sync setup is not complete"
    );

    sandbox.restore();
  });
});
