import { readFile } from "node:fs/promises"; import { test } from "node:test"; import assert from "node:assert/strict"; test("static entrypoint loads the application assets", async () => { const html = await readFile("website/public/index.html", "utf8"); assert.match(html, /
<\/div>/); assert.match(html, /\/favicon\.ico/); assert.match(html, /\/src\/app\.js/); assert.match(html, /\/src\/styles\.css/); }); test("application defines the expected local toolbox primitives", async () => { const source = await readFile("website/src/app.js", "utf8"); assert.match(source, /sokkog:toolboxes/); assert.match(source, /sokkog:game-toolbox-links/); assert.match(source, /DEFAULT_SITE_CONTENT/); assert.match(source, /function loadSiteContent/); assert.match(source, /\/data\/site\.json/); assert.match(source, /APP_STORAGE_LIMIT_BYTES/); assert.match(source, /function renderStorageQuota/); assert.match(source, /function writeStorageValue/); assert.match(source, /role="progressbar"/); assert.match(source, /export-all-toolboxes/); assert.match(source, /import-all-toolboxes/); assert.match(source, /function createGlobalExportPayload/); assert.match(source, /function importAllToolboxes/); assert.match(source, /open-link-toolbox-modal/); assert.match(source, /function showToolboxLinkModal/); assert.match(source, /data-game-id/); assert.match(source, /notepad/); assert.match(source, /checklist/); assert.match(source, /screenshots/); assert.doesNotMatch(source, /description: _description/); assert.match(source, /function showToolboxCreateModal/); assert.match(source, /data-action="toolbox-create-form"/); assert.match(source, /function getToolboxGameId/); assert.match(source, /dragon\.png/); assert.match(source, /const game = getToolboxGame\(toolbox\)/); assert.match(source, /moduleColumns/); assert.match(source, /data-action="set-module-layout"/); assert.match(source, /data-action="edit-toolbox-title"/); assert.match(source, /function renderToolboxModules/); assert.match(source, /function moveToolboxModule/); assert.match(source, /dragstart/); assert.match(source, /qtyTarget/); assert.match(source, /qtyCurrent/); assert.match(source, /adjust-check-qty/); assert.match(source, /paste-screenshot/); assert.match(source, /clipboardData/); assert.match(source, /function addScreenshotFiles/); assert.match(source, /view-screenshot/); assert.match(source, /function showScreenshotViewer/); assert.match(source, /drop-screenshot/); assert.match(source, /dataTransfer\.files/); }); test("mhwilds data and assets are available", async () => { const site = JSON.parse(await readFile("website/public/data/site.json", "utf8")); const games = JSON.parse(await readFile("website/public/data/games.json", "utf8")); const monsters = JSON.parse(await readFile("website/public/data/mhwilds/monsters.json", "utf8")); const endemicLife = JSON.parse(await readFile("website/public/data/mhwilds/endemic_life.json", "utf8")); const translations = JSON.parse(await readFile("website/public/data/mhwilds/i18n/fr.json", "utf8")); const appSource = await readFile("website/src/app.js", "utf8"); assert.equal(site.brand.name, "Sokko G"); assert.equal(site.home.hero.title, "Sokko G"); assert.ok(site.toolboxes.storageHelp.items.length >= 3); assert.equal(games.games[0].id, "mhwilds"); assert.equal(games.games[0].eyebrow, "Guide de jeu"); assert.match(games.games[0].image, /mhwilds\.png/); assert.ok(monsters.monsters.length > 0); assert.ok(endemicLife.endemicLife.length > 0); assert.equal(translations.monsters, "monstres"); assert.match(appSource, /renderMhwildsListing/); assert.match(appSource, /flip-monster-card/); await readFile("website/public/static/img/mhwilds/chatacabra.png"); }); test("server supports local env configuration", async () => { const server = await readFile("server.mjs", "utf8"); const envExample = await readFile(".env.example", "utf8"); assert.match(server, /function loadEnvFile/); assert.match(server, /process\.env\.PORT/); assert.match(envExample, /PORT=5173/); }); test("legacy svg icons are available for reuse", async () => { const manifest = JSON.parse(await readFile("website/public/data/toolbox-icons.json", "utf8")); assert.ok(manifest.icons.length >= 4); await readFile("website/public/static/icons/home.svg", "utf8"); await readFile("website/public/static/icons/checklist.svg", "utf8"); await readFile("website/public/static/icons/close.svg", "utf8"); await readFile("website/public/static/icons/columns.svg", "utf8"); await readFile("website/public/static/icons/export.svg", "utf8"); await readFile("website/public/static/icons/notepad.svg", "utf8"); await readFile("website/public/static/icons/picture.svg", "utf8"); await readFile("website/public/static/icons/rows.svg", "utf8"); await readFile("website/public/static/icons/rubber.svg", "utf8"); await readFile("website/public/static/icons/trashcan.svg", "utf8"); await readFile("website/public/favicon.ico"); await readFile("website/public/static/img/dragon.png"); await readFile("website/public/static/img/toolbox-icons/controller.svg", "utf8"); });