From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../formautofill/test/unit/test_getRecords.js | 258 +++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 browser/extensions/formautofill/test/unit/test_getRecords.js (limited to 'browser/extensions/formautofill/test/unit/test_getRecords.js') diff --git a/browser/extensions/formautofill/test/unit/test_getRecords.js b/browser/extensions/formautofill/test/unit/test_getRecords.js new file mode 100644 index 0000000000..9a7e5e6ac7 --- /dev/null +++ b/browser/extensions/formautofill/test/unit/test_getRecords.js @@ -0,0 +1,258 @@ +/* + * Test for make sure getRecords can retrieve right collection from storage. + */ + +"use strict"; + +const { CreditCard } = ChromeUtils.importESModule( + "resource://gre/modules/CreditCard.sys.mjs" +); + +let FormAutofillParent, FormAutofillStatus; +let OSKeyStore; +add_setup(async () => { + ({ FormAutofillParent, FormAutofillStatus } = ChromeUtils.importESModule( + "resource://autofill/FormAutofillParent.sys.mjs" + )); + ({ OSKeyStore } = ChromeUtils.importESModule( + "resource://gre/modules/OSKeyStore.sys.mjs" + )); +}); + +const TEST_ADDRESS_1 = { + "given-name": "Timothy", + "additional-name": "John", + "family-name": "Berners-Lee", + organization: "World Wide Web Consortium", + "street-address": "32 Vassar Street\nMIT Room 32-G524", + "address-level2": "Cambridge", + "address-level1": "MA", + "postal-code": "02139", + country: "US", + tel: "+16172535702", + email: "timbl@w3.org", +}; + +const TEST_ADDRESS_2 = { + "street-address": "Some Address", + country: "US", +}; + +let TEST_CREDIT_CARD_1 = { + "cc-name": "John Doe", + "cc-number": "4111111111111111", + "cc-exp-month": 4, + "cc-exp-year": 2017, + "cc-type": "visa", +}; + +let TEST_CREDIT_CARD_2 = { + "cc-name": "John Dai", + "cc-number": "4929001587121045", + "cc-exp-month": 2, + "cc-exp-year": 2017, + "cc-type": "visa", +}; + +add_task(async function test_getRecords() { + FormAutofillStatus.init(); + + await FormAutofillStatus.formAutofillStorage.initialize(); + let fakeResult = { + addresses: [ + { + "given-name": "Timothy", + "additional-name": "John", + "family-name": "Berners-Lee", + organization: "World Wide Web Consortium", + }, + ], + creditCards: [ + { + "cc-name": "John Doe", + "cc-number": "4111111111111111", + "cc-exp-month": 4, + "cc-exp-year": 2017, + }, + ], + }; + + for (let collectionName of ["addresses", "creditCards", "nonExisting"]) { + let collection = FormAutofillStatus.formAutofillStorage[collectionName]; + let expectedResult = fakeResult[collectionName] || []; + + if (collection) { + sinon.stub(collection, "getAll"); + collection.getAll.returns(Promise.resolve(expectedResult)); + } + await FormAutofillParent._getRecords({ collectionName }); + if (collection) { + Assert.equal(collection.getAll.called, true); + collection.getAll.restore(); + } + } +}); + +add_task(async function test_getRecords_addresses() { + await FormAutofillStatus.formAutofillStorage.initialize(); + let mockAddresses = [TEST_ADDRESS_1, TEST_ADDRESS_2]; + let collection = FormAutofillStatus.formAutofillStorage.addresses; + sinon.stub(collection, "getAll"); + collection.getAll.returns(Promise.resolve(mockAddresses)); + + let testCases = [ + { + description: "If the search string could match 1 address", + filter: { + collectionName: "addresses", + info: { fieldName: "street-address" }, + searchString: "Some", + }, + expectedResult: [TEST_ADDRESS_2], + }, + { + description: "If the search string could match multiple addresses", + filter: { + collectionName: "addresses", + info: { fieldName: "country" }, + searchString: "u", + }, + expectedResult: [TEST_ADDRESS_1, TEST_ADDRESS_2], + }, + { + description: "If the search string could not match any address", + filter: { + collectionName: "addresses", + info: { fieldName: "street-address" }, + searchString: "test", + }, + expectedResult: [], + }, + { + description: "If the search string is empty", + filter: { + collectionName: "addresses", + info: { fieldName: "street-address" }, + searchString: "", + }, + expectedResult: [TEST_ADDRESS_1, TEST_ADDRESS_2], + }, + { + description: + "Check if the filtering logic is free from searching special chars", + filter: { + collectionName: "addresses", + info: { fieldName: "street-address" }, + searchString: ".*", + }, + expectedResult: [], + }, + { + description: + "Prevent broken while searching the property that does not exist", + filter: { + collectionName: "addresses", + info: { fieldName: "tel" }, + searchString: "1", + }, + expectedResult: [], + }, + ]; + + for (let testCase of testCases) { + info("Starting testcase: " + testCase.description); + let result = await FormAutofillParent._getRecords(testCase.filter); + Assert.deepEqual(result, testCase.expectedResult); + } +}); + +add_task(async function test_getRecords_creditCards() { + await FormAutofillStatus.formAutofillStorage.initialize(); + let collection = FormAutofillStatus.formAutofillStorage.creditCards; + let encryptedCCRecords = await Promise.all( + [TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2].map(async record => { + let clonedRecord = Object.assign({}, record); + clonedRecord["cc-number"] = CreditCard.getLongMaskedNumber( + record["cc-number"] + ); + clonedRecord["cc-number-encrypted"] = await OSKeyStore.encrypt( + record["cc-number"] + ); + return clonedRecord; + }) + ); + sinon + .stub(collection, "getAll") + .callsFake(() => + Promise.resolve([ + Object.assign({}, encryptedCCRecords[0]), + Object.assign({}, encryptedCCRecords[1]), + ]) + ); + + let testCases = [ + { + description: "If the search string could match multiple creditCards", + filter: { + collectionName: "creditCards", + info: { fieldName: "cc-name" }, + searchString: "John", + }, + expectedResult: encryptedCCRecords, + }, + { + description: "If the search string could not match any creditCard", + filter: { + collectionName: "creditCards", + info: { fieldName: "cc-name" }, + searchString: "T", + }, + expectedResult: [], + }, + { + description: + "Return all creditCards if focused field is cc number; " + + "if the search string could match multiple creditCards", + filter: { + collectionName: "creditCards", + info: { fieldName: "cc-number" }, + searchString: "4", + }, + expectedResult: encryptedCCRecords, + }, + { + description: "If the search string could match 1 creditCard", + filter: { + collectionName: "creditCards", + info: { fieldName: "cc-name" }, + searchString: "John Doe", + }, + mpEnabled: true, + expectedResult: encryptedCCRecords.slice(0, 1), + }, + { + description: "Return all creditCards if focused field is cc number", + filter: { + collectionName: "creditCards", + info: { fieldName: "cc-number" }, + searchString: "411", + }, + mpEnabled: true, + expectedResult: encryptedCCRecords, + }, + ]; + + for (let testCase of testCases) { + info("Starting testcase: " + testCase.description); + if (testCase.mpEnabled) { + let tokendb = Cc["@mozilla.org/security/pk11tokendb;1"].createInstance( + Ci.nsIPK11TokenDB + ); + let token = tokendb.getInternalKeyToken(); + token.reset(); + token.initPassword("password"); + } + let result = await FormAutofillParent._getRecords(testCase.filter); + Assert.deepEqual(result, testCase.expectedResult); + } +}); -- cgit v1.2.3