1import test from 'node:test';2import assert from 'node:assert/strict';3import { readFile } from 'node:fs/promises';4import { fileURLToPath } from 'node:url';5import { loadMod, CURRENT_RULES_VERSION } from '../src/mods.js';6import { BUNDLED_WORLD_FILES } from '../src/bundled-world-order.js';78const root = fileURLToPath(new URL('../', import.meta.url));9const approved = ['crossword.cjs', 'crate-works.cjs', 'tidewater.cjs'];1011test('approved bundled world order is stable and each source loads at current rules', async () => {12 assert.deepEqual(BUNDLED_WORLD_FILES, approved);13 const loaded = [];14 for (const filename of BUNDLED_WORLD_FILES) {15 const source = await readFile(`${root}/mods/worlds/${filename}`, 'utf8');16 const mod = loadMod(source, { filename });17 loaded.push({ filename, id: mod.manifest.id, rules: mod.manifest.rules });18 }19 assert.deepEqual(loaded, [20 { filename: 'crossword.cjs', id: 'crossword', rules: CURRENT_RULES_VERSION },21 { filename: 'crate-works.cjs', id: 'crate-works', rules: CURRENT_RULES_VERSION },22 { filename: 'tidewater.cjs', id: 'tidewater', rules: CURRENT_RULES_VERSION },23 ]);24});2526test('garden basics and word lab remain separate importable packs', async () => {27 for (const [filename, id] of [['garden-basics.cjs', 'garden-basics'], ['word-lab.cjs', 'word-lab']]) {28 const source = await readFile(`${root}/mods/${filename}`, 'utf8');29 assert.equal(loadMod(source, { filename }).manifest.id, id);30 }31});