feat(guides) : add team transfer and visibility controls
This commit is contained in:
@@ -2,9 +2,12 @@ import { describe, expect, it } from "vitest";
|
||||
|
||||
import {
|
||||
applyTeamFields,
|
||||
findInvalidTeamCatalogReference,
|
||||
findUnsupportedTeamWeapon,
|
||||
limitPresets,
|
||||
parseTeamTransfer,
|
||||
parseTeamPresets,
|
||||
serializeTeamTransfer,
|
||||
type TeamToolValue,
|
||||
} from "./team-tools";
|
||||
|
||||
@@ -47,6 +50,50 @@ describe("team bulk tools", () => {
|
||||
expect(result[1].members.slice(1)).toEqual(target.members.slice(1));
|
||||
});
|
||||
|
||||
it("applies fields to the matching character in a different slot", () => {
|
||||
const source = team("source");
|
||||
const target = team("target");
|
||||
source.members[1] = {
|
||||
...source.members[1],
|
||||
characterKey: "nicole",
|
||||
weaponKey: "source-weapon",
|
||||
};
|
||||
target.members[3] = {
|
||||
...target.members[3],
|
||||
characterKey: "nicole",
|
||||
weaponKey: "old-weapon",
|
||||
};
|
||||
|
||||
const result = applyTeamFields(
|
||||
[source, target],
|
||||
"source",
|
||||
new Set(["target"]),
|
||||
["member:1:weaponKey"],
|
||||
);
|
||||
|
||||
expect(result[1].members[3].weaponKey).toBe("source-weapon");
|
||||
expect(result[1].members[1]).toEqual(target.members[1]);
|
||||
});
|
||||
|
||||
it("falls back to the same slot when the character is not present", () => {
|
||||
const source = team("source");
|
||||
const target = team("target");
|
||||
source.members[1] = {
|
||||
...source.members[1],
|
||||
characterKey: "nicole",
|
||||
refinement: 5,
|
||||
};
|
||||
|
||||
const result = applyTeamFields(
|
||||
[source, target],
|
||||
"source",
|
||||
new Set(["target"]),
|
||||
["member:1:refinement"],
|
||||
);
|
||||
|
||||
expect(result[1].members[1].refinement).toBe(5);
|
||||
});
|
||||
|
||||
it("detects an unsupported character and weapon after bulk apply", () => {
|
||||
const target = team("target");
|
||||
target.members[0] = {
|
||||
@@ -74,4 +121,56 @@ describe("team bulk tools", () => {
|
||||
expect(parseTeamPresets("not-json")).toEqual([]);
|
||||
expect(parseTeamPresets(JSON.stringify([{ id: 1 }]))).toEqual([]);
|
||||
});
|
||||
|
||||
it("round-trips every exported team field without the client id", () => {
|
||||
const source = team("source", "Ineffa Exai");
|
||||
source.rotationSeconds = "21.5";
|
||||
source.members[0] = {
|
||||
...source.members[0],
|
||||
weaponKey: "weapon-1",
|
||||
artifactKey: "artifact-1",
|
||||
secondArtifactKey: "artifact-2",
|
||||
constellation: 2,
|
||||
refinement: 4,
|
||||
damage: "123456.78",
|
||||
};
|
||||
|
||||
expect(parseTeamTransfer(serializeTeamTransfer(source))).toEqual({
|
||||
title: source.title,
|
||||
rotationSeconds: source.rotationSeconds,
|
||||
combo: source.combo,
|
||||
members: source.members,
|
||||
});
|
||||
});
|
||||
|
||||
it("rejects malformed and unsupported team transfers", () => {
|
||||
expect(() => parseTeamTransfer("not-json")).toThrow();
|
||||
expect(() => parseTeamTransfer(JSON.stringify({
|
||||
type: "buzz-sheet.team",
|
||||
version: 2,
|
||||
team: team("source"),
|
||||
}))).toThrow();
|
||||
});
|
||||
|
||||
it("reports missing and incompatible imported catalog references", () => {
|
||||
const source = team("source");
|
||||
source.members[0] = {
|
||||
...source.members[0],
|
||||
characterKey: "varka",
|
||||
weaponKey: "wolf-fang",
|
||||
};
|
||||
const imported = { ...source, clientId: undefined as never };
|
||||
const characters = [
|
||||
{ key: "varka", name: "Varka", weaponType: "WEAPON_CLAYMORE" },
|
||||
...source.members.slice(1).map((member) => ({ key: member.characterKey, name: member.characterKey })),
|
||||
];
|
||||
|
||||
expect(findInvalidTeamCatalogReference(
|
||||
imported,
|
||||
characters,
|
||||
[{ key: "wolf-fang", name: "Wolf-Fang", weaponType: "WEAPON_SWORD_ONE_HAND" }],
|
||||
[],
|
||||
)).toBe("Varka ไม่รองรับอาวุธ Wolf-Fang");
|
||||
expect(findInvalidTeamCatalogReference(imported, [], [], [])).toContain("ไม่พบตัวละคร");
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user