<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for the 'secure-payment-confirmation' payment method authentication - user rejects case</title>
<link rel="help" href="https://w3c.github.io/secure-payment-confirmation/sctn-authentication">
<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>
<script src="utils.sub.js"></script>
<script>
'use strict';

promise_test(async t => {
  const authenticator = await window.test_driver.add_virtual_authenticator(
      AUTHENTICATOR_OPTS);
  t.add_cleanup(() => {
    return window.test_driver.remove_virtual_authenticator(authenticator);
  });

  await window.test_driver.set_spc_transaction_mode("autoReject");
  t.add_cleanup(() => {
    return window.test_driver.set_spc_transaction_mode("none");
  });


  const credential = await createCredential();

  const challenge = 'server challenge';
  const payeeOrigin = 'https://merchant.com';
  const displayName = 'Troycard ***1234';
  const request = new PaymentRequest([{
    supportedMethods: 'secure-payment-confirmation',
    data: {
      credentialIds: [credential.rawId],
      challenge: Uint8Array.from(challenge, c => c.charCodeAt(0)),
      rpId: window.location.hostname,
      payeeOrigin,
      timeout: 60000,
      instrument: {
        displayName,
        icon: ICON_URL,
      },
    }
  }], PAYMENT_DETAILS);

  await test_driver.bless('user activation');
  return promise_rejects_dom(t, "NotAllowedError", request.show());
}, 'Rejected SPC authentication');
</script>
