CI / typecheck + build (turbo) (push) Canceled after 0s
Added a real test suite (32 tests, 0 external services) using bun:test with in-process module mocking for @mcpedia/db, @mcpedia/queue, @mcpedia/core. Enablers: - apps/api: extracted createApp(deps?) factory + dashboard.ts module from index.ts so the HTTP surface is unit-testable (real queue is lazy-imported). - packages/core: exported shouldCreateRevision pure predicate; restoreRevision gained an opts.reindex seam for the chunk-rebuild contract. - apps/mcp: renamed smoke.test.ts -> smoke.ts (bun test now owns .test.ts), updated stale assertions (10 tools, 4 docs in docs section). - infra: turbo test task (cache:false), test scripts across packages, @types/bun + tsconfig base types, CI 'Test' step after Build. Packages with tests: embeddings(5), parser(5), search(8), core(4), mcp(6 auth-gates), api(8 contracts). All green: typecheck(4/4), test(6/6 pkgs), build(web). Live API verified /health, /metrics, /dashboard, /hooks/* auth gate on temp port.
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import { test, expect } from "bun:test";
|
|
import { cosine, toTsQuery } from "../src/index";
|
|
|
|
test("cosine: orthogonal vectors are 0", () => {
|
|
expect(cosine([1, 0], [0, 1])).toBeCloseTo(0, 6);
|
|
});
|
|
|
|
test("cosine: identical vectors are 1", () => {
|
|
expect(cosine([1, 1, 1], [1, 1, 1])).toBeCloseTo(1, 6);
|
|
});
|
|
|
|
test("cosine: empty or length-mismatched returns 0", () => {
|
|
expect(cosine([], [])).toBe(0);
|
|
expect(cosine([], [1, 2, 3])).toBe(0);
|
|
expect(cosine([1, 2], [1, 2, 3])).toBe(0);
|
|
});
|
|
|
|
test("cosine: opposite vectors are negative", () => {
|
|
const score = cosine([1, 0], [-1, 0]);
|
|
expect(score).toBeCloseTo(-1, 6);
|
|
});
|
|
|
|
test("cosine: zero-vector denominator returns 0 (no NaN)", () => {
|
|
expect(cosine([0, 0, 0], [0, 0, 0])).toBe(0);
|
|
});
|
|
|
|
test("toTsQuery: joins terms with AND-prefix", () => {
|
|
expect(toTsQuery("websocket contract")).toBe("websocket:* & contract:*");
|
|
});
|
|
|
|
test("toTsQuery: strips non-alphanumerics and empty terms", () => {
|
|
expect(toTsQuery("hello!!! world???")).toBe("hello:* & world:*");
|
|
expect(toTsQuery(" ")).toBe("");
|
|
expect(toTsQuery("123 456")).toBe("123:* & 456:*");
|
|
});
|
|
|
|
test("toTsQuery: empty/garbage input returns empty string", () => {
|
|
expect(toTsQuery("!!!@@@###")).toBe("");
|
|
expect(toTsQuery("")).toBe("");
|
|
});
|