Bug 1435157 - mochitest for AddressErrors in WebPayment. r=baku

--HG--
extra : rebase_source : e1a782bab18fede5fe12e91ff26f1dd3037ccee2
This commit is contained in:
Eden Chuang 2018-05-18 14:40:34 +08:00
Родитель 029423a6e2
Коммит 130e426839
3 изменённых файлов: 283 добавлений и 1 удалений

Просмотреть файл

@ -0,0 +1,158 @@
/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { XPCOMUtils } = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
const paymentSrv = Cc["@mozilla.org/dom/payments/payment-request-service;1"].getService(Ci.nsIPaymentRequestService);
function emitTestFail(message) {
sendAsyncMessage("test-fail", message);
}
function emitTestPass(message) {
sendAsyncMessage("test-pass", message);
}
const shippingAddress = Cc["@mozilla.org/dom/payments/payment-address;1"].
createInstance(Ci.nsIPaymentAddress);
const addressLine = Cc["@mozilla.org/array;1"].createInstance(Ci.nsIMutableArray);
const address = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
address.data = "Easton Ave";
addressLine.appendElement(address);
shippingAddress.init("USA", // country
addressLine, // address line
"CA", // region
"San Bruno", // city
"Test locality", // dependent locality
"94066", // postal code
"123456", // sorting code
"en", // language code
"Testing Org", // organization
"Bill A. Pacheco", // recipient
"+1-434-441-3879"); // phone
function acceptShow(requestId) {
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
createInstance(Ci.nsIGeneralResponseData);
responseData.initData({ paymentToken: "6880281f-0df3-4b8e-916f-66575e2457c1",});
let showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
createInstance(Ci.nsIPaymentShowActionResponse);
showResponse.init(requestId,
Ci.nsIPaymentActionResponse.PAYMENT_ACCEPTED,
"testing-payment-method", // payment method
responseData, // payment method data
"Bill A. Pacheco", // payer name
"", // payer email
""); // payer phone
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
}
function rejectShow(requestId) {
const responseData = Cc["@mozilla.org/dom/payments/general-response-data;1"].
createInstance(Ci.nsIGeneralResponseData);
responseData.initData({});
const showResponse = Cc["@mozilla.org/dom/payments/payment-show-action-response;1"].
createInstance(Ci.nsIPaymentShowActionResponse);
showResponse.init(requestId,
Ci.nsIPaymentActionResponse.PAYMENT_REJECTED,
"", // payment method
responseData, // payment method data
"", // payer name
"", // payer email
""); // payer phone
paymentSrv.respondPayment(showResponse.QueryInterface(Ci.nsIPaymentActionResponse));
}
function updateShow(requestId) {
paymentSrv.changeShippingAddress(requestId, shippingAddress);
}
function showRequest(requestId) {
updateShow(requestId);
}
function abortRequest(requestId) {
let abortResponse = Cc["@mozilla.org/dom/payments/payment-abort-action-response;1"].
createInstance(Ci.nsIPaymentAbortActionResponse);
abortResponse.init(requestId, Ci.nsIPaymentActionResponse.ABORT_SUCCEEDED);
paymentSrv.respondPayment(abortResponse);
}
function completeRequest(requestId) {
let payRequest = paymentSrv.getPaymentRequestById(requestId);
let completeResponse = Cc["@mozilla.org/dom/payments/payment-complete-action-response;1"].
createInstance(Ci.nsIPaymentCompleteActionResponse);
completeResponse.init(requestId, Ci.nsIPaymentActionResponse.COMPLETE_SUCCEEDED);
paymentSrv.respondPayment(completeResponse.QueryInterface(Ci.nsIPaymentActionResponse));
}
function checkAddressErrors(errors) {
if (!errors) {
emitTestFail("Expect non-null shippingAddressErrors, but got null.");
}
if (errors.addressLine != "addressLine error") {
emitTestFail("Expect shippingAddressErrors.addressLine as 'addressLine error', but got" +
errors.addressLine);
}
if (errors.city != "city error") {
emitTestFail("Expect shippingAddressErrors.city as 'city error', but got" +
errors.city);
}
if (errors.dependentLocality != "dependentLocality error") {
emitTestFail("Expect shippingAddressErrors.dependentLocality as 'dependentLocality error', but got" +
errors.dependentLocality);
}
if (errors.languageCode != "languageCode error") {
emitTestFail("Expect shippingAddressErrors.languageCode as 'languageCode error', but got" +
errors.languageCode);
}
if (errors.organization != "organization error") {
emitTestFail("Expect shippingAddressErrors.organization as 'organization error', but got" +
errors.organization);
}
if (errors.phone != "phone error") {
emitTestFail("Expect shippingAddressErrors.phone as 'phone error', but got" +
errors.phone);
}
if (errors.postalCode != "postalCode error") {
emitTestFail("Expect shippingAddressErrors.postalCode as 'postalCode error', but got" +
errors.postalCode);
}
if (errors.recipient != "recipient error") {
emitTestFail("Expect shippingAddressErrors.recipient as 'recipient error', but got" +
errors.recipient);
}
if (errors.region != "region error") {
emitTestFail("Expect shippingAddressErrors.region as 'region error', but got" +
errors.region);
}
if (errors.sortingCode != "sortingCode error") {
emitTestFail("Expect shippingAddressErrors.sortingCode as 'sortingCode error', but got" +
errors.sortingCode);
}
}
function updateRequest(requestId) {
let request = paymentSrv.getPaymentRequestById(requestId);
const addressErrors = request.paymentDetails.shippingAddressErrors;
const payerErrors = request.paymentDetails.payerErrors;
checkAddressErrors(addressErrors);
rejectShow(requestId);
}
const DummyUIService = {
showPayment: showRequest,
abortPayment: abortRequest,
completePayment: completeRequest,
updatePayment: updateRequest,
QueryInterface: ChromeUtils.generateQI([Ci.nsIPaymentUIService]),
};
paymentSrv.setTestingUIService(DummyUIService.QueryInterface(Ci.nsIPaymentUIService));
addMessageListener("teardown", function() {
paymentSrv.cleanup();
paymentSrv.setTestingUIService(null);
sendAsyncMessage('teardown-complete');
});

