Source code

Revision control

Copy as Markdown

Other Tools

<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for validity of payment method identifiers when calling updateWith() method</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
"use strict";
setup({
explicit_done: true,
explicit_timeout: true,
allow_uncaught_exception: 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({
});
const validMethods = Object.freeze([
validMethod,
applePay,
{ supportedMethods: "basic-card" },
]);
const validAmount = Object.freeze({
currency: "USD",
value: "1.0",
});
const validTotal = Object.freeze({
label: "Default Total",
amount: validAmount,
});
const validShippingOption = Object.freeze({
id: "standard",
label: "Shipping option",
amount: validAmount,
selected: true,
});
const validDetails = Object.freeze({
total: validTotal,
shippingOptions: [validShippingOption],
});
const validModifier = Object.freeze({
supportedMethods: "basic-card",
total: validTotal,
});
function manualTest(button, { invalidMethod }) {
button.disabled = true;
promise_test(async t => {
const request = new PaymentRequest(validMethods, validDetails, {
requestShipping: true,
});
const listener = ev => {
const invalidModifier = Object.assign({}, validModifier, {
supportedMethods: invalidMethod,
});
const invalidDetails = Object.assign({}, validDetails, {
modifiers: [validModifier, invalidModifier],
});
ev.updateWith(invalidDetails);
};
// We test against a valid and an invalid modifier
request.addEventListener("shippingaddresschange", listener, { once: true });
const showPromise = request.show();
await promise_rejects_js(t, RangeError, showPromise);
}, button.textContent.trim());
}
</script>
<h2>updateWith() method: test validity of payment method identifiers.</h2>
<p>
When shown a payment sheet, select a different address.
</p>
<ol>
<li>
<button onclick="manualTest(this, {invalidMethod: 'https://:password@example.com'});">
Must throw if the URL has a password.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'https://username@example.com'});">
Must throw if the URL has a username.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'https://username:password@example.com/pay'});">
Must throw if the URL has a username and a password.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'http://username:password@example.com/pay'});">
Must throw if it's http, and has a username and password.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'http://foo.com:100000000/pay'});">
Must throw if the URL is invalid (port range).
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'basic-💳'});">
Must throw if the PMI contains characters that are out of range.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'not-https://wpt.fyi/payment-request'});">
Must throw if not https.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: '¡basic-*-card!'});">
Must throw if the standardized PMI contains characters outside the ascii range.
</button>
</li>
<li>
<button onclick="manualTest(this, {invalidMethod: 'Basic-Card'});">
Must throw if standardized PMI has uppercase characters.
</button>
</li>
<li>
<button onclick="done();">Done!</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>