blob: 232dd6b433565163c87fa2f335927281ddd8e34b [file] [log] [blame]
<!DOCTYPE html>
<meta charset="utf-8">
<title>Tests for providing `total` as part of `ApplePayModifier`.</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 immediateLabel = "Immediate Label";
const immediateAmount = "20.00";
const recurringLabel = "Recurring Label";
const recurringAmount = "30.00";
const recurringPaymentStartDate = new Date(0);
const recurringPaymentIntervalUnit = "year";
const recurringPaymentIntervalCount = 10;
const recurringPaymentEndDate = new Date(1);
const deferredLabel = "Deferred Label";
const deferredPaymentDate = new Date(2);
const deferredAmount = "40.00";
function validPaymentDetailsWithModifierThatHasTotal(total) {
let details = validPaymentDetails();
if (total)
details.modifiers = [ { supportedMethods: "https://apple.com/apple-pay", data: { total } } ];
return details;
}
function testPaymentItemData(description, {initialTotal, expectedTotal}) {
user_activation_test(async (test) => {
let request = new PaymentRequest([validPaymentMethod()], validPaymentDetailsWithModifierThatHasTotal(initialTotal));
request.addEventListener("merchantvalidation", (event) => {
event.complete({ });
});
request.addEventListener("shippingaddresschange", (event) => {
event.updateWith({ });
internals.mockPaymentCoordinator.acceptPayment();
});
let response = await request.show();
let actualTotal = internals.mockPaymentCoordinator.total;
assert_equals(actualTotal.label, expectedTotal.label, "check that the `label` matches for total");
assert_equals(actualTotal.amount, expectedTotal.amount, "check that the `amount` matches for total");
assert_equals(actualTotal.paymentTiming, expectedTotal.paymentTiming, "check that the `paymentTiming` matches for total");
assert_equals(actualTotal.recurringPaymentStartDate?.getTime(), expectedTotal.recurringPaymentStartDate?.getTime(), "check that the `recurringPaymentStartDate` matches for total");
assert_equals(actualTotal.recurringPaymentIntervalUnit, expectedTotal.recurringPaymentIntervalUnit, "check that the `recurringPaymentIntervalUnit` matches for total");
assert_equals(actualTotal.recurringPaymentIntervalCount, expectedTotal.recurringPaymentIntervalCount, "check that the `recurringPaymentIntervalCount` matches for total");
assert_equals(actualTotal.recurringPaymentEndDate?.getTime(), expectedTotal.recurringPaymentEndDate?.getTime(), "check that the `recurringPaymentEndDate` matches for total");
assert_equals(actualTotal.deferredPaymentDate?.getTime(), expectedTotal.deferredPaymentDate?.getTime(), "check that the `deferredPaymentDate` matches for total");
await response.complete("success");
}, description);
}
testPaymentItemData("The default value of `paymentTiming` should be `\"immediate\"`.", {
initialTotal: undefined,
expectedTotal: {label: "Total", amount: "10.00", paymentTiming: "immediate", recurringPaymentIntervalUnit: "month", recurringPaymentIntervalCount: 1},
});
testPaymentItemData("Should not have a default value for `recurringPaymentIntervalStartDate` and `recurringPaymentIntervalEndDate` when `paymentTiming` is `\"recurring\"`.", {
initialTotal: {label: recurringLabel, amount: recurringAmount, paymentTiming: "recurring"},
expectedTotal: {label: recurringLabel, amount: recurringAmount, paymentTiming: "recurring", recurringPaymentIntervalUnit: "month", recurringPaymentIntervalCount: 1},
});
testPaymentItemData("Should also propagate `recurringPaymentIntervalStartDate` and `recurringPaymentIntervalEndDate` if provided when `paymentTiming` is `\"recurring\"`.", {
initialTotal: {label: recurringLabel, amount: recurringAmount, paymentTiming: "recurring", recurringPaymentStartDate, recurringPaymentIntervalUnit, recurringPaymentIntervalCount, recurringPaymentEndDate},
expectedTotal: {label: recurringLabel, amount: recurringAmount, paymentTiming: "recurring", recurringPaymentStartDate, recurringPaymentIntervalUnit, recurringPaymentIntervalCount, recurringPaymentEndDate},
});
testPaymentItemData("Should not have a default value for `deferredPaymentDate` when `paymentTiming` is `\"deferred\"`.", {
initialTotal: {label: deferredLabel, amount: deferredAmount, paymentTiming: "deferred"},
expectedTotal: {label: deferredLabel, amount: deferredAmount, paymentTiming: "deferred", recurringPaymentIntervalUnit: "month", recurringPaymentIntervalCount: 1},
});
testPaymentItemData("Should also propagate `deferredPaymentDate` if provided when `paymentTiming` is `\"deferred\"`.", {
initialTotal: {label: deferredLabel, amount: deferredAmount, paymentTiming: "deferred", deferredPaymentDate},
expectedTotal: {label: deferredLabel, amount: deferredAmount, paymentTiming: "deferred", recurringPaymentIntervalUnit: "month", recurringPaymentIntervalCount: 1, deferredPaymentDate},
});
done();
</script>