summaryrefslogtreecommitdiffstats
path: root/dom/payments/test/test_basiccard.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/payments/test/test_basiccard.html')
-rw-r--r--dom/payments/test/test_basiccard.html371
1 files changed, 371 insertions, 0 deletions
diff --git a/dom/payments/test/test_basiccard.html b/dom/payments/test/test_basiccard.html
new file mode 100644
index 0000000000..e8d30fbd06
--- /dev/null
+++ b/dom/payments/test/test_basiccard.html
@@ -0,0 +1,371 @@
+<!DOCTYPE HTML>
+<html>
+<!--
+https://bugzilla.mozilla.org/show_bug.cgi?id=1375345
+-->
+<head>
+ <meta charset="utf-8">
+ <title>Test for Bug 1375345</title>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <script type="application/javascript">
+
+ "use strict";
+ SimpleTest.waitForExplicitFinish();
+
+ var gUrl = SimpleTest.getTestFileURL('BasiccardChromeScript.js');
+ var gScript = SpecialPowers.loadChromeScript(gUrl);
+
+ function testFailHandler(message) {
+ ok(false, message);
+ }
+ function testPassHandler(message) {
+ ok(true, message);
+ }
+ gScript.addMessageListener("test-fail", testFailHandler);
+ gScript.addMessageListener("test-pass", testPassHandler);
+
+ async function requestChromeAction(action, params) {
+ await new Promise(resolve => {
+ gScript.addMessageListener(`${action}-complete`, function completeListener() {
+ gScript.removeMessageListener(`${action}-complete`, completeListener);
+ resolve();
+ });
+ gScript.sendAsyncMessage(action, params);
+ });
+ }
+
+ const errorNetworksMethods = [{
+ supportedMethods: "basic-card",
+ data: {
+ supportedNetworks: ["myNetwork"],
+ },
+ }];
+
+ const nullDataMethods = [{
+ supportedMethods: "basic-card",
+ }];
+
+ const emptyDataMethods = [{
+ supportedMethods: "basic-card",
+ data: {},
+ }];
+
+ const unconvertableDataMethods = [{
+ supportedMethods: "basic-card",
+ data: "unconvertable data",
+ }];
+
+ const defaultMethods = [{
+ supportedMethods: "basic-card",
+ data: {
+ supportedNetworks: ["unionpay", "visa", "mastercard", "amex", "discover",
+ "diners", "jcb", "mir",
+ ],
+ },
+ }];
+ const defaultDetails = {
+ id: "test payment",
+ total: {
+ label: "Total",
+ amount: {
+ currency: "USD",
+ value: "1.00"
+ }
+ },
+ shippingOptions: [
+ {
+ id: "NormalShipping",
+ label: "NormalShipping",
+ amount: {
+ currency: "USD",
+ value: "10.00"
+ },
+ selected: true,
+ },
+ {
+ id: "FastShipping",
+ label: "FastShipping",
+ amount: {
+ currency: "USD",
+ value: "30.00"
+ },
+ selected: false,
+ },
+ ],
+ };
+
+ const updateDetails = {
+ total: {
+ label: "Total",
+ amount: {
+ currency: "USD",
+ value: "1.00"
+ }
+ },
+ shippingOptions: [
+ {
+ id: "NormalShipping",
+ label: "NormalShipping",
+ amount: {
+ currency: "USD",
+ value: "10.00"
+ },
+ selected: true,
+ },
+ {
+ id: "FastShipping",
+ label: "FastShipping",
+ amount: {
+ currency: "USD",
+ value: "30.00"
+ },
+ selected: false,
+ },
+ ],
+ error: "",
+ };
+
+ const defaultOptions = {
+ requestPayerName: true,
+ requestPayerEmail: false,
+ requestPayerPhone: false,
+ requestShipping: true,
+ shippingType: "shipping"
+ };
+
+ async function testBasicCardRequestWithErrorNetworks() {
+ const testName = "testBasicCardRequestWithErrorNetworks";
+ try {
+ const request = new PaymentRequest(errorNetworksMethods, defaultDetails, defaultOptions);
+ ok(false, `${testName}: Expected 'TypeError', but got success construction.`);
+ } catch (e) {
+ is(e.name, "TypeError", `${testName}: Expected TypeError, but got ${e.name}`);
+ }
+ }
+
+ async function testBasicCardRequestWithUnconvertableData() {
+ const testName = "testBasicCardRequestWithUnconvertableData";
+ try {
+ const request = new PaymentRequest(unconvertableDataMethods, defaultDetails, defaultOptions);
+ ok(false, `${testName}: Expected 'TypeError', but got success construction.`);
+ } catch (e) {
+ is(e.name, "TypeError", `${testName}: Expected TypeError, but got ${e.name}`);
+ }
+ }
+
+ async function testBasicCardRequestWithNullData() {
+ const testName = "testBasicCardRequestWithNullData";
+ try {
+ const request = new PaymentRequest(nullDataMethods, defaultDetails, defaultOptions);
+ ok(request, `${testName}: PaymentRequest should be constructed with null data BasicCardRequest.`);
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ }
+
+ async function testBasicCardRequestWithEmptyData() {
+ const testName = "testBasicCardRequestWithEmptyData";
+ try {
+ const request = new PaymentRequest(emptyDataMethods, defaultDetails, defaultOptions);
+ ok(request, `${testName}: PaymentRequest should be constructed with empty data BasicCardRequest.`);
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ }
+
+ async function testCanMakePaymentWithBasicCardRequest() {
+ const testName = "testCanMakePaymentWithBasicCardRequest";
+ const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
+ try {
+ const result = await request.canMakePayment();
+ ok(result, `${testName}: canMakePayment() should be resolved with true.`);
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ }
+
+ async function testBasicCardSimpleResponse() {
+ const testName = "testBasicCardSimpleResponse";
+ await requestChromeAction("set-simple-ui-service", testName);
+ const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
+ const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
+ try {
+ const response = await request.show();
+ ok(response.details, `${testName}: basiccard response should exists.`);
+ ok(!response.details.cardholderName, `${testName}: response.details.cardholderName should not exist.`);
+ is(response.details.cardNumber, "4916855166538720",
+ `${testName}: response.details.cardNumber should be '4916855166538720'.`);
+ ok(!response.details.expiryMonth, `${testName}: response.details.expiryMonth should not exist.`);
+ ok(!response.details.expiryYear, `${testName}: response.details.expiryYear should be '2024'.`);
+ ok(!response.details.cardSecurityCode, `${testName}: response.details.cardSecurityCode should not exist.`);
+ ok(!response.details.billingAddress, `${testName}: response.details.billingAddress should not exist.`);
+ await response.complete("success");
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ await handler.destruct();
+ }
+
+ async function testBasicCardDetailedResponse() {
+ const testName = "testBasicCardDetailedResponse";
+ await requestChromeAction("set-detailed-ui-service", testName);
+ const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
+ const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
+ try {
+ const response = await request.show();
+ ok(response.details, `${testName}: basiccard response should exists.`);
+ ok(response.details.cardholderName, `${testName}: response.details.cardholderName should not exist.`);
+ is(response.details.cardNumber, "4916855166538720",
+ `${testName}: response.details.cardNumber should be '4916855166538720'.`);
+ ok(response.details.expiryMonth, `${testName}: response.details.expiryMonth should not exist.`);
+ ok(response.details.expiryYear, `${testName}: response.details.expiryYear should be '2024'.`);
+ ok(response.details.cardSecurityCode, `${testName}: response.details.cardSecurityCode should not exist.`);
+ ok(response.details.billingAddress, `${testName}: response.details.billingAddress should not exist.`);
+ const billingAddress = response.details.billingAddress;
+ is(billingAddress.country, "USA", `${testName}: country should be 'USA'.`);
+ is(billingAddress.addressLine.length, 1, `${testName}: addressLine.length should be 1.`);
+ is(billingAddress.addressLine[0], "Easton Ave", `${testName}: addressLine[0] should be 'Easton Ave'.`);
+ is(billingAddress.region, "CA", `${testName}: region should be 'CA'.`);
+ is(billingAddress.regionCode, "CA", `${testName}: regionCode should be 'CA'.`);
+ is(billingAddress.city, "San Bruno", `${testName}: city should be 'San Bruno'.`);
+ is(billingAddress.dependentLocality, "", `${testName}: dependentLocality should be empty.`);
+ is(billingAddress.postalCode, "94066", `${testName}: postalCode should be '94066'.`);
+ is(billingAddress.sortingCode, "123456", `${testName}: sortingCode should be '123456'.`);
+ is(billingAddress.organization, "", `${testName}: organization should be empty.`);
+ is(billingAddress.recipient, "Bill A. Pacheco", `${testName}: recipient should be 'Bill A. Pacheco'.`);
+ is(billingAddress.phone, "+14344413879", `${testName}: phone should be '+14344413879'.`);
+ await response.complete("success");
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ await handler.destruct();
+ }
+
+ async function testSpecialAddressResponse() {
+ const testName = "testSpecialAddressResponse";
+ await requestChromeAction("set-special-address-ui-service", testName);
+ const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
+ const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
+ try {
+ const response = await request.show();
+ ok(response.details, `${testName}: BasiccardResponse should exist.`);
+ ok(response.details.billingAddress,
+ `${testName}: BasiccardResponse.billingAddress should exist.`);
+ is(response.details.billingAddress.addressLine[0], ":$%@&*",
+ `${testName}: AddressLine should be ':$%@&*'`);
+ await response.complete("success");
+ } catch (e) {
+ ok(false, `${testName}: Unexpected error: ${e.name}`);
+ }
+ await handler.destruct();
+ }
+
+ async function testMethodChangeWithoutRequestBillingAddress() {
+ const testName = "testMethodChangeWithoutRequestBillingAddress";
+ await requestChromeAction("method-change-to-basic-card", testName);
+ const request = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
+ request.addEventListener("paymentmethodchange", async (event) => {
+ is(event.methodName, "basic-card", `${testName}: PaymentMethodChangeEvent.methodName should be 'basic-card'.`)
+ ok(event.methodDetails, `PaymentMethodChangeEvent.methodDetails should exist.`);
+ ok(!event.methodDetails.billingAddress, `PaymentMethodChangeEvent.methodDetails.billingAddres should not exist.`);
+ event.updateWith(updateDetails);
+ });
+ const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
+ try {
+ const response = await request.show();
+ await response.complete("success");
+ } catch (error) {
+ ok(false, `${testName}: Unexpected error: ${error.name}`);
+ }
+ await handler.destruct();
+ }
+
+ async function testMethodChangeWithRequestBillingAddress() {
+ const testName = "testMethodChangeWithRequestBillingAddress";
+ await requestChromeAction("method-change-to-basic-card", testName);
+ const options = {
+ requestPayerName: true,
+ requestBillingAddress: true,
+ requestShipping: true,
+ shippingType: "shipping",
+ };
+ const request = new PaymentRequest(defaultMethods, defaultDetails, options);
+ request.addEventListener("paymentmethodchange", async (event) => {
+ is(event.methodName, "basic-card", `${testName}: PaymentMethodChangeEvent.methodName should be 'basic-card'.`)
+ ok(event.methodDetails, `PaymentMethodChangeEvent.methodDetails should exist.`);
+ const billingAddress = event.methodDetails.billingAddress;
+ is(billingAddress.country, "USA", `${testName}: country should be 'USA'.`);
+ is(billingAddress.addressLine.length, 1, `${testName}: addressLine.length should be 1.`);
+ is(billingAddress.addressLine[0], "Easton Ave", `${testName}: addressLine[0] should be 'Easton Ave'.`);
+ is(billingAddress.region, "CA", `${testName}: region should be 'CA'.`);
+ is(billingAddress.regionCode, "CA", `${testName}: regionCode should be 'CA'.`);
+ is(billingAddress.city, "San Bruno", `${testName}: city should be 'San Bruno'.`);
+ is(billingAddress.dependentLocality, "", `${testName}: dependentLocality should be empty.`);
+ is(billingAddress.postalCode, "94066", `${testName}: postalCode should be '94066'.`);
+ is(billingAddress.sortingCode, "123456", `${testName}: sortingCode should be '123456'.`);
+ is(billingAddress.organization, "", `${testName}: organization should be empty.`);
+ is(billingAddress.recipient, "Bill A. Pacheco", `${testName}: recipient should be 'Bill A. Pacheco'.`);
+ is(billingAddress.phone, "+14344413879", `${testName}: phone should be '+14344413879'.`);
+ event.updateWith(updateDetails);
+ });
+ const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
+ try {
+ const response = await request.show();
+ await response.complete("success");
+ } catch (error) {
+ ok(false, `${testName}: Unexpected error: ${error.name}`);
+ }
+ await handler.destruct();
+ }
+
+
+ async function testBasicCardErrorResponse() {
+ const testName = "testBasicCardErrorResponse";
+ return requestChromeAction("error-response-test", testName);
+ }
+
+ async function teardown() {
+ gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
+ gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
+ gScript.removeMessageListener("test-fail", testFailHandler)
+ gScript.destroy();
+ SimpleTest.finish();
+ });
+ gScript.sendAsyncMessage("teardown");
+ }
+
+ async function runTests() {
+ try {
+ await testBasicCardRequestWithErrorNetworks();
+ await testBasicCardRequestWithUnconvertableData();
+ await testBasicCardRequestWithNullData();
+ await testBasicCardRequestWithEmptyData();
+ await testCanMakePaymentWithBasicCardRequest();
+ await testBasicCardSimpleResponse();
+ await testBasicCardDetailedResponse();
+ await testSpecialAddressResponse();
+ await testBasicCardErrorResponse();
+ await testMethodChangeWithoutRequestBillingAddress();
+ await testMethodChangeWithRequestBillingAddress()
+ await teardown();
+ } catch (e) {
+ ok(false, `test_basiccard.html: Unexpected error: ${e.name}`);
+ SimpleTest.finish();
+ };
+ }
+
+ window.addEventListener('load', function() {
+ SpecialPowers.pushPrefEnv({
+ 'set': [
+ ['dom.payments.request.enabled', true],
+ ]
+ }, runTests);
+ });
+
+ </script>
+</head>
+<body>
+<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1375345">Mozilla Bug 1375345</a>
+</body>
+</html>