import assert from 'node:assert/strict'; import express from 'express'; import test from 'node:test'; import { attachPortalTemplateCatalogRoutes } from './portal-template-catalog-routes.mjs'; function createApp({ catalog, enabled = true }) { const app = express(); app.use(express.json()); app.use((req, _res, next) => { req.currentUser = { id: 'user-1' }; next(); }); attachPortalTemplateCatalogRoutes(app, { getTemplateCatalog: () => catalog, ensureMindSpaceEnabled: (res) => { if (!enabled) { res.status(503).json({ error: { code: 'disabled', message: 'disabled' } }); return false; } return true; }, }); return app; } async function request(app, method, url, body) { const server = app.listen(0); try { const { port } = server.address(); const response = await fetch(`http://127.0.0.1:${port}${url}`, { method, headers: body ? { 'Content-Type': 'application/json' } : undefined, body: body ? JSON.stringify(body) : undefined, }); const json = await response.json(); return { status: response.status, json }; } finally { await new Promise((resolve, reject) => server.close((err) => (err ? reject(err) : resolve()))); } } test('GET /mindspace/v1/template-catalog returns catalog items', async () => { const app = createApp({ catalog: { async listCatalogForUser(userId) { assert.equal(userId, 'user-1'); return [{ skillName: 'page-template-travel', owned: false, priceCents: 990 }]; }, }, }); const { status, json } = await request(app, 'GET', '/mindspace/v1/template-catalog'); assert.equal(status, 200); assert.equal(json.data.items[0].skillName, 'page-template-travel'); }); test('GET template preview returns html', async () => { const app = createApp({ catalog: { async getTemplatePreviewHtml(skillName) { assert.equal(skillName, 'page-template-travel'); return { ok: true, html: '