summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/payment-request/algorithms-manual.https.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/payment-request/algorithms-manual.https.html')
-rw-r--r--testing/web-platform/tests/payment-request/algorithms-manual.https.html176
1 files changed, 176 insertions, 0 deletions
diff --git a/testing/web-platform/tests/payment-request/algorithms-manual.https.html b/testing/web-platform/tests/payment-request/algorithms-manual.https.html
new file mode 100644
index 0000000000..b90c312aba
--- /dev/null
+++ b/testing/web-platform/tests/payment-request/algorithms-manual.https.html
@@ -0,0 +1,176 @@
+<!doctype html>
+<meta charset="utf8">
+<link rel="help" href="https://w3c.github.io/payment-request/#algorithms">
+<title>
+ Payment Request algorithms
+</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 shippingOptions = {
+ shippingOptions: [
+ {
+ id: "fail",
+ label: "Option 1",
+ amount: {
+ currency: "USD",
+ value: "5.00",
+ },
+ selected: true,
+ },
+ {
+ id: "pass",
+ label: "Option 2",
+ amount: {
+ currency: "USD",
+ value: "5.00",
+ },
+ },
+ ],
+};
+
+const detailsNoShippingOptions = {
+ total: {
+ label: "Total due",
+ amount: {
+ currency: "USD",
+ value: "1.0",
+ },
+ },
+};
+
+const detailsWithShippingOptions = Object.assign(
+ {
+ total: {
+ label: "Total due",
+ amount: {
+ currency: "USD",
+ value: "1.0",
+ },
+ },
+ },
+ shippingOptions
+);
+
+const options = {
+ requestShipping: true,
+};
+
+function testFireEvent(button, details, eventName, expectRequestProps) {
+ button.disabled = true;
+ promise_test(async t => {
+ new PaymentRequest(methods, detailsNoShippingOptions, options);
+ const request = new PaymentRequest(methods, details, options);
+ const handlerPromise = new Promise(resolve => {
+ request[`on${eventName}`] = event => {
+ // "prevent immediate propagation" flag is set.
+ // This listener below won't fire!
+ event.updateWith(details);
+ resolve(event);
+ };
+ });
+ // This listener should never fire because the
+ // the event handler caused "prevent immediate propagation" to be set.
+ request.addEventListener(
+ eventName,
+ t.unreached_func("Second event listener should never fire")
+ );
+ const response = await request.show();
+ const event = await handlerPromise;
+ assert_true(
+ event instanceof window.PaymentRequestUpdateEvent,
+ "Expected instances of PaymentRequestUpdateEvent"
+ );
+ await response.complete("success");
+ }, button.textContent.trim());
+}
+
+async function runAbortTest(button) {
+ button.disabled = true;
+ const { textContent: testName } = button;
+ promise_test(async t => {
+ const request = new PaymentRequest(methods, detailsNoShippingOptions);
+ // Await the user to abort
+ await promise_rejects_dom(t, "AbortError", request.show());
+ // [[state]] is now closed
+ await promise_rejects_dom(t, "InvalidStateError", request.show());
+ }, testName.trim());
+}
+</script>
+<h2>
+ Tests for "algorithms" section
+</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>
+<section>
+ <h3 id="abort-algo">
+ User aborts the payment request algorithm
+ </h3>
+ <link rel="help" href="https://w3c.github.io/payment-request/#user-aborts-the-payment-request-algorithm">
+ <p>
+ When presented with the payment sheet, abort the payment request (e.g., by hitting the esc key or pressing a UA provided button).
+ </p>
+ <ol>
+ <li>
+ <button onclick="runAbortTest(this);">
+ If the user aborts, the UA must run the user aborts the payment request algorithm.
+ </button>
+ </li>
+ </ol>
+</section>
+
+<section>
+ <h3 id="shipping-address-changed-algo">Shipping address changed algorithm</h3>
+ <link rel="help" href="https://www.w3.org/TR/payment-request/#shipping-address-changed-algorithm">
+ <p>
+ When prompted, please change or enter a new shipping address and then select Pay.
+ </p>
+ <ol>
+ <li>
+ <button onclick="testFireEvent(this, detailsWithShippingOptions, 'shippingaddresschange', {});">
+ The shipping address changed algorithm runs when the user provides a new shipping address.
+ </button>
+ </li>
+ </ol>
+</section>
+
+<section>
+ <h3 id="shipping-option-changed-algo">Shipping option changed algorithm</h3>
+ <link rel="help" href="https://w3c.github.io/payment-request/#shipping-option-changed-algorithm">
+ <p>
+ Finally, when prompted, please select "shipping option 2" and then select Pay.
+ </p>
+ <ol>
+ <li>
+ <button onclick="testFireEvent(this, detailsWithShippingOptions, 'shippingoptionchange', {}, 'pass'); done();">
+ The shipping option changed algorithm runs when the user chooses a new shipping option.
+ </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>