blob: 06852bf8c47cb9e720190b9b0e2f81d9e7ddd335 [file] [log] [blame]
<!DOCTYPE html>
<!-- Copyright © 2017 Mozilla and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<title>Test for validity of payment method identifiers when calling updateWith() method</title>
<link rel="help" href="https://www.w3.org/TR/payment-request/#updatewith()-method">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
"use strict";
setup({ explicit_done: true, explicit_timeout: true });
const validMethod = Object.freeze({
supportedMethods: "https://:@wpt.fyi:443/payment-request",
});
const validMethods = Object.freeze([validMethod]);
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,
});
test(() => {
try {
new PaymentRequest(validMethods, validDetails);
} catch (err) {
done();
throw err;
}
}, "smoke test");
function manualTest(button, { invalidMethod }) {
button.disabled = true;
promise_test(async t => {
const request = new PaymentRequest(
[{ supportedMethods: "basic-card" }],
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(t, new 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'}); done();">
Must throw if standardized PMI has uppercase characters.
</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>