大量ファイル処理時のn8nメモリ枯渇対策として、SplitInBatches(1件ずつ)で SSHダウンロード→base64化→プリザンター登録を直列化(n8n側、API経由で反映済み)。 Webhookに?range=today|week|allを追加、app-portal側にも選択UIを実装。
53 lines
2.0 KiB
JavaScript
53 lines
2.0 KiB
JavaScript
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']);
|
|
});
|