sendou.ink/app/features/tournament-bracket/components/BracketMapListDialog.test.ts

54 lines
2.1 KiB
TypeScript

import { describe, expect, test } from "vitest";
import { mapSearchFilter } from "./BracketMapListDialog";
const contains = (string: string, substring: string) =>
string.toLowerCase().includes(substring.toLowerCase());
const filter = (textValue: string, inputValue: string) =>
mapSearchFilter(textValue, inputValue, contains);
describe("mapSearchFilter", () => {
test("matches everything for empty input", () => {
expect(filter("SZ Hagglefish Market", "")).toBe(true);
expect(filter("TC Crableg Capital", " ")).toBe(true);
});
test("matches against stage name when no mode prefix is given", () => {
expect(filter("SZ Crableg Capital", "crab")).toBe(true);
expect(filter("TC Crableg Capital", "crab")).toBe(true);
expect(filter("SZ Hagglefish Market", "crab")).toBe(false);
});
test("mode prefix alone matches all maps of that mode", () => {
expect(filter("SZ Hagglefish Market", "sz")).toBe(true);
expect(filter("SZ Crableg Capital", "sz")).toBe(true);
expect(filter("TC Crableg Capital", "sz")).toBe(false);
});
test("mode prefix is case-insensitive", () => {
expect(filter("SZ Hagglefish Market", "Sz")).toBe(true);
expect(filter("SZ Hagglefish Market", "SZ")).toBe(true);
});
test("trailing whitespace after a mode prefix still matches all of that mode", () => {
expect(filter("SZ Hagglefish Market", "sz ")).toBe(true);
expect(filter("TC Hagglefish Market", "sz ")).toBe(false);
});
test("mode prefix combined with a query filters within that mode", () => {
expect(filter("SZ Crableg Capital", "sz crab")).toBe(true);
expect(filter("SZ Hagglefish Market", "sz crab")).toBe(false);
expect(filter("TC Crableg Capital", "sz crab")).toBe(false);
});
test("query after mode prefix is matched against the stage name", () => {
expect(filter("RM Museum d'Alfonsino", "rm museum")).toBe(true);
expect(filter("RM Museum d'Alfonsino", "rm market")).toBe(false);
});
test("non-mode first word falls back to stage name search", () => {
expect(filter("SZ Hagglefish Market", "hagg")).toBe(true);
expect(filter("SZ Hagglefish Market", "market")).toBe(true);
});
});