summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/payment-request/payment-response/helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/payment-request/payment-response/helpers.js')
-rw-r--r--testing/web-platform/tests/payment-request/payment-response/helpers.js110
1 files changed, 110 insertions, 0 deletions
diff --git a/testing/web-platform/tests/payment-request/payment-response/helpers.js b/testing/web-platform/tests/payment-request/payment-response/helpers.js
new file mode 100644
index 0000000000..1242ecb743
--- /dev/null
+++ b/testing/web-platform/tests/payment-request/payment-response/helpers.js
@@ -0,0 +1,110 @@
+setup({ explicit_done: true, explicit_timeout: true });
+
+const applePay = Object.freeze({
+ supportedMethods: "https://apple.com/apple-pay",
+ data: {
+ version: 3,
+ merchantIdentifier: "merchant.com.example",
+ countryCode: "US",
+ merchantCapabilities: ["supports3DS"],
+ supportedNetworks: ["visa"],
+ }
+});
+
+const validMethod = Object.freeze({
+ supportedMethods: "basic-card",
+});
+
+const validMethods = Object.freeze([validMethod, applePay]);
+
+const validAmount = Object.freeze({
+ currency: "USD",
+ value: "1.00",
+});
+
+const validTotal = Object.freeze({
+ label: "Valid total",
+ amount: validAmount,
+});
+const validDetails = {
+ total: validTotal,
+};
+
+test(() => {
+ try {
+ new PaymentRequest(validMethods, validDetails);
+ } catch (err) {
+ done();
+ throw err;
+ }
+}, "Can construct a payment request (smoke test).");
+
+/**
+ * Pops up a payment sheet, allowing options to be
+ * passed in if particular values are needed.
+ *
+ * @param PaymentOptions options
+ */
+async function getPaymentResponse(options, id) {
+ const { response } = await getPaymentRequestResponse(options, id);
+ return response;
+}
+
+/**
+ * Creates a payment request and response pair.
+ * It also shows the payment sheet.
+ *
+ * @param {PaymentOptions?} options
+ * @param {String?} id
+ */
+async function getPaymentRequestResponse(options, id) {
+ const methods = [{ supportedMethods: "basic-card" }];
+ const details = {
+ id,
+ total: {
+ label: "Total due",
+ amount: { currency: "USD", value: "1.0" },
+ },
+ };
+ const request = new PaymentRequest(methods, details, options);
+ const response = await request.show();
+ return { request, response };
+}
+
+/**
+ * Runs a manual test for payment
+ *
+ * @param {HTMLButtonElement} button The HTML button.
+ * @param {PaymentOptions?} options.
+ * @param {Object} expected What property values are expected to pass the test.
+ * @param {String?} id And id for the request/response pair.
+ */
+async function runManualTest(button, options, expected = {}, id = undefined) {
+ button.disabled = true;
+ const { request, response } = await getPaymentRequestResponse(options, id);
+ await response.complete();
+ test(() => {
+ assert_idl_attribute(
+ response,
+ "requestId",
+ "Expected requestId to be an IDL attribute."
+ );
+ assert_equals(response.requestId, request.id, `Expected ids to match`);
+ for (const [attribute, value] of Object.entries(expected)) {
+ assert_idl_attribute(
+ response,
+ attribute,
+ `Expected ${attribute} to be an IDL attribute.`
+ );
+ assert_equals(
+ response[attribute],
+ value,
+ `Expected response ${attribute} attribute to be ${value}`
+ );
+ }
+ assert_idl_attribute(response, "details");
+ assert_equals(typeof response.details, "object", "Expected an object");
+ // Testing that this does not throw:
+ response.toJSON();
+ }, button.textContent.trim());
+}