import { test } from "node:test"; import assert from "node:assert/strict"; import { existsSync, mkdirSync, writeFileSync } from "node:fs"; import { join } from "node:path"; import { run, copyFixture, fixtures } from "./helpers.mjs"; const env = { COURSE_ROOT: join(fixtures, "course") }; test("start_module_copies_tests", () => { const ws = copyFixture("ws-start"); const r = run("start-module.mjs", ["01", ws], env); assert.equal(r.code, 0, r.out); assert.ok(existsSync(join(ws, "tests/m01.rs"))); assert.match(r.out, /newGame, summon, play/); }); test("start_module_copies_course_cards", () => { const ws = copyFixture("ws-start"); const r = run("start-module.mjs", ["01", ws], env); assert.equal(r.code, 0, r.out); assert.ok(existsSync(join(ws, "cards/test-fixture.json"))); }); test("start_module_copies_module_cards_up_to_the_module", () => { const early = copyFixture("ws-start"); assert.equal(run("start-module.mjs", ["01", early], env).code, 0); assert.ok(existsSync(join(early, "cards/test-fixture.json"))); assert.ok(!existsSync(join(early, "cards/module-fixture.json"))); const later = copyFixture("ws-start"); mkdirSync(join(later, "tests"), { recursive: true }); writeFileSync(join(later, "tests/m02.rs"), ""); const r = run("start-module.mjs", ["03", later], env); assert.equal(r.code, 0, r.out); assert.ok(existsSync(join(later, "cards/test-fixture.json"))); assert.ok(existsSync(join(later, "cards/module-fixture.json"))); }); test("start_module_copies_module_levels", () => { const ws = copyFixture("ws-start"); mkdirSync(join(ws, "tests"), { recursive: true }); writeFileSync(join(ws, "tests/m02.rs"), ""); const r = run("start-module.mjs", ["03", ws], env); assert.equal(r.code, 0, r.out); assert.ok(existsSync(join(ws, "levels/fixture-level.json"))); }); test("start_module_uses_track", () => { const ws = copyFixture("ws-start-ts"); assert.equal(run("start-module.mjs", ["01", ws], env).code, 0); assert.ok(existsSync(join(ws, "tests/m01.test.ts"))); assert.ok(!existsSync(join(ws, "tests/m01.rs"))); }); test("start_module_accepts_when_previous_present", () => { const ws = copyFixture("ws-start"); mkdirSync(join(ws, "tests"), { recursive: true }); writeFileSync(join(ws, "tests/m02.rs"), ""); const r = run("start-module.mjs", ["03", ws], env); assert.equal(r.code, 0, r.out); assert.ok(existsSync(join(ws, "tests/m03.rs"))); }); test("start_module_refuses_skipping", () => { const ws = copyFixture("ws-start"); mkdirSync(join(ws, "tests"), { recursive: true }); writeFileSync(join(ws, "tests/m01.rs"), ""); const r = run("start-module.mjs", ["03", ws], env); assert.equal(r.code, 1); assert.match(r.out, /finish module 02 first/); assert.ok(!existsSync(join(ws, "tests/m03.rs"))); }); test("start_module_00_not_startable", () => { const ws = copyFixture("ws-start"); const r = run("start-module.mjs", ["00", ws], env); assert.notEqual(r.code, 0); assert.match(r.out, /naive-engine/); });