diff --git a/test/jest/Bladeburner/BladeburnerConsole.test.ts b/test/jest/Bladeburner/BladeburnerConsole.test.ts new file mode 100644 index 000000000..63a459848 --- /dev/null +++ b/test/jest/Bladeburner/BladeburnerConsole.test.ts @@ -0,0 +1,93 @@ +import type { Bladeburner } from "../../../src/Bladeburner/Bladeburner"; +import { Player, setPlayer } from "@player"; +import { PlayerObject } from "../../../src/PersonObjects/Player/PlayerObject"; +import { BladeburnerContractName } from "@enums"; +import { Contract } from "../../../src/Bladeburner/Actions"; + +describe("Bladeburner Console", () => { + let inst: Bladeburner; + + function initBladeburner(player: PlayerObject): player is PlayerObject & { bladeburner: Bladeburner } { + player.init(); + player.startBladeburner(); + return true; + } + + beforeEach(() => { + setPlayer(new PlayerObject()); + if (initBladeburner(Player)) { + inst = Player.bladeburner; + inst.clearConsole(); + } + }); + + it("May concatenate multiple commands with ';'", () => { + inst.startAction(Contract.createId(BladeburnerContractName.Tracking)); + execute("stop;start contract Retirement;help cls;"); + expect(inst.consoleLogs).not.toContainEqual("Invalid console command"); + }); + + describe.each(["skill", "start", "help", "log", "automate"])("%s", (cmd: string) => { + it("provides valid console feedback", () => { + execute(cmd); + expect(inst.consoleLogs.length).toBeGreaterThan(0); + expect(inst.consoleLogs).not.toContainEqual("Invalid console command"); + }); + }); + + describe.each(["skill", "start", "help", "log", "automate", "clear", "stop"])("%s", (cmd: string) => { + it("provides help", () => { + execute(`help ${cmd}`); + expect(inst.consoleLogs.length).toBeGreaterThan(0); + }); + }); + + describe.each(["cls", "clear"])("%s", (cmd: string) => { + it("wipes logs clean", () => { + execute("help"); + execute(cmd); + expect(inst.consoleLogs).toHaveLength(0); + }); + }); + + describe("start", () => { + it("starts bladeburner action", () => { + execute("start contract Tracking"); + expect(inst.action).toMatchObject(Contract.createId(BladeburnerContractName.Tracking)); + }); + }); + + describe("stop", () => { + it("clears current action", () => { + inst.startAction(Contract.createId(BladeburnerContractName.Tracking)); + execute("stop"); + expect(inst.action).toBeNull(); + }); + }); + + describe("automate", () => { + it("sets high threshold", () => { + execute("automate stamina 100 high"); + expect(inst.automateThreshHigh).toBe(100); + }); + + it("sets low threshold", () => { + execute("automate stamina 50 low"); + expect(inst.automateThreshLow).toBe(50); + }); + + it("queues action at high threshold", () => { + execute("automate contract Tracking high"); + expect(inst.automateActionHigh).toMatchObject(Contract.createId(BladeburnerContractName.Tracking)); + }); + + it("queues action at low threshold", () => { + execute("automate contract Tracking low"); + expect(inst.automateActionLow).toMatchObject(Contract.createId(BladeburnerContractName.Tracking)); + }); + }); + + function execute(cmd: string) { + inst.executeConsoleCommands(cmd); + } +});