import { beforeEach, describe, it } from "jsr:@std/testing/bdd";
import { GildedRose, Item } from "../app/gilded-rose.ts";
import { assertSnapshot } from "jsr:@std/testing/snapshot";
import { runner } from "./golden-master-text-test.ts";
/**
* This unit test uses [Jest Snapshot](https://goo.gl/fbAQLP).
*
* There are two test cases here with different styles:
*
"foo" is more similar to the unit test from the 'Java' version
* "thirtyDays" is more similar to the TextTest from the 'Java' version
*
* I suggest choosing one style to develop and deleting the other.
*/
describe("Gilded Rose Approval", () => {
let gameConsoleOutput: string;
let originalConsoleLog: (message: any) => void;
let originalProcessArgv: string[];
let main: (...args: any[]) => void;
function gameConsoleLog(msg: string) {
if (msg) {
gameConsoleOutput += msg;
}
gameConsoleOutput += "\n";
}
beforeEach(() => {
// prepare capturing console.log to our own gameConsoleLog.
gameConsoleOutput = "";
originalProcessArgv = Deno.args;
main = runner(gameConsoleLog);
});
it("should foo", async (t) => {
const gildedRose = new GildedRose([new Item("foo", 0, 0)]);
const items = gildedRose.updateQuality();
await assertSnapshot(t, items);
});
it("should thirtyDays", async (t) => {
main(["30"]);
await assertSnapshot(t, gameConsoleOutput);
});
});