brackt/app/lib/__tests__/unmatched-team-reconciliation.test.ts
2026-05-14 16:45:02 -07:00

53 lines
2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildUnmatchedTeamResolutionView,
rankParticipantMatches,
type ReconciliationParticipant,
} from "../unmatched-team-reconciliation";
const participants: ReconciliationParticipant[] = [
{ id: "1", name: "Los Angeles Lakers" },
{ id: "2", name: "Golden State Warriors" },
{ id: "3", name: "Boston Celtics" },
{ id: "4", name: "New York Knicks" },
];
describe("unmatched team reconciliation helpers", () => {
it("suggests an exact normalized match first", () => {
const result = buildUnmatchedTeamResolutionView("los angeles lakers", participants);
expect(result.confidence).toBe("exact");
expect(result.suggestedParticipantName).toBe("Los Angeles Lakers");
expect(result.suggestedParticipantId).toBe("1");
});
it("suggests a substring match when an exact match is absent", () => {
const result = buildUnmatchedTeamResolutionView("Golden State", participants);
expect(result.confidence).toBe("partial");
expect(result.suggestedParticipantName).toBe("Golden State Warriors");
expect(result.orderedParticipants[0]?.name).toBe("Golden State Warriors");
});
it("leaves the picker unselected when only review-ranked matches exist", () => {
const result = buildUnmatchedTeamResolutionView("Boston Club", participants);
expect(result.confidence).toBe("review");
expect(result.suggestedParticipantId).toBeNull();
expect(result.topCandidates.length).toBeGreaterThan(0);
});
it("keeps top candidates ahead of the full participant list", () => {
const ranked = rankParticipantMatches("Boston", participants);
const result = buildUnmatchedTeamResolutionView("Boston", participants);
expect(ranked[0]?.participantName).toBe("Boston Celtics");
expect(result.orderedParticipants[0]?.name).toBe("Boston Celtics");
expect(result.orderedParticipants.map((participant) => participant.id)).toEqual([
"3",
"1",
"2",
"4",
]);
});
});