summaryrefslogtreecommitdiffstats
path: root/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js
diff options
context:
space:
mode:
Diffstat (limited to 'browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js')
-rw-r--r--browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js89
1 files changed, 89 insertions, 0 deletions
diff --git a/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js b/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js
new file mode 100644
index 0000000000..84acedaa7a
--- /dev/null
+++ b/browser/components/search/test/unit/test_search_telemetry_categorization_process_domains.js
@@ -0,0 +1,89 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/*
+ * This test ensures we are correctly processing the domains that have been
+ * extracted from a SERP.
+ */
+
+ChromeUtils.defineESModuleGetters(this, {
+ BrowserSearchTelemetry: "resource:///modules/BrowserSearchTelemetry.sys.mjs",
+ SearchSERPCategorization: "resource:///modules/SearchSERPTelemetry.sys.mjs",
+ SearchSERPTelemetry: "resource:///modules/SearchSERPTelemetry.sys.mjs",
+ SearchUtils: "resource://gre/modules/SearchUtils.sys.mjs",
+ sinon: "resource://testing-common/Sinon.sys.mjs",
+});
+
+// Links including the provider name are not extracted.
+const PROVIDER = "example";
+
+const TESTS = [
+ {
+ title: "Domains matching the provider.",
+ domains: ["example.com", "www.example.com", "www.foobar.com"],
+ expected: ["foobar.com"],
+ },
+ {
+ title: "Second-level domains to a top-level domain.",
+ domains: [
+ "www.foobar.gc.ca",
+ "www.foobar.gov.uk",
+ "foobar.co.uk",
+ "www.foobar.co.il",
+ ],
+ expected: ["foobar.gc.ca", "foobar.gov.uk", "foobar.co.uk", "foobar.co.il"],
+ },
+ {
+ title: "Long subdomain.",
+ domains: ["ab.cd.ef.gh.foobar.com"],
+ expected: ["foobar.com"],
+ },
+ {
+ title: "Same top-level domain.",
+ domains: ["foobar.com", "www.foobar.com", "abc.def.foobar.com"],
+ expected: ["foobar.com"],
+ },
+ {
+ title: "Empty input.",
+ domains: [""],
+ expected: [],
+ },
+];
+
+add_setup(async function () {
+ Services.prefs.setBoolPref(
+ SearchUtils.BROWSER_SEARCH_PREF + "serpEventTelemetry.enabled",
+ true
+ );
+ Services.prefs.setBoolPref(
+ SearchUtils.BROWSER_SEARCH_PREF +
+ "serpEventTelemetryCategorization.enabled",
+ true
+ );
+
+ // Required or else BrowserSearchTelemetry will throw.
+ sinon.stub(BrowserSearchTelemetry, "shouldRecordSearchCount").returns(true);
+ await SearchSERPTelemetry.init();
+});
+
+add_task(async function test_parsing_extracted_urls() {
+ for (let i = 0; i < TESTS.length; i++) {
+ let currentTest = TESTS[i];
+ let domains = new Set(currentTest.domains);
+
+ if (currentTest.title) {
+ info(currentTest.title);
+ }
+ let expectedDomains = new Set(currentTest.expected);
+ let actualDomains = SearchSERPCategorization.processDomains(
+ domains,
+ PROVIDER
+ );
+
+ Assert.deepEqual(
+ Array.from(actualDomains),
+ Array.from(expectedDomains),
+ "Domains should have been parsed correctly."
+ );
+ }
+});