Bug 1458376 - Convert PaymentRequest b-c tests to always test in the dialog. r=jaws
This makes test check what we ship and makes them more consistent. It also avoids issues related to nested <xul:browser>.
MozReview-Commit-ID: I7v0mVjAnQM
--- a/browser/components/payments/test/PaymentTestUtils.jsm
+++ b/browser/components/payments/test/PaymentTestUtils.jsm
@@ -57,29 +57,16 @@ var PaymentTestUtils = {
content.rq.addEventListener(eventName, event => {
event.updateWith(details);
resolve();
}, {once: true});
});
},
/**
- * Create a new payment request and cache it as `rq`.
- *
- * @param {Object} args
- * @param {PaymentMethodData[]} methodData
- * @param {PaymentDetailsInit} details
- * @param {PaymentOptions} options
- */
- createRequest: ({methodData, details, options}) => {
- const rq = new content.PaymentRequest(methodData, details, options);
- content.rq = rq; // assign it so we can retrieve it later
- },
-
- /**
* Create a new payment request cached as `rq` and then show it.
*
* @param {Object} args
* @param {PaymentMethodData[]} methodData
* @param {PaymentDetailsInit} details
* @param {PaymentOptions} options
*/
createAndShowRequest: ({methodData, details, options}) => {
--- a/browser/components/payments/test/browser/browser_card_edit.js
+++ b/browser/components/payments/test/browser/browser_card_edit.js
@@ -2,17 +2,17 @@
"use strict";
add_task(async function test_add_link() {
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, async function check() {
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, async function check() {
let {
PaymentTestUtils: PTU,
} = ChromeUtils.import("resource://testing-common/PaymentTestUtils.jsm", {});
let addLink = content.document.querySelector("payment-method-picker a");
is(addLink.textContent, "Add", "Add link text");
addLink.click();
@@ -64,17 +64,17 @@ add_task(async function test_add_link()
}, args);
});
add_task(async function test_edit_link() {
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, async function check() {
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, async function check() {
let {
PaymentTestUtils: PTU,
} = ChromeUtils.import("resource://testing-common/PaymentTestUtils.jsm", {});
let editLink = content.document.querySelector("payment-method-picker a:nth-of-type(2)");
is(editLink.textContent, "Edit", "Edit link text");
editLink.click();
@@ -124,17 +124,17 @@ add_task(async function test_edit_link()
}, args);
});
add_task(async function test_private_persist_defaults() {
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, async function check() {
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, async function check() {
let {
PaymentTestUtils: PTU,
} = ChromeUtils.import("resource://testing-common/PaymentTestUtils.jsm", {});
let addLink = content.document.querySelector("payment-method-picker a");
is(addLink.textContent, "Add", "Add link text");
addLink.click();
@@ -146,17 +146,18 @@ add_task(async function test_private_per
ok(!state.isPrivate,
"isPrivate flag is not set when paymentrequest is shown from a non-private session");
let persistInput = content.document.querySelector("basic-card-form labelled-checkbox");
ok(Cu.waiveXrays(persistInput).checked,
"checkbox is checked by default from a non-private session");
}, args);
- await spawnInDialogForPrivateMerchantTask(PTU.ContentTasks.createRequest, async function check() {
+ let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, async function check() {
let {
PaymentTestUtils: PTU,
} = ChromeUtils.import("resource://testing-common/PaymentTestUtils.jsm", {});
let addLink = content.document.querySelector("payment-method-picker a");
is(addLink.textContent, "Add", "Add link text");
addLink.click();
@@ -166,25 +167,29 @@ add_task(async function test_private_per
},
"Check add page state");
ok(state.isPrivate,
"isPrivate flag is set when paymentrequest is shown from a private session");
let persistInput = content.document.querySelector("labelled-checkbox");
ok(!Cu.waiveXrays(persistInput).checked,
"checkbox is not checked by default from a private session");
- }, args);
+ }, args, {
+ browser: privateWin.gBrowser,
+ });
+ await BrowserTestUtils.closeWindow(privateWin);
});
add_task(async function test_private_card_adding() {
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForPrivateMerchantTask(PTU.ContentTasks.createRequest, async function check() {
+ let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, async function check() {
let {
PaymentTestUtils: PTU,
} = ChromeUtils.import("resource://testing-common/PaymentTestUtils.jsm", {});
let addLink = content.document.querySelector("payment-method-picker a");
is(addLink.textContent, "Add", "Add link text");
addLink.click();
@@ -216,10 +221,13 @@ add_task(async function test_private_car
state = await PTU.DialogContentUtils.waitForState(content, (state) => {
return Object.keys(state.tempBasicCards).length > tempCardCount;
},
"Check card was added to temp collection");
is(savedCardCount, Object.keys(state.savedBasicCards).length, "No card was saved in state");
is(Object.keys(state.tempBasicCards).length, 1, "Card was added temporarily");
- }, args);
+ }, args, {
+ browser: privateWin.gBrowser,
+ });
+ await BrowserTestUtils.closeWindow(privateWin);
});
--- a/browser/components/payments/test/browser/browser_host_name.js
+++ b/browser/components/payments/test/browser/browser_host_name.js
@@ -1,16 +1,16 @@
"use strict";
async function withBasicRequestDialogForOrigin(origin, dialogTaskFn) {
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, dialogTaskFn, args, {
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, dialogTaskFn, args, {
origin,
});
}
add_task(async function test_host() {
await withBasicRequestDialogForOrigin("https://example.com", () => {
is(content.document.querySelector("#host-name").textContent, "example.com",
"Check basic host name");
--- a/browser/components/payments/test/browser/browser_request_serialization.js
+++ b/browser/components/payments/test/browser/browser_request_serialization.js
@@ -20,17 +20,17 @@ add_task(async function test_serializeRe
} else {
is(actual.displayItems, null, "falsey input displayItems is serialized to null");
}
};
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.twoDisplayItems,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
add_task(async function test_serializeRequest_shippingOptions() {
const testTask = ({methodData, details}) => {
let contentWin = Cu.waiveXrays(content);
let store = contentWin.document.querySelector("payment-dialog").requestStore;
let state = store && store.getState();
ok(state, "got request store state");
@@ -50,17 +50,17 @@ add_task(async function test_serializeRe
// is(actual.shippingOptions, null, "falsey input shippingOptions is serialized to null");
// }
};
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.twoShippingOptions,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
add_task(async function test_serializeRequest_paymentMethods() {
const testTask = ({methodData, details}) => {
let contentWin = Cu.waiveXrays(content);
let store = contentWin.document.querySelector("payment-dialog").requestStore;
let state = store && store.getState();
ok(state, "got request store state");
@@ -70,17 +70,17 @@ add_task(async function test_serializeRe
is(result.paymentMethods.length, 2, "Correct number of payment methods");
ok(result.paymentMethods[0].supportedMethods && result.paymentMethods[1].supportedMethods,
"Both payment methods look valid");
};
const args = {
methodData: [PTU.MethodData.basicCard, PTU.MethodData.bobPay],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
add_task(async function test_serializeRequest_modifiers() {
const testTask = ({methodData, details}) => {
let contentWin = Cu.waiveXrays(content);
let store = contentWin.document.querySelector("payment-dialog").requestStore;
let state = store && store.getState();
ok(state, "got request store state");
@@ -106,13 +106,13 @@ add_task(async function test_serializeRe
is(item.total.label, expectedItem.total.label, "modifier total label matches");
is(item.total.amount.value, expectedItem.total.amount.value, "modifier label matches");
is(item.total.amount.currency, expectedItem.total.amount.currency,
"modifier total currency matches");
}
};
const args = {
- methodData: [PTU.MethodData.bobPay],
+ methodData: [PTU.MethodData.basicCard, PTU.MethodData.bobPay],
details: PTU.Details.bobPayPaymentModifier,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
--- a/browser/components/payments/test/browser/browser_total.js
+++ b/browser/components/payments/test/browser/browser_total.js
@@ -5,42 +5,42 @@ add_task(async function test_total() {
is(content.document.querySelector("#total > currency-amount").textContent,
"$60.00",
"Check total currency amount");
};
const args = {
methodData: [PTU.MethodData.basicCard],
details: PTU.Details.total60USD,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
add_task(async function test_modifier_with_no_method_selected() {
const testTask = async ({methodData, details}) => {
// There are no payment methods installed/setup so we expect the original (unmodified) total.
is(content.document.querySelector("#total > currency-amount").textContent,
"$2.00",
"Check unmodified total currency amount");
};
const args = {
methodData: [PTU.MethodData.bobPay, PTU.MethodData.basicCard],
details: PTU.Details.bobPayPaymentModifier,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
});
add_task(async function test_modifier_with_no_method_selected() {
info("adding a basic-card");
await addSampleAddressesAndBasicCard();
const testTask = async ({methodData, details}) => {
// We expect the *only* payment method (the one basic-card) to be selected initially.
is(content.document.querySelector("#total > currency-amount").textContent,
"$2.50",
"Check modified total currency amount");
};
const args = {
methodData: [PTU.MethodData.bobPay, PTU.MethodData.basicCard],
details: PTU.Details.bobPayPaymentModifier,
};
- await spawnInDialogForMerchantTask(PTU.ContentTasks.createRequest, testTask, args);
+ await spawnInDialogForMerchantTask(PTU.ContentTasks.createAndShowRequest, testTask, args);
await cleanupFormAutofillStorage();
});
--- a/browser/components/payments/test/browser/head.js
+++ b/browser/components/payments/test/browser/head.js
@@ -107,17 +107,17 @@ function withNewDialogFrame(requestId, t
await ContentTaskUtils.waitForCondition(() => content.document.readyState == "complete",
"Waiting for the unprivileged frame to load");
});
await taskFn(paymentRequestFrame);
}
let args = {
gBrowser,
- url: `chrome://payments/content/paymentDialogWrapper.xhtml?requestId=${requestId}`,
+ url: `chrome://payments/content/paymentDialogWrapper.xul?requestId=${requestId}`,
};
return BrowserTestUtils.withNewTab(args, dialogTabTask);
}
/**
* Spawn a content task inside the inner unprivileged frame of a privileged Payment Request dialog.
*
* @param {string} requestId
@@ -216,55 +216,34 @@ async function setupPaymentDialog(browse
*
* @param {Function} merchantTaskFn
* @param {Function} dialogTaskFn
* @param {Object} taskArgs
* @param {Object} options
* @param {string} options.origin
*/
async function spawnInDialogForMerchantTask(merchantTaskFn, dialogTaskFn, taskArgs, {
+ browser,
origin = "https://example.com",
} = {
origin: "https://example.com",
}) {
await withMerchantTab({
+ browser,
url: origin + BLANK_PAGE_PATH,
}, async merchBrowser => {
- await ContentTask.spawn(merchBrowser, taskArgs, merchantTaskFn);
-
- const requests = getPaymentRequests();
- is(requests.length, 1, "Should have one payment request");
- let request = requests[0];
- ok(!!request.requestId, "Got a payment request with an ID");
-
- await spawnTaskInNewDialog(request.requestId, dialogTaskFn, taskArgs);
- });
-}
+ let {win, frame} = await setupPaymentDialog(merchBrowser, {
+ ...taskArgs,
+ merchantTaskFn,
+ });
-async function spawnInDialogForPrivateMerchantTask(merchantTaskFn, dialogTaskFn, taskArgs, {
- origin = "https://example.com",
-} = {
- origin: "https://example.com",
-}) {
- let privateWin = await BrowserTestUtils.openNewBrowserWindow({private: true});
-
- await withMerchantTab({
- url: origin + BLANK_PAGE_PATH,
- browser: privateWin.gBrowser,
- }, async merchBrowser => {
- await ContentTask.spawn(merchBrowser, taskArgs, merchantTaskFn);
-
- const requests = getPaymentRequests();
- is(requests.length, 1, "Should have one payment request");
- let request = requests[0];
- ok(!!request.requestId, "Got a payment request with an ID");
-
- await spawnTaskInNewDialog(request.requestId, dialogTaskFn, taskArgs);
+ await spawnPaymentDialogTask(frame, dialogTaskFn, taskArgs);
+ spawnPaymentDialogTask(frame, PTU.DialogContentTasks.manuallyClickCancel);
+ await BrowserTestUtils.waitForCondition(() => win.closed, "dialog should be closed");
});
- await BrowserTestUtils.closeWindow(privateWin);
}
async function setupFormAutofillStorage() {
await formAutofillStorage.initialize();
}
function cleanupFormAutofillStorage() {
formAutofillStorage.addresses._nukeAllRecords();