diff --git a/frontend/src/lib/channel-search.test.ts b/frontend/src/lib/channel-search.test.ts new file mode 100644 index 0000000..2d7f65b --- /dev/null +++ b/frontend/src/lib/channel-search.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest"; +import { matchesChannelSearch } from "./channel-search"; + +describe("matchesChannelSearch", () => { + it("matches case-insensitively", () => { + expect(matchesChannelSearch("#General", "gen")).toBe(true); + }); + + it("normalizes hash prefixes", () => { + expect(matchesChannelSearch("#devops", "#dev")).toBe(true); + }); + + it("returns true for empty queries", () => { + expect(matchesChannelSearch("#random", "")).toBe(true); + }); + + it("returns false when unmatched", () => { + expect(matchesChannelSearch("#backend", "frontend")).toBe(false); + }); +}); diff --git a/frontend/src/lib/channel-search.ts b/frontend/src/lib/channel-search.ts new file mode 100644 index 0000000..421937d --- /dev/null +++ b/frontend/src/lib/channel-search.ts @@ -0,0 +1,7 @@ +/** Channel search matching helpers. */ +export function matchesChannelSearch(name: string, query: string): boolean { + const n = name.toLowerCase().replace(/^#/, ""); + const q = query.toLowerCase().trim().replace(/^#/, ""); + if (!q) return true; + return n.includes(q); +}