import { classifySite } from "lib/SiteClassifier.sys.mjs"; const FAKE_CLASSIFIER_DATA = [ { type: "hostname-and-params-match", criteria: [ { hostname: "hostnameandparams.com", params: [ { key: "param1", value: "val1", }, ], }, ], weight: 300, }, { type: "url-match", criteria: [{ url: "https://fullurl.com/must/match" }], weight: 400, }, { type: "params-match", criteria: [ { params: [ { key: "param1", value: "val1", }, { key: "param2", value: "val2", }, ], }, ], weight: 200, }, { type: "params-prefix-match", criteria: [ { params: [ { key: "client", prefix: "fir", }, ], }, ], weight: 200, }, { type: "has-params", criteria: [ { params: [{ key: "has-param1" }, { key: "has-param2" }], }, ], weight: 100, }, { type: "search-engine", criteria: [ { sld: "google" }, { hostname: "bing.com" }, { hostname: "duckduckgo.com" }, ], weight: 1, }, { type: "news-portal", criteria: [ { hostname: "yahoo.com" }, { hostname: "aol.com" }, { hostname: "msn.com" }, ], weight: 1, }, { type: "social-media", criteria: [{ hostname: "facebook.com" }, { hostname: "twitter.com" }], weight: 1, }, { type: "ecommerce", criteria: [{ sld: "amazon" }, { hostname: "ebay.com" }], weight: 1, }, ]; describe("SiteClassifier", () => { function RemoteSettings() { return { get() { return Promise.resolve(FAKE_CLASSIFIER_DATA); }, }; } it("should return the right category", async () => { assert.equal( "hostname-and-params-match", await classifySite( "https://hostnameandparams.com?param1=val1", RemoteSettings ) ); assert.equal( "other", await classifySite( "https://hostnameandparams.com?param1=val", RemoteSettings ) ); assert.equal( "other", await classifySite( "https://hostnameandparams.com?param=val1", RemoteSettings ) ); assert.equal( "other", await classifySite("https://hostnameandparams.com", RemoteSettings) ); assert.equal( "other", await classifySite("https://params.com?param1=val1", RemoteSettings) ); assert.equal( "url-match", await classifySite("https://fullurl.com/must/match", RemoteSettings) ); assert.equal( "other", await classifySite("http://fullurl.com/must/match", RemoteSettings) ); assert.equal( "params-match", await classifySite( "https://example.com?param1=val1¶m2=val2", RemoteSettings ) ); assert.equal( "params-match", await classifySite( "https://example.com?param1=val1¶m2=val2&other=other", RemoteSettings ) ); assert.equal( "other", await classifySite( "https://example.com?param1=val2¶m2=val1", RemoteSettings ) ); assert.equal( "other", await classifySite("https://example.com?param1¶m2", RemoteSettings) ); assert.equal( "params-prefix-match", await classifySite("https://search.com?client=firefox", RemoteSettings) ); assert.equal( "params-prefix-match", await classifySite("https://search.com?client=fir", RemoteSettings) ); assert.equal( "other", await classifySite( "https://search.com?client=mozillafirefox", RemoteSettings ) ); assert.equal( "has-params", await classifySite( "https://example.com?has-param1=val1&has-param2=val2", RemoteSettings ) ); assert.equal( "has-params", await classifySite( "https://example.com?has-param1&has-param2", RemoteSettings ) ); assert.equal( "has-params", await classifySite( "https://example.com?has-param1&has-param2&other=other", RemoteSettings ) ); assert.equal( "other", await classifySite("https://example.com?has-param1", RemoteSettings) ); assert.equal( "other", await classifySite("https://example.com?has-param2", RemoteSettings) ); assert.equal( "search-engine", await classifySite("https://google.com", RemoteSettings) ); assert.equal( "search-engine", await classifySite("https://google.de", RemoteSettings) ); assert.equal( "search-engine", await classifySite("http://bing.com/?q=firefox", RemoteSettings) ); assert.equal( "news-portal", await classifySite("https://yahoo.com", RemoteSettings) ); assert.equal( "social-media", await classifySite("http://twitter.com/firefox", RemoteSettings) ); assert.equal( "ecommerce", await classifySite("https://amazon.com", RemoteSettings) ); assert.equal( "ecommerce", await classifySite("https://amazon.ca", RemoteSettings) ); assert.equal( "ecommerce", await classifySite("https://ebay.com", RemoteSettings) ); }); });