| <!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" }, |
| ]); |
| 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> |