blob: fbf97d855ab82d8ee661f3deed9f1198698362ad [file] [log] [blame]
<!doctype html>
<meta charset="utf8">
<link rel="help" href="">
updateWith() method - duplicate shippingOption ids
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
setup({ explicit_done: true, explicit_timeout: true });
const applePay = Object.freeze({
supportedMethods: "",
data: {
version: 3,
merchantIdentifier: "",
countryCode: "US",
merchantCapabilities: ["supports3DS"],
supportedNetworks: ["visa"],
const validMethod = Object.freeze({ supportedMethods: "basic-card" });
const validMethods = [validMethod, applePay];
const validAmount = Object.freeze({
currency: "USD",
value: "5.00",
const validShippingOption = Object.freeze({
id: "option1",
label: "Option 1",
amount: validAmount,
selected: true,
const validShippingOptions = Object.freeze([validShippingOption]);
const validDetails = Object.freeze({
total: {
label: "Total due",
amount: validAmount,
shippingOptions: validShippingOptions,
const validOptions = Object.freeze({
requestShipping: true,
test(() => {
try {
const request = new PaymentRequest(validMethods, validDetails);
} catch (err) {
throw err;
}, "Must construct a PaymentRequest (smoke test)");
function testFireEvents(button) {
button.disabled = true;
promise_test(async t => {
const request = new PaymentRequest(
request.addEventListener("shippingaddresschange", event => {
// Same option, so duplicate ids
const otherShippingOption = Object.assign({}, validShippingOption, {
id: "other",
const shippingOptions = [
const newDetails = Object.assign({}, validDetails, { shippingOptions });
const acceptPromise =;
await promise_rejects(
new TypeError(),
"Duplicate shippingOption ids must abort with TypeError"
}, button.textContent.trim());
<h2>updateWith() method - duplicate shippingOptions ids</h2>
Click on each button in sequence from top to bottom without refreshing the page.
Each button will bring up the Payment Request UI window.
When the payment sheet is shown, select a different shipping address.
If you have to manually abort the test from the payment sheet, then the
test has failed.
<button onclick="testFireEvents(this)">
If there are duplicate shippingOption ids, then abort payment request.
If you find a buggy test, please <a href="">file a bug</a>
and tag one of the <a href="">suggested reviewers</a>.