summaryrefslogtreecommitdiffstats
path: root/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js')
-rw-r--r--browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js b/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js
new file mode 100644
index 0000000000..5668e88e74
--- /dev/null
+++ b/browser/extensions/formautofill/test/browser/creditCard/browser_creditCard_capture_multiple_cc_number.js
@@ -0,0 +1,102 @@
+"use strict";
+
+const TESTCASES = [
+ {
+ description: "Trigger credit card saving using multiple cc-number fields",
+ document: `<form id="form">
+ <input id="cc-name" autocomplete="cc-name">
+ <input id="cc-number1" autocomplete="cc-number" maxlength="4">
+ <input id="cc-number2" autocomplete="cc-number" maxlength="4">
+ <input id="cc-number3" autocomplete="cc-number" maxlength="4">
+ <input id="cc-number4" autocomplete="cc-number" maxlength="4">
+ <input id="cc-exp-month" autocomplete="cc-exp-month">
+ <input id="cc-exp-year" autocomplete="cc-exp-year">
+ <input id="submit" type="submit">
+ </form>`,
+ targetElementId: "cc-number1",
+ formValue: {
+ "#cc-name": "John Doe",
+ "#cc-number1": "3714",
+ "#cc-number2": "4963",
+ "#cc-number3": "5398",
+ "#cc-number4": "431",
+ "#cc-exp-month": 12,
+ "#cc-exp-year": 2000,
+ },
+ expected: [
+ {
+ "cc-name": "John Doe",
+ "cc-number": "371449635398431",
+ "cc-exp-month": 12,
+ "cc-exp-year": 2000,
+ "cc-type": "amex",
+ },
+ ],
+ },
+];
+
+async function expectSavedCreditCards(expectedCreditCards) {
+ const creditcards = await getCreditCards();
+ is(
+ creditcards.length,
+ expectedCreditCards.length,
+ `${creditcards.length} credit card in the storage`
+ );
+
+ for (let i = 0; i < expectedCreditCards.length; i++) {
+ for (const [key, value] of Object.entries(expectedCreditCards[i])) {
+ if (key == "cc-number") {
+ creditcards[i]["cc-number"] = await OSKeyStore.decrypt(
+ creditcards[i]["cc-number-encrypted"]
+ );
+ }
+ is(creditcards[i][key] ?? "", value, `field ${key} should be equal`);
+ }
+ }
+ return creditcards;
+}
+
+add_setup(async function () {
+ await SpecialPowers.pushPrefEnv({
+ set: [
+ ["extensions.formautofill.creditCards.supported", "on"],
+ ["extensions.formautofill.creditCards.enabled", true],
+ ],
+ });
+});
+
+add_task(async function test_capture_multiple_cc_number() {
+ if (!OSKeyStoreTestUtils.canTestOSKeyStoreLogin()) {
+ todo(
+ OSKeyStoreTestUtils.canTestOSKeyStoreLogin(),
+ "Cannot test OS key store login on official builds."
+ );
+ return;
+ }
+
+ for (const TEST of TESTCASES) {
+ info(`Test ${TEST.description}`);
+
+ let onChanged = waitForStorageChangedEvents("add");
+ await BrowserTestUtils.withNewTab(EMPTY_URL, async function (browser) {
+ await SpecialPowers.spawn(browser, [TEST.document], doc => {
+ content.document.body.innerHTML = doc;
+ });
+
+ await SimpleTest.promiseFocus(browser);
+
+ const onPopupShown = waitForPopupShown();
+ await focusUpdateSubmitForm(browser, {
+ focusSelector: `#${TEST.targetElementId}`,
+ newValues: TEST.formValue,
+ });
+
+ await onPopupShown;
+ await clickDoorhangerButton(MAIN_BUTTON, 0);
+ });
+ await onChanged;
+
+ await expectSavedCreditCards(TEST.expected);
+ await removeAllRecords();
+ }
+});