blob: a523839674bca73e28bd1e23388218f1f902f6f4 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="/js-test-resources/ui-helper.js"></script>
<script src="/resources/js-test-pre.js"></script>
<script src="/resources/payment-request.js"></script>
</head>
<body>
<script>
description("Test specifying errors in response to the shippingaddresschange event.");
window.jsTestIsAsync = true;
async function runTests()
{
debug("Testing PaymentDetailsUpdate with no errors.");
var details = validPaymentDetails();
await updateDetailsOnShippingAddressChange(details, { requestShipping: true }, details);
shouldBe("internals.mockPaymentCoordinator.errors.length", "0");
debug("");
debug("Testing PaymentDetailsUpdate with an error and shipping options.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.error = "single error";
detailsUpdate.shippingOptions = [{
id: "option1",
label: "option 1",
amount: {
currency: "USD",
value: "1.00",
},
}];
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestShipping: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "0");
shouldBe("internals.mockPaymentCoordinator.shippingMethods.length", "1");
shouldBe("internals.mockPaymentCoordinator.shippingMethods[0].label", "'option 1'");
shouldBe("internals.mockPaymentCoordinator.shippingMethods[0].detail", "''");
shouldBe("internals.mockPaymentCoordinator.shippingMethods[0].amount", "'1.00'");
shouldBe("internals.mockPaymentCoordinator.shippingMethods[0].identifier", "'option1'");
debug("");
debug("Testing PaymentDetailsUpdate with an empty error.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.error = "";
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestShipping: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "1");
shouldBe("internals.mockPaymentCoordinator.errors[0].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[0].message", "''");
shouldBe("internals.mockPaymentCoordinator.errors[0].contactField", "undefined");
debug("");
debug("Testing PaymentDetailsUpdate with an error.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.error = "single error";
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestShipping: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "1");
shouldBe("internals.mockPaymentCoordinator.errors[0].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[0].message", "'single error'");
shouldBe("internals.mockPaymentCoordinator.errors[0].contactField", "undefined");
debug("");
debug("Testing PaymentDetailsUpdate with an error and undefined shipping address errors.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.error = "single error";
detailsUpdate.shippingAddressErrors = {
};
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestShipping: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "1");
shouldBe("internals.mockPaymentCoordinator.errors[0].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[0].message", "'single error'");
shouldBe("internals.mockPaymentCoordinator.errors[0].contactField", "undefined");
debug("");
debug("Testing PaymentDetailsUpdate with shipping address errors.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.shippingAddressErrors = {
addressLine: "error",
city: "error",
country: "error",
dependentLocality: "error",
phone: "error",
postalCode: "error",
recipient: "error",
region: "error",
};
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestShipping: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "8");
shouldBe("internals.mockPaymentCoordinator.errors[0].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[0].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[0].contactField", "'addressLines'");
shouldBe("internals.mockPaymentCoordinator.errors[1].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[1].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[1].contactField", "'locality'");
shouldBe("internals.mockPaymentCoordinator.errors[2].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[2].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[2].contactField", "'country'");
shouldBe("internals.mockPaymentCoordinator.errors[3].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[3].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[3].contactField", "'subLocality'");
shouldBe("internals.mockPaymentCoordinator.errors[4].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[4].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[4].contactField", "'phoneNumber'");
shouldBe("internals.mockPaymentCoordinator.errors[5].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[5].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[5].contactField", "'postalCode'");
shouldBe("internals.mockPaymentCoordinator.errors[6].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[6].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[6].contactField", "'name'");
shouldBe("internals.mockPaymentCoordinator.errors[7].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[7].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[7].contactField", "'administrativeArea'");
debug("");
debug("Testing PaymentDetailsUpdate with unrequested payer errors.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.payerErrors = {
name: "error",
email: "error",
phone: "error",
};
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "0");
debug("");
debug("Testing PaymentDetailsUpdate with payer errors.");
var detailsUpdate = validPaymentDetails();
detailsUpdate.payerErrors = {
name: "error",
email: "error",
phone: "error",
};
await updateDetailsOnShippingAddressChange(validPaymentDetails(), { requestPayerName: true, requestPayerPhone: true, requestPayerEmail: true }, detailsUpdate);
shouldBe("internals.mockPaymentCoordinator.errors.length", "3");
shouldBe("internals.mockPaymentCoordinator.errors[0].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[0].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[0].contactField", "'name'");
shouldBe("internals.mockPaymentCoordinator.errors[1].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[1].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[1].contactField", "'emailAddress'");
shouldBe("internals.mockPaymentCoordinator.errors[2].code", "'shippingContactInvalid'");
shouldBe("internals.mockPaymentCoordinator.errors[2].message", "'error'");
shouldBe("internals.mockPaymentCoordinator.errors[2].contactField", "'phoneNumber'");
debug("");
await new Promise((resolve, reject) => {
debug("Testing specifying an invalid shipping option in response to shippingaddresschange.");
paymentRequest = new PaymentRequest([validPaymentMethod()], validPaymentDetails(), { requestShipping: true });
paymentRequest.onshippingaddresschange = (event) => {
var detailsUpdate = validPaymentDetails();
detailsUpdate.shippingOptions = [{
id: "option1",
label: "option 1",
amount: {
currency: "EUR",
value: "1.00",
},
}];
event.updateWith(detailsUpdate);
};
paymentRequest.onmerchantvalidation = event => event.complete({});
activateThen(async () => {
await shouldReject("paymentRequest.show()");
resolve();
});
});
debug("");
finishJSTest();
}
runTests();
</script>
<script src="/resources/js-test-post.js"></script>
</body>
</html>