62 lines
2.0 KiB
JavaScript
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' } }]);
|
|
});
|