industry-service.test.js 1.4 KB

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