Files
buzz-sheet/lib/commission/request.test.ts
T
gunshiz 2517982a27
CI / Verify (push) Successful in 2m4s
CI / Build immutable images and deploy (push) Successful in 3m8s
feat : also update
2026-10-01 19:47:02 +07:00

71 lines
4.1 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { commissionPrice, commissionRequestSchema } from "./request";
const request = {
teams: [{ members: ["a", "b", "c", "d"].map((characterKey) => ({
characterKey, weaponKey: `weapon-${characterKey}`, artifactKey: "artifact",
})) }],
weapons: [{ characterKey: "a", weaponKeys: ["weapon-a", "weapon-b", "weapon-c"] }],
constellations: [{ characterKey: "a", levels: [0, 2] }],
};
describe("commission request pricing and shape", () => {
it("accepts one complete team without either comparison type", () => {
const teamOnly = { teams: request.teams, weapons: [], constellations: [] };
const parsed = commissionRequestSchema.safeParse(teamOnly);
expect(parsed.success).toBe(true);
if (parsed.success) {
expect(commissionPrice(parsed.data)).toBe(100);
expect(parsed.data.teams[0].members[0]).toMatchObject({ constellation: "0", refinement: "1" });
}
});
it("keeps selected team constellation and refinement ranges", () => {
const selected = { ...request, teams: [{ members: request.teams[0].members.map((member, index) =>
index === 0 ? { ...member, constellation: "0-6", refinement: "1-5" } : member) }] };
expect(commissionRequestSchema.parse(selected).teams[0].members[0]).toMatchObject({
constellation: "0-6", refinement: "1-5",
});
expect(commissionRequestSchema.safeParse({ ...selected, teams: [{ members: selected.teams[0].members.map((member, index) =>
index === 0 ? { ...member, refinement: "6" } : member) }] }).success).toBe(false);
});
it("keeps each compared weapon's refinement and defaults older requests to R1", () => {
const selected = { ...request, weapons: [{ characterKey: "a", weaponKeys: ["weapon-a", "weapon-b"],
refinements: { "weapon-a": "5", "weapon-b": "2" } }] };
expect(commissionRequestSchema.parse(selected).weapons[0].refinements).toEqual({
"weapon-a": "5", "weapon-b": "2",
});
expect(commissionPrice(commissionRequestSchema.parse(selected))).toBe(180);
expect(commissionRequestSchema.parse(request).weapons[0].refinements).toBeUndefined();
expect(commissionRequestSchema.safeParse({ ...selected, weapons: [{ ...selected.weapons[0],
refinements: { "weapon-a": "6" } }] }).success).toBe(false);
expect(commissionRequestSchema.safeParse({ ...selected, weapons: [{ ...selected.weapons[0],
refinements: { "weapon-c": "3" } }] }).success).toBe(false);
});
it("prices independent request types together", () => {
expect(commissionPrice(commissionRequestSchema.parse(request))).toBe(200);
expect(commissionPrice(commissionRequestSchema.parse({ teams: [], weapons: [],
constellations: [{ characterKey: "a", levels: [0, 1] }] }))).toBe(140);
expect(commissionPrice(commissionRequestSchema.parse({ teams: [], weapons: [],
constellations: [{ characterKey: "a", levels: [0] }] }))).toBe(120);
expect(commissionPrice(commissionRequestSchema.parse({ teams: [], weapons: [
{ characterKey: "a", weaponKeys: ["weapon-a", "weapon-b"] },
], constellations: [] }))).toBe(140);
expect(commissionPrice({ teams: [], weapons: [{ characterKey: "a", weaponKeys: ["weapon-a", "", ""] }],
constellations: [] })).toBe(120);
expect(commissionPrice(commissionRequestSchema.parse({ teams: request.teams.concat(request.teams),
weapons: [], constellations: [] }))).toBe(200);
expect(commissionPrice({ teams: [], weapons: [], constellations: [] })).toBe(0);
});
it("requires four distinct team characters and valid comparison choices", () => {
expect(commissionRequestSchema.safeParse({ ...request, teams: [{ members: [
...request.teams[0].members.slice(0, 3), request.teams[0].members[0],
] }] }).success).toBe(false);
expect(commissionRequestSchema.safeParse({ ...request,
weapons: [{ characterKey: "a", weaponKeys: ["weapon-a"] }] }).success).toBe(false);
expect(commissionRequestSchema.safeParse({ ...request,
constellations: [{ characterKey: "a", levels: [0, 0] }] }).success).toBe(false);
expect(commissionRequestSchema.safeParse({ ...request,
constellations: [{ characterKey: "a", levels: [] }] }).success).toBe(false);
});
});