| <!doctype html> | |
| <meta charset="utf8"> | |
| <link rel="help" href="https://w3c.github.io/payment-request/#updatewith-method"> | |
| <title> | |
| Incremental updates via updateWith() | |
| </title> | |
| <script src="/resources/testharness.js"></script> | |
| <script src="/resources/testharnessreport.js"></script> | |
| <script> | |
| setup({ | |
| explicit_done: true, | |
| explicit_timeout: true, | |
| }); | |
| const methods = [{ | |
| supportedMethods: "basic-card", | |
| }, { | |
| supportedMethods: "https://apple.com/apple-pay", | |
| data: { | |
| version: 3, | |
| merchantIdentifier: "merchant.com.example", | |
| countryCode: "US", | |
| merchantCapabilities: ["supports3DS"], | |
| supportedNetworks: ["visa"], | |
| } | |
| }]; | |
| const options = { | |
| requestShipping: true, | |
| }; | |
| const initialDetails = { | |
| total: { | |
| label: "Initial total", | |
| amount: { | |
| currency: "USD", | |
| value: "1.0", | |
| }, | |
| }, | |
| shippingOptions: [ | |
| { | |
| id: "neutral", | |
| label: "NEUTRAL SHIPPING OPTION", | |
| selected: true, | |
| amount: { | |
| currency: "USD", | |
| value: "0.00", | |
| }, | |
| }, | |
| ], | |
| }; | |
| function testFireEvent(button, updateDetails) { | |
| button.disabled = true; | |
| const request = new PaymentRequest(methods, initialDetails, options); | |
| const handlerPromise = new Promise(resolve => { | |
| request.onshippingaddresschange = event => { | |
| event.updateWith(updateDetails); | |
| resolve(event); | |
| }; | |
| }); | |
| promise_test(async t => { | |
| const response = await request.show(); | |
| const event = await handlerPromise; | |
| await response.complete("success"); | |
| }, button.textContent.trim()); | |
| } | |
| </script> | |
| <h2> | |
| Incremental updates | |
| </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> | |
| Unless stated otherwise, each test will update some part of the displayed payment sheet in | |
| a manner indicated below. When prompted, please change or enter a new | |
| shipping address, look for the tested change, and complete the payment. | |
| </p> | |
| <p> | |
| If the payment request locks up or otherwise aborts, the test has failed. | |
| </p> | |
| <ol> | |
| <li> | |
| <button onclick="testFireEvent(this, {});"> | |
| Passing an empty dictionary does not cause the sheet to change. | |
| No values in the sheet must change. | |
| </button> | |
| </li> | |
| </ol> | |
| <section> | |
| <h3>Incremental updates via PaymentDetailsUpdate.total</h3> | |
| <ol> | |
| <li> | |
| <button onclick=" | |
| const total = { | |
| label: 'PASS', | |
| amount: { | |
| currency: 'XXX', | |
| value: '20', | |
| }, | |
| }; | |
| const updatedDetails = { total }; | |
| testFireEvent(this, updatedDetails);"> | |
| After changing shipping address, the total becomes XXX20, with the label "PASS". | |
| </button> | |
| </li> | |
| </ol> | |
| </section> | |
| <section> | |
| <h3>Incremental updates via PaymentDetailsBase.displayItems</h3> | |
| <ol> | |
| <li> | |
| <button onclick=" | |
| const item = { | |
| label: 'PASS', | |
| amount: { currency: 'ABC', value: '55.00' }, | |
| }; | |
| const updatedDetails = { | |
| displayItems: [ item ] | |
| }; | |
| testFireEvent(this, updatedDetails);"> | |
| After changing shipping address, a new display item is shown | |
| with a with label PASS, and value of ABC55.00. | |
| </button> | |
| </li> | |
| </ol> | |
| </section> | |
| <section> | |
| <h3>Incremental updates via PaymentDetailsBase.shippingOptions</h3> | |
| <ol> | |
| <li> | |
| <button onclick=" | |
| const shippingOptions = [ | |
| { | |
| id: 'pass', | |
| label: 'PASS', | |
| amount: { currency: 'USD', value: '1.00' }, | |
| selected: true, | |
| }, | |
| { | |
| id: 'fail', | |
| label: 'FAIL IF THIS IS SELECTED', | |
| amount: { currency: 'USD', value: '25.00' } | |
| }, | |
| ]; | |
| const updatedDetails = { | |
| shippingOptions | |
| }; | |
| testFireEvent(this, updatedDetails);"> | |
| After changing shipping address, two new shipping options appear. | |
| The shipping option labelled "PASS" with a value of USD1.0 is selected. | |
| </button> | |
| </li> | |
| </ol> | |
| </section> | |
| <section> | |
| <h3>Incremental updates via PaymentDetailsBase.modifiers</h3> | |
| <ol> | |
| <li> | |
| <button onclick=" | |
| const additionalItem = { | |
| label: 'PASS-DISPLAY-ITEM', | |
| amount: { currency: 'USD', value: '3.00' }, | |
| }; | |
| const modifiers = [{ | |
| additionalDisplayItems: [ additionalItem ], | |
| supportedMethods: 'basic-card', | |
| total: { | |
| label: 'PASS-TOTAL', | |
| amount: { currency: 'USD', value: '123.00' }, | |
| }, | |
| }]; | |
| const updatedDetails = { modifiers }; | |
| testFireEvent(this, updatedDetails);"> | |
| After changing shipping address, a new display item is shown | |
| with a with label PASS-DISPLAY-ITEM, and value of ABC55.00 and the total is | |
| labelled PASS-TOTAL with a value of USD123.0 | |
| </button> | |
| </li> | |
| <li> | |
| <button onclick="done()">DONE - see results</button> | |
| </li> | |
| </ol> | |
| </section> | |
| <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> |