tests / relevance.test.ts
tests / relevance.test.ts
import { describe, it, expect } from "vitest";
import { isNoiseUrl, pageRelevanceScore } from "../src/utils/relevance";
import { buildWordRegex } from "../src/utils/relevance";
describe("isNoiseUrl", () => {
it("returns true for blocked domains", () => {
expect(isNoiseUrl("https://facebook.com/some/page", "test")).toBe(true);
expect(isNoiseUrl("https://www.facebook.com/some/page", "test")).toBe(true);
expect(isNoiseUrl("https://pinterest.com/pin/123", "test")).toBe(true);
expect(isNoiseUrl("https://instagram.com/user/post", "test")).toBe(true);
expect(isNoiseUrl("https://twitter.com/user/status/123", "test")).toBe(true);
expect(isNoiseUrl("https://x.com/user/status/123", "test")).toBe(true);
expect(isNoiseUrl("https://youtube.com/watch?v=abc", "test")).toBe(true);
expect(isNoiseUrl("https://tiktok.com/@user/video/123", "test")).toBe(true);
expect(isNoiseUrl("https://amazon.com/product/123", "test")).toBe(true);
expect(isNoiseUrl("https://ebay.com/item/123", "test")).toBe(true);
});
it("returns true for blocked extensions", () => {
expect(isNoiseUrl("https://example.com/style.css", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/script.js", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/data.json", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.png", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.jpg", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.svg", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/file.pdf", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/archive.zip", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/video.mp4", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/audio.mp3", "test")).toBe(true);
});
it("returns true for noise paths", () => {
expect(isNoiseUrl("https://example.com/login", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/signup", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/register", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/cart", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/checkout", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/account", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/profile", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/wp-admin/", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/wp-login.php", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/cgi-bin/", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/admin/", "test")).toBe(true);
});
it("returns false for valid URLs", () => {
expect(isNoiseUrl("https://example.com/page", "test")).toBe(false);
expect(isNoiseUrl("https://example.com/about/team", "test")).toBe(false);
expect(isNoiseUrl("https://example.com/blog/post-1", "test")).toBe(false);
expect(isNoiseUrl("https://docs.example.com/api/reference", "test")).toBe(false);
});
it("returns true for invalid URLs", () => {
expect(isNoiseUrl("not-a-url", "test")).toBe(true);
expect(isNoiseUrl("", "test")).toBe(true);
});
it("is case-insensitive for blocked domains", () => {
expect(isNoiseUrl("https://FACEBOOK.com/page", "test")).toBe(true);
expect(isNoiseUrl("https://Pinterest.com/pin", "test")).toBe(true);
});
it("is case-insensitive for blocked extensions", () => {
expect(isNoiseUrl("https://example.com/IMAGE.PNG", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/style.CSS", "test")).toBe(true);
});
});
describe("pageRelevanceScore", () => {
it("returns 100 for empty query (all stop words)", () => {
expect(pageRelevanceScore("the and for", "Some Title", "Some content")).toBe(100);
});
it("returns 100 for query with only stop words", () => {
expect(pageRelevanceScore("the", "Title", "Content")).toBe(100);
});
it("scores higher when first word matches title", () => {
const score = pageRelevanceScore("typescript tutorial", "TypeScript Tutorial Guide", "Learn TypeScript");
expect(score).toBeGreaterThanOrEqual(50);
});
it("scores lower when first word only matches content", () => {
const score = pageRelevanceScore("typescript tutorial", "Programming Guide", "Learn TypeScript and JavaScript");
expect(score).toBeGreaterThanOrEqual(20);
expect(score).toBeLessThan(50);
});
it("scores 0 when no query words match", () => {
const score = pageRelevanceScore("python django", "TypeScript Guide", "Learn JavaScript");
expect(score).toBe(0);
});
it("gives diminishing returns for additional matched words", () => {
const score1 = pageRelevanceScore("web scraping", "Web Scraping", "Web scraping content");
const score2 = pageRelevanceScore("web scraping tutorial guide", "Web Scraping Tutorial", "Web scraping tutorial guide content");
expect(score2).toBeGreaterThanOrEqual(score1);
});
it("caps at 100", () => {
const score = pageRelevanceScore("web scraping tutorial guide python async", "Web Scraping Tutorial Guide", "Web scraping tutorial guide python async content");
expect(score).toBeLessThanOrEqual(100);
});
it("ignores single-character words", () => {
const score = pageRelevanceScore("a b c d", "Some Title", "Some content");
expect(score).toBe(100); // all words filtered out
});
it("handles query with mixed stop words and real words", () => {
const score = pageRelevanceScore("the best python tutorial", "Python Tutorial", "Learn Python");
expect(score).toBeGreaterThan(0);
});
});
describe("buildWordRegex", () => {
it("escapes C++ correctly", () => {
const regex = buildWordRegex("C++");
expect(regex.test("Learn C++ programming")).toBe(true);
expect(regex.test("C++ is great")).toBe(true);
expect(regex.test("C-- is not")).toBe(false);
});
it("escapes .* correctly", () => {
const regex = buildWordRegex(".*");
expect(regex.test(".*")).toBe(true);
expect(regex.test("abc")).toBe(false);
});
it("escapes [a-z] correctly", () => {
const regex = buildWordRegex("[a-z]");
expect(regex.test("[a-z]")).toBe(true);
expect(regex.test("abc")).toBe(false);
});
it("escapes special regex chars: ( ) { } ^ $ | ?", () => {
const regex = buildWordRegex("(test)");
expect(regex.test("(test)")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes backslash", () => {
const regex = buildWordRegex("a\\b");
expect(regex.test("a\\b")).toBe(true);
});
it("escapes square brackets", () => {
const regex = buildWordRegex("[test]");
expect(regex.test("[test]")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes plus sign", () => {
const regex = buildWordRegex("a+b");
expect(regex.test("a+b")).toBe(true);
expect(regex.test("aab")).toBe(false);
});
it("escapes dot", () => {
const regex = buildWordRegex("a.b");
expect(regex.test("a.b")).toBe(true);
expect(regex.test("axb")).toBe(false);
});
it("escapes dollar sign", () => {
const regex = buildWordRegex("$100");
expect(regex.test("$100")).toBe(true);
});
it("escapes caret", () => {
const regex = buildWordRegex("^start");
expect(regex.test("^start")).toBe(true);
});
it("escapes pipe", () => {
const regex = buildWordRegex("a|b");
expect(regex.test("a|b")).toBe(true);
expect(regex.test("a")).toBe(false);
expect(regex.test("b")).toBe(false);
});
it("escapes question mark", () => {
const regex = buildWordRegex("what?");
expect(regex.test("what?")).toBe(true);
expect(regex.test("what")).toBe(false);
});
it("escapes curly braces", () => {
const regex = buildWordRegex("{test}");
expect(regex.test("{test}")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes asterisk", () => {
const regex = buildWordRegex("a*");
expect(regex.test("a*")).toBe(true);
});
it("handles plain words without special chars", () => {
const regex = buildWordRegex("hello");
expect(regex.test("hello world")).toBe(true);
expect(regex.test("Hello World")).toBe(true);
expect(regex.test("say hello")).toBe(true);
});
});
import { describe, it, expect } from "vitest";
import { isNoiseUrl, pageRelevanceScore } from "../src/utils/relevance";
import { buildWordRegex } from "../src/utils/relevance";
describe("isNoiseUrl", () => {
it("returns true for blocked domains", () => {
expect(isNoiseUrl("https://facebook.com/some/page", "test")).toBe(true);
expect(isNoiseUrl("https://www.facebook.com/some/page", "test")).toBe(true);
expect(isNoiseUrl("https://pinterest.com/pin/123", "test")).toBe(true);
expect(isNoiseUrl("https://instagram.com/user/post", "test")).toBe(true);
expect(isNoiseUrl("https://twitter.com/user/status/123", "test")).toBe(true);
expect(isNoiseUrl("https://x.com/user/status/123", "test")).toBe(true);
expect(isNoiseUrl("https://youtube.com/watch?v=abc", "test")).toBe(true);
expect(isNoiseUrl("https://tiktok.com/@user/video/123", "test")).toBe(true);
expect(isNoiseUrl("https://amazon.com/product/123", "test")).toBe(true);
expect(isNoiseUrl("https://ebay.com/item/123", "test")).toBe(true);
});
it("returns true for blocked extensions", () => {
expect(isNoiseUrl("https://example.com/style.css", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/script.js", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/data.json", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.png", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.jpg", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/image.svg", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/file.pdf", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/archive.zip", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/video.mp4", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/audio.mp3", "test")).toBe(true);
});
it("returns true for noise paths", () => {
expect(isNoiseUrl("https://example.com/login", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/signup", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/register", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/cart", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/checkout", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/account", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/profile", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/wp-admin/", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/wp-login.php", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/cgi-bin/", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/admin/", "test")).toBe(true);
});
it("returns false for valid URLs", () => {
expect(isNoiseUrl("https://example.com/page", "test")).toBe(false);
expect(isNoiseUrl("https://example.com/about/team", "test")).toBe(false);
expect(isNoiseUrl("https://example.com/blog/post-1", "test")).toBe(false);
expect(isNoiseUrl("https://docs.example.com/api/reference", "test")).toBe(false);
});
it("returns true for invalid URLs", () => {
expect(isNoiseUrl("not-a-url", "test")).toBe(true);
expect(isNoiseUrl("", "test")).toBe(true);
});
it("is case-insensitive for blocked domains", () => {
expect(isNoiseUrl("https://FACEBOOK.com/page", "test")).toBe(true);
expect(isNoiseUrl("https://Pinterest.com/pin", "test")).toBe(true);
});
it("is case-insensitive for blocked extensions", () => {
expect(isNoiseUrl("https://example.com/IMAGE.PNG", "test")).toBe(true);
expect(isNoiseUrl("https://example.com/style.CSS", "test")).toBe(true);
});
});
describe("pageRelevanceScore", () => {
it("returns 100 for empty query (all stop words)", () => {
expect(pageRelevanceScore("the and for", "Some Title", "Some content")).toBe(100);
});
it("returns 100 for query with only stop words", () => {
expect(pageRelevanceScore("the", "Title", "Content")).toBe(100);
});
it("scores higher when first word matches title", () => {
const score = pageRelevanceScore("typescript tutorial", "TypeScript Tutorial Guide", "Learn TypeScript");
expect(score).toBeGreaterThanOrEqual(50);
});
it("scores lower when first word only matches content", () => {
const score = pageRelevanceScore("typescript tutorial", "Programming Guide", "Learn TypeScript and JavaScript");
expect(score).toBeGreaterThanOrEqual(20);
expect(score).toBeLessThan(50);
});
it("scores 0 when no query words match", () => {
const score = pageRelevanceScore("python django", "TypeScript Guide", "Learn JavaScript");
expect(score).toBe(0);
});
it("gives diminishing returns for additional matched words", () => {
const score1 = pageRelevanceScore("web scraping", "Web Scraping", "Web scraping content");
const score2 = pageRelevanceScore("web scraping tutorial guide", "Web Scraping Tutorial", "Web scraping tutorial guide content");
expect(score2).toBeGreaterThanOrEqual(score1);
});
it("caps at 100", () => {
const score = pageRelevanceScore("web scraping tutorial guide python async", "Web Scraping Tutorial Guide", "Web scraping tutorial guide python async content");
expect(score).toBeLessThanOrEqual(100);
});
it("ignores single-character words", () => {
const score = pageRelevanceScore("a b c d", "Some Title", "Some content");
expect(score).toBe(100); // all words filtered out
});
it("handles query with mixed stop words and real words", () => {
const score = pageRelevanceScore("the best python tutorial", "Python Tutorial", "Learn Python");
expect(score).toBeGreaterThan(0);
});
});
describe("buildWordRegex", () => {
it("escapes C++ correctly", () => {
const regex = buildWordRegex("C++");
expect(regex.test("Learn C++ programming")).toBe(true);
expect(regex.test("C++ is great")).toBe(true);
expect(regex.test("C-- is not")).toBe(false);
});
it("escapes .* correctly", () => {
const regex = buildWordRegex(".*");
expect(regex.test(".*")).toBe(true);
expect(regex.test("abc")).toBe(false);
});
it("escapes [a-z] correctly", () => {
const regex = buildWordRegex("[a-z]");
expect(regex.test("[a-z]")).toBe(true);
expect(regex.test("abc")).toBe(false);
});
it("escapes special regex chars: ( ) { } ^ $ | ?", () => {
const regex = buildWordRegex("(test)");
expect(regex.test("(test)")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes backslash", () => {
const regex = buildWordRegex("a\\b");
expect(regex.test("a\\b")).toBe(true);
});
it("escapes square brackets", () => {
const regex = buildWordRegex("[test]");
expect(regex.test("[test]")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes plus sign", () => {
const regex = buildWordRegex("a+b");
expect(regex.test("a+b")).toBe(true);
expect(regex.test("aab")).toBe(false);
});
it("escapes dot", () => {
const regex = buildWordRegex("a.b");
expect(regex.test("a.b")).toBe(true);
expect(regex.test("axb")).toBe(false);
});
it("escapes dollar sign", () => {
const regex = buildWordRegex("$100");
expect(regex.test("$100")).toBe(true);
});
it("escapes caret", () => {
const regex = buildWordRegex("^start");
expect(regex.test("^start")).toBe(true);
});
it("escapes pipe", () => {
const regex = buildWordRegex("a|b");
expect(regex.test("a|b")).toBe(true);
expect(regex.test("a")).toBe(false);
expect(regex.test("b")).toBe(false);
});
it("escapes question mark", () => {
const regex = buildWordRegex("what?");
expect(regex.test("what?")).toBe(true);
expect(regex.test("what")).toBe(false);
});
it("escapes curly braces", () => {
const regex = buildWordRegex("{test}");
expect(regex.test("{test}")).toBe(true);
expect(regex.test("test")).toBe(false);
});
it("escapes asterisk", () => {
const regex = buildWordRegex("a*");
expect(regex.test("a*")).toBe(true);
});
it("handles plain words without special chars", () => {
const regex = buildWordRegex("hello");
expect(regex.test("hello world")).toBe(true);
expect(regex.test("Hello World")).toBe(true);
expect(regex.test("say hello")).toBe(true);
});
});