46 lines
2.0 KiB
TypeScript
46 lines
2.0 KiB
TypeScript
import { createHash } from "node:crypto";
|
|
import { readFile } from "node:fs/promises";
|
|
import { join } from "node:path";
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { customTravelers, isCustomTravelerKey, isUpstreamTraveler } from "@/lib/catalog/travelers";
|
|
|
|
describe("custom Traveler catalog", () => {
|
|
it("blacklists every upstream Traveler spelling variant", () => {
|
|
expect(isUpstreamTraveler("Traveler")).toBe(true);
|
|
expect(isUpstreamTraveler(" traveler ")).toBe(true);
|
|
expect(isUpstreamTraveler("TRAVELER")).toBe(true);
|
|
expect(isUpstreamTraveler("Traveler Pyro")).toBe(false);
|
|
});
|
|
|
|
it("defines seven distinct element records with distinct local images", async () => {
|
|
expect(customTravelers).toHaveLength(7);
|
|
expect(new Set(customTravelers.map((traveler) => traveler.key)).size).toBe(7);
|
|
expect(new Set(customTravelers.map((traveler) => traveler.element)).size).toBe(7);
|
|
|
|
const hashes = await Promise.all(customTravelers.map(async (traveler) => {
|
|
const body = await readFile(join(process.cwd(), "lib/catalog/assets", traveler.asset));
|
|
return createHash("sha256").update(body).digest("hex");
|
|
}));
|
|
expect(new Set(hashes).size).toBe(7);
|
|
});
|
|
|
|
it("marks every custom Traveler as a five-star character", () => {
|
|
expect(customTravelers.every((traveler) => traveler.rarity === 5)).toBe(true);
|
|
expect(isCustomTravelerKey("traveler_hydro")).toBe(true);
|
|
expect(isCustomTravelerKey("traveler_unknown")).toBe(false);
|
|
});
|
|
|
|
it("uses element-first display names without changing stable keys", () => {
|
|
expect(customTravelers.map(({ key, name }) => ({ key, name }))).toEqual([
|
|
{ key: "traveler_pyro", name: "Pyro Traveler" },
|
|
{ key: "traveler_hydro", name: "Hydro Traveler" },
|
|
{ key: "traveler_anemo", name: "Anemo Traveler" },
|
|
{ key: "traveler_geo", name: "Geo Traveler" },
|
|
{ key: "traveler_electro", name: "Electro Traveler" },
|
|
{ key: "traveler_dendro", name: "Dendro Traveler" },
|
|
{ key: "traveler_cryo", name: "Cryo Traveler" },
|
|
]);
|
|
});
|
|
});
|