import { test } from 'node:test' import assert from 'node:assert/strict' import { PREVIEW_RUNNER_ATTRIBUTES, main } from '../scripts/preview-runner-setup.mjs' import { config } from '../server/config.js' function mockClient(existing = []) { const created = [] return { created, async listAttributes() { return existing.map((key) => ({ key })) }, async createAttribute(attr) { created.push(attr.key) }, async waitForAttribute() {}, } } test('Schema: genau die 8 Attribute mit Groessen, alle optional', () => { assert.deepEqual( PREVIEW_RUNNER_ATTRIBUTES.map((a) => a.key), ['previewMode', 'previewEnv', 'previewState', 'previewDetected', 'previewBuiltSha', 'previewBranch', 'previewBuiltAt', 'previewError'] ) assert.ok(PREVIEW_RUNNER_ATTRIBUTES.every((a) => a.required === false && a.type === 'string')) const sizes = Object.fromEntries(PREVIEW_RUNNER_ATTRIBUTES.map((a) => [a.key, a.size])) assert.deepEqual(sizes, { previewMode: 10, previewEnv: 20000, previewState: 20, previewDetected: 40, previewBuiltSha: 40, previewBranch: 100, previewBuiltAt: 40, previewError: 500, }) }) test('main legt nur fehlende Attribute an', async () => { const client = mockClient(['previewMode']) const result = await main({ check: false, client, log: () => {} }) assert.equal(client.created.length, 7) assert.ok(!client.created.includes('previewMode')) assert.equal(result.missing.length, 7) }) test('main --check legt nichts an und meldet Fehlende', async () => { const client = mockClient(['previewMode']) const result = await main({ check: true, client, log: () => {} }) assert.equal(client.created.length, 0) assert.equal(result.missing.length, 7) }) test('Konfiguration: previewRunner ist standardmaessig aus', () => { assert.equal(config.previewRunner.enabled, false) assert.equal(config.previewRunner.url, 'http://webklar-preview-runner:8080') assert.equal(config.previewRunner.token, '') })