<!DOCTYPE html>
<title>Federated Credential Management API domain hint tests.</title>
<link rel="help" href="https://fedidcg.github.io/FedCM">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<body>

<script type="module">
import {
  fedcm_test,
  request_options_with_domain_hint,
  select_manifest,
  mark_signed_in,
  fedcm_get_dialog_type_promise,
  fedcm_get_and_select_first_account
} from './support/fedcm-helper.sub.js';

fedcm_test(async t => {
  await mark_signed_in();

  let options = request_options_with_domain_hint('manifest.py',
    'nomatch');
  const cred = navigator.credentials.get(options);
  // We expect a mismatch dialog.
  const type = await fedcm_get_dialog_type_promise(t);
  assert_equals(type, 'ConfirmIdpLogin');
  window.test_driver.cancel_fedcm_dialog();

  return promise_rejects_dom(t, "NetworkError", cred);
}, "No domain hint matches an account.");

fedcm_test(async t => {
  const options = request_options_with_domain_hint('manifest.py',
    'idp.example');
  const cred = await fedcm_get_and_select_first_account(t, options);
  assert_equals(cred.token, 'token');
}, "Domain hint matches an account.");

fedcm_test(async t => {
  let options = request_options_with_domain_hint(
    'manifest_with_two_accounts.json', 'example');
  await select_manifest(t, options);

  const cred = await fedcm_get_and_select_first_account(t, options);
  assert_equals(cred.token, 'account_id=john_doe');
}, "Domain hint matches an account from two accounts.");

fedcm_test(async t => {
  let options = request_options_with_domain_hint(
    'manifest_with_two_accounts.json', 'any');
  await select_manifest(t, options);

  const cred = await fedcm_get_and_select_first_account(t, options);
  assert_equals(cred.token, 'account_id=john_doe');
}, "Domain hint 'any' matches an account with any domain hint.");
  </script>
