blob: b00aed3fca31271671404cc6041c8498d17af961 [file] [log] [blame]
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for the merchantvalidation event.</title>
<script src="/js-test-resources/ui-helper.js"></script>
<script src="/resources/payment-request.js"></script>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<body>
<script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
supportedMethods: "https://apple.com/apple-pay",
data: {
version: 2,
merchantIdentifier: '',
merchantCapabilities: ['supports3DS'],
supportedNetworks: ['visa', 'masterCard'],
countryCode: 'US',
},
});
const validMethods = Object.freeze([applePay]);
const validAmount = Object.freeze({ currency: "USD", value: "5.00" });
const validTotal = Object.freeze({
label: "label",
amount: validAmount,
});
const validDetails = Object.freeze({
total: validTotal,
});
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete({ });
assert_throws("InvalidStateError", () => event.complete({ }));
request.abort();
};
await promise_rejects(t, "AbortError", request.show());
}, "Calling complete() twice throws an InvalidStateError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
request.abort();
assert_throws("InvalidStateError", () => event.complete({ }));
};
await promise_rejects(t, "AbortError", request.show());
}, "Calling complete() after abort() throws an InvalidStateError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise((resolve, reject) => reject()));
};
await promise_rejects(t, "AbortError", request.show());
}, "Calling complete() with a promise that is rejected aborts the request.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise(resolve => resolve(7)));
};
await promise_rejects(t, new TypeError(), request.show());
}, "Calling complete() with a number aborts the request with a TypeError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise(resolve => resolve(undefined)));
};
await promise_rejects(t, new TypeError(), request.show());
}, "Calling complete() with undefined aborts the request with a TypeError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise(resolve => resolve(null)));
};
await promise_rejects(t, new TypeError(), request.show());
}, "Calling complete() with null aborts the request with a TypeError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise(resolve => resolve("")));
};
await promise_rejects(t, new TypeError(), request.show());
}, "Calling complete() with a string aborts the request with a TypeError.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete(new Promise(resolve => resolve({ })));
};
request.onshippingaddresschange = event => {
event.updateWith(validDetails);
internals.mockPaymentCoordinator.acceptPayment();
};
const response = await request.show();
response.complete("success");
}, "Calling complete() with a promise resolving to a valid merchant session does not abort the request.");
user_activation_test(async t => {
const request = new PaymentRequest(
validMethods,
validDetails
);
request.onmerchantvalidation = event => {
assert_equals(event.validationURL, "https://webkit.org/");
event.complete({ });
};
request.onshippingaddresschange = event => {
event.updateWith(validDetails);
internals.mockPaymentCoordinator.acceptPayment();
};
const response = await request.show();
response.complete("success");
}, "Calling complete() with a valid merchant session does not abort the request.");
done();
</script>