const { test } = require('node:test'); const assert = require('node:assert'); const { parseEnvString, extractPortalMeta } = require('../src/portalMeta'); test('parseEnvString parses KEY=VALUE lines and skips comments/blank lines', () => { const result = parseEnvString('PORT=3000\n# comment\n\nNAME="quoted value"\n'); assert.deepStrictEqual(result, { PORT: '3000', NAME: 'quoted value' }); }); test('parseEnvString returns {} for null or empty input', () => { assert.deepStrictEqual(parseEnvString(null), {}); assert.deepStrictEqual(parseEnvString(''), {}); }); test('extractPortalMeta returns null when PORTAL_APP_TYPE is missing or invalid', () => { assert.strictEqual(extractPortalMeta('PORT=3000', 'fallback'), null); assert.strictEqual(extractPortalMeta('PORTAL_APP_TYPE=invalid', 'fallback'), null); assert.strictEqual(extractPortalMeta(null, 'fallback'), null); }); test('extractPortalMeta parses a web-type app, falling back to label when PORTAL_APP_LABEL is absent', () => { const meta = extractPortalMeta('PORTAL_APP_TYPE=web\nPORTAL_APP_URL=https://x.apps.next-hd.net', 'x'); assert.deepStrictEqual(meta, { appType: 'web', label: 'x', url: 'https://x.apps.next-hd.net', triggerPath: null, rangeOptions: null, }); }); test('extractPortalMeta parses a batch-type app with PORTAL_TRIGGER_PATH', () => { const meta = extractPortalMeta( 'PORTAL_APP_TYPE=batch\nPORTAL_APP_LABEL=同期バッチ\nPORTAL_APP_URL=http://sample:3000\nPORTAL_TRIGGER_PATH=/trigger', 'fallback' ); assert.deepStrictEqual(meta, { appType: 'batch', label: '同期バッチ', url: 'http://sample:3000', triggerPath: '/trigger', rangeOptions: null, }); }); test('extractPortalMeta parses PORTAL_TRIGGER_RANGE_OPTIONS into an array', () => { const meta = extractPortalMeta( 'PORTAL_APP_TYPE=batch\nPORTAL_APP_URL=http://sample:3000\nPORTAL_TRIGGER_PATH=/trigger\nPORTAL_TRIGGER_RANGE_OPTIONS=today, week ,all', 'fallback' ); assert.deepStrictEqual(meta.rangeOptions, ['today', 'week', 'all']); });