Files
buzz-sheet/lib/guides/team-search.test.ts
T
2026-09-05 19:12:38 +07:00

43 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { matchesTeamSearch, sortTeamsByDps } from "./team-search";
const team = {
team: ["Vaporize Team"],
character: ["Mualani"],
weapon: ["Surf's Up"],
artifact: ["Obsidian Codex", "Scroll of the Hero"],
};
describe("team search", () => {
it("searches every category when the target is all", () => {
expect(matchesTeamSearch(team, "surf", "all")).toBe(true);
expect(matchesTeamSearch(team, "mualani", "all")).toBe(true);
});
it("only searches the selected target", () => {
expect(matchesTeamSearch(team, "vaporize", "team")).toBe(true);
expect(matchesTeamSearch(team, "obsidian", "team")).toBe(false);
expect(matchesTeamSearch(team, "obsidian", "artifact")).toBe(true);
});
it("ignores case and surrounding whitespace", () => {
expect(matchesTeamSearch(team, " HERO ", "artifact")).toBe(true);
});
it("matches every team when the query is empty", () => {
expect(matchesTeamSearch(team, " ", "weapon")).toBe(true);
});
it("sorts every team by DPS and preserves order for ties", () => {
const teams = [
{ name: "middle", rotationSeconds: 10, members: [{ damage: 100 }] },
{ name: "best", rotationSeconds: 5, members: [{ damage: 100 }] },
{ name: "tie", rotationSeconds: 20, members: [{ damage: 200 }] },
];
expect(sortTeamsByDps(teams, "best").map((item) => item.name)).toEqual(["best", "middle", "tie"]);
expect(sortTeamsByDps(teams, "worst").map((item) => item.name)).toEqual(["middle", "tie", "best"]);
expect(sortTeamsByDps(teams, null).map((item) => item.name)).toEqual(["middle", "best", "tie"]);
});
});