payment-request-show-method.https.html (3566B)
1 <!DOCTYPE html> 2 <meta charset="utf-8" /> 3 <title>Test for PaymentRequest.show() method</title> 4 <link rel="help" href="https://w3c.github.io/payment-request/#show-method" /> 5 <script src="/resources/testharness.js"></script> 6 <script src="/resources/testharnessreport.js"></script> 7 <script src="/resources/testdriver.js"></script> 8 <script src="/resources/testdriver-vendor.js"></script> 9 <script> 10 "use strict"; 11 12 setup({ allow_uncaught_exception: true }); 13 14 const defaultMethods = Object.freeze([ 15 { supportedMethods: "basic-card" }, 16 { 17 supportedMethods: "https://apple.com/apple-pay", 18 data: { 19 version: 3, 20 merchantIdentifier: "merchant.com.example", 21 countryCode: "US", 22 merchantCapabilities: ["supports3DS"], 23 supportedNetworks: ["visa"], 24 }, 25 }, 26 ]); 27 28 const defaultDetails = Object.freeze({ 29 total: { 30 label: "Total", 31 amount: { 32 currency: "USD", 33 value: "1.00", 34 }, 35 }, 36 }); 37 38 promise_test(async (t) => { 39 const request = new PaymentRequest(defaultMethods, defaultDetails); 40 await promise_rejects_dom(t, "SecurityError", request.show()); 41 42 await test_driver.bless(); 43 // Sets state to "interactive", but consumes user interaction. 44 const acceptPromise = request.show(); 45 await promise_rejects_dom(t, "SecurityError", request.show()); 46 47 // With user activation, but already showing the sheet... 48 await test_driver.bless(); 49 await promise_rejects_dom(t, "InvalidStateError", request.show()); 50 51 await request.abort(); 52 await promise_rejects_dom(t, "AbortError", acceptPromise); 53 }, "Throws if the promise [[state]] is not 'created'."); 54 55 promise_test(async (t) => { 56 const request1 = new PaymentRequest(defaultMethods, defaultDetails); 57 await test_driver.bless(); 58 const acceptPromise1 = request1.show(); 59 60 // Payment request already showing, so... 61 const request2 = new PaymentRequest(defaultMethods, defaultDetails); 62 await test_driver.bless(); 63 await promise_rejects_dom(t, "AbortError", request2.show()); 64 65 await request1.abort(); 66 await promise_rejects_dom(t, "AbortError", acceptPromise1); 67 }, `If the user agent's "payment request is showing" boolean is true, then return a promise rejected with an "AbortError" DOMException.`); 68 69 promise_test(async (t) => { 70 const request = new PaymentRequest( 71 [{ supportedMethods: "this-is-not-supported" }], 72 defaultDetails 73 ); 74 await test_driver.bless(); 75 const acceptPromise = request.show(); 76 await promise_rejects_dom(t, "NotSupportedError", acceptPromise); 77 }, `If payment method consultation produces no supported method of payment, then return a promise rejected with a "NotSupportedError" DOMException.`); 78 79 promise_test(async (t) => { 80 const request = new PaymentRequest(defaultMethods, defaultDetails); 81 await test_driver.bless(); 82 const p1 = request.show(); 83 await test_driver.bless(); 84 const p2 = request.show(); 85 await test_driver.bless(); 86 const p3 = request.show(); 87 await request.abort(); 88 89 const promises = new Set([p1, p2, p3]); 90 assert_equals(promises.size, 3, "Must have three unique objects"); 91 92 await promise_rejects_dom(t, "AbortError", p1); 93 await promise_rejects_dom(t, "InvalidStateError", p2); 94 await promise_rejects_dom(t, "InvalidStateError", p3); 95 }, "Calling show() multiple times always returns a new promise."); 96 </script> 97 <small> 98 If you find a buggy test, please 99 <a href="https://github.com/web-platform-tests/wpt/issues">file a bug</a> and 100 tag one of the 101 <a 102 href="https://github.com/web-platform-tests/wpt/blob/master/payment-request/META.yml" 103 >suggested reviewers</a 104 >. 105 </small>