Просмотреть файл

@ -11,9 +11,10 @@ support-files =
DefaultData.js
GeneralChromeScript.js
PMIValidationChromeScript.js
RequestShippingChromeScript.js
ShippingOptionsChromeScript.js
ShowPaymentChromeScript.js
RequestShippingChromeScript.js
UpdateErrorsChromeScript.js
[test_abortPayment.html]
run-if = nightly_build # Bug 1390018: Depends on the Nightly-only UI service
@ -29,3 +30,4 @@ run-if = nightly_build # Bug 1390737: Depends on the Nightly-only UI service
[test_requestShipping.html]
[test_shippingOptions.html]
[test_showPayment.html]
[test_update_errors.html]

Просмотреть файл

@ -0,0 +1,122 @@
<!DOCTYPE HTML>
<html>
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=1435157
-->
<head>
<meta charset="utf-8">
<title>Test for Bug 1435157</title>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
<script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
<script type="application/javascript" src="DefaultData.js"></script>
<script type="application/javascript">
"use strict";
SimpleTest.waitForExplicitFinish();
var gUrl = SimpleTest.getTestFileURL('UpdateErrorsChromeScript.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);
const addressErrors = {
addressLine: "addressLine error",
city: "city error",
country: "country error",
dependentLocality: "dependentLocality error",
languageCode: "languageCode error",
organization: "organization error",
phone: "phone error",
postalCode: "postalCode error",
recipient: "recipient error",
region: "region error",
regionCode: "regionCode error",
sortingCode: "sortingCode error",
};
const payErrors = {
email: "email error",
name: "name error",
phone: "phone error",
};
let updateDetails = {
total:{
label: "Total",
amount: {
currency: "USD",
value: "1.00",
},
},
erros: "shipping address error",
shippingAddressErrors: addressErrors,
payerErrors: payErrors,
}
// testing functions
function testUpdateErrors() {
return new Promise((resolve, reject) => {
const payRequest = new PaymentRequest(defaultMethods, defaultDetails, defaultOptions);
payRequest.addEventListener("shippingaddresschange", event => {
event.updateWith(updateDetails);
});
payRequest.addEventListener("shippingoptionchange", event => {
event.updateWith(updatedDetails);
});
const handler = SpecialPowers.getDOMWindowUtils(window).setHandlingUserInput(true);
payRequest.show().then(response => {
ok(false, "Expected AbortError, but got pass");
resolve();
}, error => {
is(error.name, "AbortError", "Expect AbortError, but got " + error.name);
resolve();
}).catch( e => {
ok(false, "Unexpected error: " + e.name);
resolve();
}).finally(handler.destruct);
});
}
// teardown function
function teardown() {
gScript.addMessageListener("teardown-complete", function teardownCompleteHandler() {
gScript.removeMessageListener("teardown-complete", teardownCompleteHandler);
gScript.removeMessageListener("test-fail", testFailHandler);
gScript.removeMessageListener("test-pass", testPassHandler);
gScript.destroy();
SimpleTest.finish();
});
gScript.sendAsyncMessage("teardown");
}
// test main body
function runTests() {
testUpdateErrors()
.then(teardown)
.catch( e => {
ok(false, "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=1435157">Mozilla Bug 1435157</a>
</body>
</html>