import {
AvailableFreeAction,
Booster,
FreeAction,
freeActionConversions,
Player,
PlayerData,
Power,
} from "@gaia-project/engine";
import { expect } from "chai";
import { WarningWithKey } from "../../data";
import { freeActionButton } from "./conversion";
import { boosterWarning } from "./pass";
import { withShortcut } from "./shortcuts";
describe("commands", () => {
it("should assign shortcut for free action", () => {
const avail: AvailableFreeAction = freeActionConversions[FreeAction.PowerToOreAndCredit];
const playerData = new PlayerData();
playerData.tokenModifier = 2;
const button = freeActionButton({ acts: [avail] }, { data: playerData } as Player);
expect(button).to.deep.equal({
buttons: [
{
command: "spend 4pw for 1o,1c",
richText: [
{
rewards: [
{
count: 2,
type: "pay-pw",
},
],
},
{
text: "arrow",
},
{
rewards: [
{
count: 1,
type: "o",
},
{
count: 1,
type: "c",
},
],
},
],
label: "",
longLabel: "4 Power Charges ⇒ 1 Ore and 1 Credit",
shortcuts: ["i"],
times: undefined,
tooltip: "4 Power Charges ⇒ 1 Ore and 1 Credit",
warning: null,
},
],
tooltips: {
o: "4 Power Charges ⇒ 1 Ore and 1 Credit",
},
});
});
it("should add shortcut underline", () => {
const s = withShortcut("5 Power Charges => 2 Terraforming steps", "e", ["Power Charges", "Terraforming"]);
expect(s).to.equal("5 Power Charges => 2 Terraforming steps");
});
describe("booster warnings", () => {
const tests: {
name: string;
power: Power;
ores: number;
booster: Booster;
warnings: WarningWithKey[] | null;
}[] = [
{
name: "no warnings - o booster",
power: new Power(0, 0, 1),
ores: 14,
booster: Booster.Booster1,
warnings: undefined,
},
{
name: "no warnings - 4pw booster",
power: new Power(1, 2, 0),
ores: 15,
booster: Booster.Booster9,
warnings: undefined,
},
{
name: "warnings - o booster",
power: new Power(0, 0, 1),
ores: 15,
booster: Booster.Booster1,
warnings: [
{
disableKey: "resource-waste",
message: "1o will be wasted during income phase.",
},
],
},
{
name: "warnings - 4pw booster",
power: new Power(1, 1, 0),
ores: 15,
booster: Booster.Booster9,
warnings: [
{
disableKey: "resource-waste",
message: "1 power charges will be wasted during income phase.",
},
],
},
];
for (const test of tests) {
it(test.name, () => {
const player = new Player();
player.data.power = test.power;
player.data.ores = test.ores;
const buttonWarning = boosterWarning(player, test.booster);
expect(buttonWarning?.body).to.deep.equal(test.warnings);
});
}
});
});