/* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ /** * Tests the region logic in DomainToCategoriesMap. */ "use strict"; ChromeUtils.defineESModuleGetters(this, { SERPDomainToCategoriesMap: "moz-src:///browser/components/search/SERPCategorization.sys.mjs", }); add_task(async function record_matches_region() { const TESTS = [ { title: "Home region, blank include and exclude.", record: { includeRegions: [], excludeRegions: [], }, region: "US", expectedResult: false, }, { title: "Null region, blank include and exclude.", record: { includeRegions: [], excludeRegions: [], }, region: null, expectedResult: false, }, { title: "Null region, with include.", record: { includeRegions: ["US"], excludeRegions: [], }, region: null, expectedResult: false, }, { title: "Blank region, blank include and exclude.", record: { includeRegions: [], excludeRegions: [], }, region: "", expectedResult: false, }, { title: "Blank region, with include.", record: { includeRegions: ["US"], excludeRegions: [], }, region: "", expectedResult: false, }, { title: "Included region.", record: { includeRegions: ["US"], excludeRegions: [], }, region: "US", expectedResult: true, }, { title: "Region is not included.", record: { includeRegions: ["DE"], excludeRegions: [], }, region: "US", expectedResult: false, }, { title: "Multiple included regions.", record: { includeRegions: ["DE", "CA", "US"], excludeRegions: [], }, region: "US", expectedResult: true, }, { title: "Excluded region.", record: { includeRegions: [], excludeRegions: ["US"], }, region: "US", expectedResult: false, }, { title: "Multiple excluded regions.", record: { includeRegions: [], excludeRegions: ["DE", "CA", "US"], }, region: "US", expectedResult: false, }, ]; for (let { title, record, expectedResult, region } of TESTS) { info(title); let result = SERPDomainToCategoriesMap.recordMatchesRegion(record, region); Assert.equal(result, expectedResult, "Result should match."); } }); add_task(async function find_records_for_region() { const TESTS = [ { title: "Region matches custom region.", record: [ { includeRegions: ["US"], excludeRegions: [], isDefault: false }, { includeRegions: [], excludeRegions: [], isDefault: true }, ], region: "US", expectedResult: { isDefault: false, records: [ { includeRegions: ["US"], excludeRegions: [], isDefault: false, }, ], }, }, { title: "Region matches multiple custom regions.", record: [ { includeRegions: ["US"], excludeRegions: [], isDefault: false }, { includeRegions: ["DE"], excludeRegions: [], isDefault: false }, { includeRegions: [], excludeRegions: [], isDefault: true }, { includeRegions: ["US"], excludeRegions: [], isDefault: false }, ], region: "US", expectedResult: { isDefault: false, records: [ { includeRegions: ["US"], excludeRegions: [], isDefault: false, }, { includeRegions: ["US"], excludeRegions: [], isDefault: false, }, ], }, }, { title: "Region matches default record.", record: [ { includeRegions: ["US"], excludeRegions: [], isDefault: false }, { includeRegions: [], excludeRegions: [], isDefault: true }, ], region: "CA", expectedResult: { isDefault: true, records: [ { includeRegions: [], excludeRegions: [], isDefault: true, }, ], }, }, { title: "Region matches multiple default records.", record: [ { includeRegions: [], excludeRegions: [], isDefault: true }, { includeRegions: ["US"], excludeRegions: [], isDefault: false }, { includeRegions: ["DE"], excludeRegions: [], isDefault: false }, { includeRegions: [], excludeRegions: [], isDefault: true }, ], region: "CA", expectedResult: { isDefault: true, records: [ { includeRegions: [], excludeRegions: [], isDefault: true, }, { includeRegions: [], excludeRegions: [], isDefault: true, }, ], }, }, { title: "Region doesn't match default record.", record: [{ includeRegions: [], excludeRegions: ["CA"], isDefault: true }], region: "CA", expectedResult: null, }, ]; for (let { title, record, expectedResult, region } of TESTS) { info(title); let result = SERPDomainToCategoriesMap.findRecordsForRegion(record, region); Assert.deepEqual(result, expectedResult, "Result should match."); } });