<!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> "use strict"; setup({ allow_uncaught_exception: true }); const unsupportedMethods = [ { supportedMethods: "this-is-not-supported" }, { supportedMethods: "https://not.supported" }, ]; const defaultMethods = Object.freeze([ { supportedMethods: "basic-card", data: { supportedNetworks: [ 'visa' ], }, } ]); const defaultDetails = Object.freeze({ total: { label: "Total", amount: { currency: "USD", value: "1.00", }, }, }); promise_test(async t => { const request = new PaymentRequest(unsupportedMethods, defaultDetails); assert_false( await request.hasEnrolledInstrument(), "hasEnrolledInstrument() should resolve to false." ); }, `hasEnrolledInstrument() resolves to false for unsupported payment methods.`); promise_test(async t => { const request = new PaymentRequest(defaultMethods, defaultDetails); const [acceptPromise, hasEnrolledInstrumentPromise] = await test_driver.bless( "show payment request", () => { const acceptPromise = request.show(); // Sets state to "interactive" const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument(); return [acceptPromise, hasEnrolledInstrumentPromise]; }); await promise_rejects_dom(t, "InvalidStateError", hasEnrolledInstrumentPromise); await request.abort(); await promise_rejects_dom(t, "AbortError", acceptPromise); }, `If request.[[state]] is "interactive", then return a promise rejected with an "InvalidStateError" DOMException.`); promise_test(async t => { const request = new PaymentRequest(defaultMethods, defaultDetails); const [abortPromise, acceptPromise] = await test_driver.bless( "show payment request", () => { const acceptPromise = request.show(); // Sets state to "interactive" acceptPromise.catch(() => {}); // no-op, just to handle unhandled rejection in devtools. const abortPromise =request.abort(); // Sets state to "closed" return [abortPromise, acceptPromise]; }); await abortPromise; await promise_rejects_dom(t, "AbortError", acceptPromise); const hasEnrolledInstrumentPromise = request.hasEnrolledInstrument(); await promise_rejects_dom(t, "InvalidStateError", hasEnrolledInstrumentPromise); }, `If request.[[state]] is "closed", then return a promise rejected with an "InvalidStateError" 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>