252 lines
5.3 KiB
JavaScript
252 lines
5.3 KiB
JavaScript
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)
|
|
);
|
|
});
|
|
});
|