Initial Commit
Some checks failed
Deploy Sokko G / deploy (push) Failing after 3s

This commit is contained in:
Shinuwa 2026-07-20 23:10:37 +02:00
parent fbfc3430a0
commit 1e1ede6cf0
207 changed files with 12220 additions and 0 deletions

108
tests/static-smoke.test.mjs Normal file
View file

@ -0,0 +1,108 @@
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 id="app"><\/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");
});