Files
FlowPilot/tests/background-step-node-registry-module.test.js
2026-05-21 07:21:34 +08:00

62 lines
2.0 KiB
JavaScript

const test = require('node:test');
const assert = require('node:assert/strict');
const fs = require('node:fs');
test('background node registry preserves node metadata even before an executor is registered', () => {
const source = fs.readFileSync('core/flow-kernel/step-registry.js', 'utf8');
const api = new Function('self', `${source}; return self.MultiPageBackgroundStepRegistry;`)({});
const registry = api.createNodeRegistry([
{
flowId: 'kiro',
nodeId: 'kiro-open-register-page',
displayOrder: 1,
executeKey: 'kiro-open-register-page',
title: '打开注册页',
},
]);
const node = registry.getNodeDefinition('kiro-open-register-page');
assert.equal(node.flowId, 'kiro');
assert.equal(node.displayOrder, 1);
assert.equal(node.title, '打开注册页');
assert.throws(
() => registry.executeNode('kiro-open-register-page', {}),
/Missing node executor: kiro-open-register-page/
);
});
test('background node registry executes registered nodes in display order', async () => {
const source = fs.readFileSync('core/flow-kernel/step-registry.js', 'utf8');
const api = new Function('self', `${source}; return self.MultiPageBackgroundStepRegistry;`)({});
const events = [];
const registry = api.createNodeRegistry([
{
flowId: 'openai',
displayOrder: 2,
nodeId: 'submit-signup-email',
executeKey: 'submit-signup-email',
title: 'Submit signup email',
execute: async (state) => {
events.push({ type: 'execute', state });
},
},
{
flowId: 'openai',
displayOrder: 1,
nodeId: 'open-chatgpt',
executeKey: 'open-chatgpt',
title: 'Open ChatGPT',
},
]);
assert.deepStrictEqual(
registry.getOrderedNodes().map((node) => node.nodeId),
['open-chatgpt', 'submit-signup-email']
);
await registry.executeNode('submit-signup-email', { activeFlowId: 'openai' });
assert.deepStrictEqual(events, [{ type: 'execute', state: { activeFlowId: 'openai' } }]);
});