Release v0.1.17 2026-07-19
This commit is contained in:
@@ -5,6 +5,8 @@ import {
|
||||
createRpgRoguelikeRun,
|
||||
createRunGearItem,
|
||||
moveRpgFocus,
|
||||
partyCompositionLabel,
|
||||
partyRolePresentation,
|
||||
reduceRpgRoguelikeRun,
|
||||
rpgFocusId,
|
||||
rpgFocusItems,
|
||||
@@ -27,6 +29,27 @@ function reachSpellDraft(seed = 810): RpgRoguelikeRunState {
|
||||
}
|
||||
|
||||
describe("RPG Roguelike semantic UI focus", () => {
|
||||
it("presents party roles as Tank/DPS and summarizes duplicate tanks", () => {
|
||||
expect(partyRolePresentation("Tank")).toEqual({ label: "Tank", icon: "⬡", className: "tank" });
|
||||
expect(partyRolePresentation("Damage")).toEqual({ label: "DPS", icon: "⚔", className: "damage" });
|
||||
expect(partyCompositionLabel([
|
||||
{ role: "Tank" },
|
||||
{ role: "Tank" },
|
||||
{ role: "Damage" },
|
||||
{ role: "Damage" },
|
||||
])).toBe("2 Tanks · 2 DPS");
|
||||
});
|
||||
|
||||
it("includes each party role in controller action labels", () => {
|
||||
const state = createRpgRoguelikeRun({ seed: 19 });
|
||||
const labels = new Map(rpgFocusItems(state).map((item) => [item.id, item.label]));
|
||||
for (const candidate of state.partyDraft!.offers) {
|
||||
expect(labels.get(rpgFocusId.partyOffer(candidate.candidateId))).toBe(
|
||||
`Recruit ${candidate.name}, ${partyRolePresentation(candidate.role).label}`,
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
it("moves horizontally within card rows and vertically between action groups", () => {
|
||||
let state = createRpgRoguelikeRun({ seed: 120 });
|
||||
const offers = state.partyDraft!.offers;
|
||||
|
||||
Reference in New Issue
Block a user