${svg('news')}${pill[0]}
@@ -114,6 +113,7 @@ function analyseTile(projects) {
const a = target && analyseOf(target)
if (!target || a.comingSoon) return soonTile('chart', 'Analyse', ANALYSE_TEXT)
const state = analyseState(a)
+ const devHint = state === 'active' && a.devMode ? `${DEV_HINT}
` : '' const active = projects.filter((p) => analyseState(analyseOf(p)) === 'active').length const pill = state === 'active' ? ['Aktiv', 'on'] : state === 'disabled' ? ['Gesperrt', 'off'] : ['Aus', 'off'] let action diff --git a/test/funktionenTiles.test.js b/test/funktionenTiles.test.js new file mode 100644 index 0000000..edbe3a2 --- /dev/null +++ b/test/funktionenTiles.test.js @@ -0,0 +1,48 @@ +import { test } from 'node:test' +import assert from 'node:assert/strict' +import { readFileSync, writeFileSync, mkdtempSync } from 'node:fs' +import { tmpdir } from 'node:os' +import { join } from 'node:path' +import { pathToFileURL } from 'node:url' + +// public/funktionen.js wirklich laden (der absolute Import /analyse-view.js wird auf die Datei umgeleitet) +const dir = mkdtempSync(join(tmpdir(), 'fn-tiles-')) +const viewUrl = pathToFileURL(new URL('../public/analyse-view.js', import.meta.url).pathname).href +const src = readFileSync(new URL('../public/funktionen.js', import.meta.url), 'utf8').replace("'/analyse-view.js'", `'${viewUrl}'`) +const file = join(dir, 'funktionen.mjs') +writeFileSync(file, src) +const { initFunktionen } = await import(pathToFileURL(file).href) + +const news = { state: 'off' } +const project = (id, analyse) => ({ projectId: id, projectName: `P ${id}`, liveUrl: '', features: { news }, analyse }) +async function render(projects) { + globalThis.fetch = async () => ({ ok: true, status: 200, json: async () => ({ projects }) }) + const root = { innerHTML: '', querySelector: () => null } + await initFunktionen(root) + return root.innerHTML +} +const tile = (html, key) => html.slice(html.indexOf(`data-fn-tile="${key}"`), html.indexOf('