<!doctype html>
<meta charset="utf8">
<link rel="help" href="https://w3c.github.io/payment-request/#user-aborts-the-payment-request-algorithm">
<title>
  User aborts the payment request algorithm.
</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
setup({ explicit_done: true, explicit_timeout: true });

const validAmount = Object.freeze({
  currency: "USD",
  value: "1.0",
});
const validTotal = Object.freeze({
  label: "Total due",
  amount: validAmount,
});
const validMethod = Object.freeze({
  supportedMethods: "basic-card",
});
const validMethods = Object.freeze([validMethod]);
const validDetails = Object.freeze({
  total: validTotal,
});

test(() => {
  try {
    new PaymentRequest(validMethods, validDetails);
  } catch (err) {
    done();
    throw err;
  }
}, "Can construct a payment request (smoke test).");

async function runAbortTest(button) {
  button.disabled = true;
  const { textContent: testName } = button;
  promise_test(async t => {
    const request = new PaymentRequest(validMethods, validDetails);
    // Await the user to abort
    await promise_rejects(t, "AbortError", request.show());
    // [[state]] is now closed
    await promise_rejects(t, "InvalidStateError", request.show());
  }, testName.trim());
}
</script>
<h2>
   User aborts the payment request algorithm.
</h2>
<p>
  Click on each button in sequence from top to bottom without refreshing the page.
  Each button will bring up the Payment Request UI window.
</p>
<p>
  When presented with the payment sheet, abort the payment request
  (e.g., by hitting the esc key or pressing a UA provided button).
</p>
<ol>
  <li>
    <button onclick="runAbortTest(this); done();">
      If the user aborts, the UA must run the user aborts the payment request algorithm.
    </button>
  </li>
</ol>
<small>
  If you find a buggy test, please <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a>
  and tag one of the <a href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml">suggested reviewers</a>.
</small>
