зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1435157 - mochitest for AddressErrors in WebPayment. r=baku
--HG-- extra : rebase_source : e1a782bab18fede5fe12e91ff26f1dd3037ccee2
This commit is contained in:
Родитель
029423a6e2
Коммит
130e426839
|
@ -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>
|
Загрузка…
Ссылка в новой задаче