| <!DOCTYPE html> | |
| <meta charset="utf-8"> | |
| <title>Test for PaymentDetailsBase's shippingOptions member</title> | |
| <link rel="help" href="https://w3c.github.io/payment-request/#dom-paymentdetailsbase-shippingoptions"> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| setup({ explicit_done: true, explicit_timeout: true }); | |
| const validMethods = Object.freeze([ | |
| { supportedMethods: "basic-card" }, | |
| { | |
| supportedMethods: "https://apple.com/apple-pay", | |
| data: { | |
| version: 3, | |
| merchantIdentifier: "merchant.com.example", | |
| countryCode: "US", | |
| merchantCapabilities: ["supports3DS"], | |
| supportedNetworks: ["visa"], | |
| }, | |
| }, | |
| ]); | |
| const validAmount = Object.freeze({ currency: "USD", value: "5.00" }); | |
| const validTotal = Object.freeze({ | |
| label: "label", | |
| amount: validAmount, | |
| }); | |
| const validDetails = Object.freeze({ total: validTotal }); | |
| const validShippingOption1 = Object.freeze({ | |
| id: "fail-if-selected-1", | |
| label: "FAIL if selected 1", | |
| amount: validAmount, | |
| selected: true, | |
| }); | |
| const validShippingOption2 = Object.freeze({ | |
| id: "fail-if-selected-2", | |
| label: "FAIL if selected 2", | |
| amount: validAmount, | |
| selected: false, | |
| }); | |
| const validShippingOption3 = Object.freeze({ | |
| id: "pass-if-selected", | |
| label: "THIS MUST BE AUTOMATICALLY SELECTED", | |
| amount: validAmount, | |
| selected: true, | |
| }); | |
| function testShippingOptionChanged(button) { | |
| button.disabled = true; | |
| promise_test(async t => { | |
| const detailsWithShippingOptions = { | |
| ...validDetails, | |
| shippingOptions: [ | |
| validShippingOption1, | |
| validShippingOption2, | |
| validShippingOption3, | |
| ], | |
| }; | |
| const request = new PaymentRequest( | |
| validMethods, | |
| detailsWithShippingOptions, | |
| { requestShipping: true } | |
| ); | |
| assert_equals( | |
| request.shippingOption, | |
| "pass-if-selected", | |
| "Must be 'pass-if-selected', as the selected member is true" | |
| ); | |
| request.onshippingoptionchange = () => { | |
| assert_unreached("onshippingoptionchange fired unexpectedly"); | |
| }; | |
| const response = await request.show(); | |
| assert_equals(response.shippingOption, "pass-if-selected"); | |
| response.complete(); | |
| }, button.textContent.trim()); | |
| done(); | |
| } | |
| </script> | |
| <h2>PaymentRequest shippingOption attribute</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 the payment sheet is presented, hit pay. | |
| </p> | |
| <ol> | |
| <li> | |
| <button onclick="testShippingOptionChanged(this)"> | |
| When default shipping option is pre-selected, must not fire onshippingoptionchange | |
| and PaymentResponse must reflect the pre-selected option. | |
| </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> |