<!DOCTYPE html>
<!-- Copyright © 2017 Chromium authors and World Wide Web Consortium, (Massachusetts Institute of Technology, ERCIM, Keio University, Beihang). -->
<meta charset="utf-8">
<title>Test for PaymentRequestUpdateEvent's updateWith() method</title>
<link rel="help" href="https://w3c.github.io/browser-payment-api/#updatewith-method">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
const examplePay = Object.freeze({ supportedMethods: "https://example.com/pay" });
const defaultMethods = Object.freeze([examplePay]);
const defaultDetails = Object.freeze({
total: {
label: "Total",
amount: {
currency: "USD",
value: "1.00",
},
},
});
test(() => {
// Smoke test - checks target is set as expected
const request = new PaymentRequest(defaultMethods, defaultDetails);
const ev = new PaymentRequestUpdateEvent("test");
request.dispatchEvent(ev);
assert_equals(ev.target, request, "The request and the target at the same");
}, "Let target be the request which is dispatching the event.");
// Github issue: https://github.com/w3c/browser-payment-api/issues/546
test(() => {
const untrustedEvents = [
new PaymentRequestUpdateEvent("just a test"),
new PaymentRequestUpdateEvent("shippingaddresschange"),
new PaymentRequestUpdateEvent("shippingoptionchange"),
].forEach(ev => {
assert_throws_dom(
"InvalidStateError",
() => {
ev.updateWith(Promise.resolve());
},
`untrusted event of type "${ev.type}" must throw "InvalidStateError"`
);
});
}, `Calling .updateWith() with an undispatched untrusted event throws "InvalidStateError"`);
// Github issue: https://github.com/w3c/browser-payment-api/issues/546
test(() => {
const request = new PaymentRequest(defaultMethods, defaultDetails);
const untrustedEvents = [
new PaymentRequestUpdateEvent("just a test"),
new PaymentRequestUpdateEvent("shippingaddresschange"),
new PaymentRequestUpdateEvent("shippingoptionchange"),
].map(ev => {
request.dispatchEvent(ev); // set .target and dispatch flag
// unstrusted event.
assert_throws_dom(
"InvalidStateError",
() => {
ev.updateWith(Promise.resolve())
},
`untrusted event of type "${ev.type}" must throw "InvalidStateError"`
);
});
}, `Calling .updateWith() with a dispatched, untrusted event, throws "InvalidStateError"`);
</script>