chromium/chrome/test/data/webui/chromeos/settings/internet_page/passpoint_remove_dialog_test.ts

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'chrome://os-settings/lazy_load.js';

import {PasspointRemoveDialogElement} from 'chrome://os-settings/lazy_load.js';
import {CrButtonElement, CrDialogElement} from 'chrome://os-settings/os_settings.js';
import {loadTimeData} from 'chrome://resources/js/load_time_data.js';
import {flush} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {assertEquals, assertFalse, assertTrue} from 'chrome://webui-test/chai_assert.js';
import {eventToPromise} from 'chrome://webui-test/test_util.js';

suite('<passpoint-remove-dialog>', () => {
  let removeDialog: PasspointRemoveDialogElement;

  async function init(isPasspointSettingsEnabled: boolean) {
    loadTimeData.overrideValues({
      isPasspointSettingsEnabled,
    });
    removeDialog = document.createElement('passpoint-remove-dialog');
    assertTrue(!!removeDialog);
    document.body.appendChild(removeDialog);
    await flush();
  }

  function getButton(buttonId: string): CrButtonElement {
    const button =
        removeDialog.shadowRoot!.querySelector<CrButtonElement>(`#${buttonId}`);
    assertTrue(!!button);
    return button;
  }

  test('Network and subscription removal', async () => {
    // When "Passpoint settings flag" is disabled the dialog has to show two
    // messages.
    await init(false);

    const desc =
        removeDialog.shadowRoot!.querySelector<HTMLDivElement>('#description');
    assertTrue(!!desc);
    assertFalse(desc.hidden);

    const info =
        removeDialog.shadowRoot!.querySelector<HTMLSpanElement>('#information');
    assertTrue(!!info);

    // Confirm button shows "Confirm".
    const button = getButton('confirmButton');
    assertEquals(loadTimeData.getString('confirm'), button.textContent!.trim());
  });

  test('Go to subscription page', async () => {
    // When "Passpoint settings flag" is enabled the dialog has to show only the
    // description message.
    await init(true);

    const desc =
        removeDialog.shadowRoot!.querySelector<HTMLDivElement>('#description');
    assertTrue(!!desc);
    assertTrue(desc.hidden);

    const info =
        removeDialog.shadowRoot!.querySelector<HTMLSpanElement>('#information');
    assertTrue(!!info);

    // Confirm button shows "Go to subscription".
    const button = getButton('confirmButton');
    assertEquals(
        loadTimeData.getString(
            'networkSectionPasspointGoToSubscriptionButtonLabel'),
        button.textContent!.trim());
  });

  test('Cancel the dialog', async () => {
    await init(false);

    const button = getButton('cancelButton');
    button.click();
    await flush();

    const dialog =
        removeDialog.shadowRoot!.querySelector<CrDialogElement>('#dialog');
    assertTrue(!!dialog);
    assertFalse(dialog.open);
  });

  test('Confirm the dialog and get the event', async () => {
    await init(false);

    const button = getButton('confirmButton');
    const confirmPromise = eventToPromise('confirm', window);
    button.click();
    await confirmPromise;
  });
});