<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests for PaymentRequest.hasEnrolledInstrument() method</title>
<link rel="help" href="https://w3c.github.io/payment-request/#hasenrolledinstrument-method">
<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>
const visaMethod = Object.freeze({
    supportedMethods: "basic-card",
    data: {
      supportedNetworks: ['visa']
    }
});
const mastercardMethod = Object.freeze({
    supportedMethods: "basic-card",
    data: {
      supportedNetworks: ['mastercard']
    }
});
const defaultDetails = Object.freeze({
  total: {
    label: "Total",
    amount: {
      currency: "USD",
      value: "1.00",
    },
  },
});

promise_test(async t => {
  // This test may never actually hit its assertion, but that's allowed.
  const request = new PaymentRequest([visaMethod], defaultDetails);
  for (let i = 0; i < 1000; i++) {
    try {
      await request.hasEnrolledInstrument();
    } catch (err) {
      assert_equals(
        err.name,
        "NotAllowedError",
        "If it throws, then it must be a NotAllowedError."
      );
      break;
    }
  }

  for (let i = 0; i < 1000; i++) {
    try {
      const request2 = new PaymentRequest([mastercardMethod], defaultDetails);
      await request2.hasEnrolledInstrument();
    } catch (err) {
      assert_equals(
        err.name,
        "NotAllowedError",
        "If it throws, then it must be a NotAllowedError."
      );
      break;
    }
  }
}, `Optionally, at the user agent's discretion, return a promise rejected with a "NotAllowedError" DOMException.`);

</script>

<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>
