import { test } from 'node:test'; import assert from 'node:assert/strict'; import { serviceConfig, createIndustryService } from '../server/industry-service.mjs'; test('production service requires one explicit data binding and a server-side token', () => { assert.throws(() => serviceConfig({}), /TOKEN_REQUIRED/); assert.throws(() => serviceConfig({ KSF_LIBRARY_API_TOKEN: 'test' }), /ONE_DATA_BINDING/); assert.throws(() => serviceConfig({ KSF_LIBRARY_API_TOKEN: 'test', KSF_VOC_DB: 'a', KSF_INDUSTRY_SNAPSHOT: 'b' }), /ONE_DATA_BINDING/); assert.throws(() => serviceConfig({ KSF_LIBRARY_API_TOKEN: 'test', KSF_VOC_DB: 'a', KSF_INDUSTRY_PORT: 'NaN' }), /INVALID_INDUSTRY_PORT/); assert.equal(serviceConfig({ KSF_LIBRARY_API_TOKEN: 'test', KSF_VOC_DB: 'a' }).port, 4190); }); test('standalone service has no static-file, collection, admin or generic proxy route', async () => { const server = createIndustryService({ token: 'test', snapshot: 'not-read' }); await new Promise(resolve => server.listen(0, '127.0.0.1', resolve)); try { const base = `http://127.0.0.1:${server.address().port}`; for (const route of ['/api/collect', '/admin', '/api/industry?path=x']) { assert.equal((await fetch(base + route)).status, 404); } assert.equal((await fetch(base + '/api/industry', { method: 'POST', body: '{}' })).status, 401); } finally { await new Promise(resolve => server.close(resolve)); } });