import assert from "node:assert/strict"; import test from "node:test"; import { createControlCoreApp } from "../src/app.mjs"; const managementToken = "test-only-management-token-with-32-bytes"; const identifierPepper = "test-only-identifier-pepper-with-32-bytes"; const projectId = "11111111-1111-4111-8111-111111111111"; test("management API forwards a canonical asset command", async () => { let executed; const runtime = await startServer({ executeManagementCommand: async (input) => { executed = input; return { replayed: false, result: { created: true } }; }, }); try { const response = await fetch(`${runtime.baseUrl}/internal/v1/management/assets:ensure`, { method: "POST", headers: managementHeaders("ontology-asset-0001"), body: JSON.stringify({ projectRef: `project:${projectId}`, assetKey: "trike-001", displayName: "Trike 001", assetTypeRef: "asset-type:delivery-trike", }), }); assert.equal(response.status, 200); assert.equal(executed.commandKind, "asset.ensure"); assert.equal(executed.command.assetKey, "trike-001"); } finally { await runtime.close(); } }); test("query API exposes the ontology projection through Core", async () => { let actor; const runtime = await startServer({ getProjectOntologyProjection: async (value, requestedProjectId) => { actor = value; assert.equal(requestedProjectId, projectId); return { ontology: { catalogHash: "229c61c02a790906" }, assets: [], hosts: [], }; }, }); try { const response = await fetch( `${runtime.baseUrl}/internal/v1/query/projects/${projectId}/ontology`, { headers: managementHeaders("ontology-query-0001") }, ); const body = await response.json(); assert.equal(response.status, 200); assert.equal(body.projection.ontology.catalogHash, "229c61c02a790906"); assert.equal(actor.userRef, "user:test-owner"); } finally { await runtime.close(); } }); async function startServer(repositoryOverrides) { const server = createControlCoreApp({ managementApiEnabled: true, managementToken, identifierPepper, repository: { health: async () => "ready", executeManagementCommand: async () => ({ replayed: false, result: {} }), ...repositoryOverrides, }, }); await new Promise((resolve, reject) => { server.once("error", reject); server.listen(0, "127.0.0.1", resolve); }); const address = server.address(); return { baseUrl: `http://127.0.0.1:${address.port}`, close: () => new Promise((resolve, reject) => server.close((error) => error ? reject(error) : resolve())), }; } function managementHeaders(idempotencyKey) { return { Authorization: `Bearer ${managementToken}`, "Content-Type": "application/json", "Idempotency-Key": idempotencyKey, "X-NODEDC-User-Ref": "user:test-owner", "X-NODEDC-Hub-Role": "owner", "X-NODEDC-Group-Refs": "", "X-NODEDC-Owner-Scopes": "company=organization:test", }; }