feat(coder): complete orchestrator advanced patterns
- Approval gate steps pause and await human resolution - appendStepEvent wired into markStep, failRun, dispatchAgentStep - Trigger rule unit tests (6 variants) - New parallel-research flow with one_success trigger
This commit is contained in:
31
apps/coder/src/services/__tests__/trigger-rules.test.ts
Normal file
31
apps/coder/src/services/__tests__/trigger-rules.test.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
import { describe, it, expect } from 'vitest';
|
||||
import { evaluateTriggerRule } from '../flow-runner-decisions.js';
|
||||
|
||||
describe('evaluateTriggerRule', () => {
|
||||
it('all_success requires all deps done', () => {
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(['a', 'b']), new Set(), new Set())).toBe(true);
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(['a']), new Set(), new Set())).toBe(false);
|
||||
});
|
||||
|
||||
it('one_success fires on first completion', () => {
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(['a']), new Set(), new Set(), 'one_success')).toBe(true);
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(), new Set(), new Set(), 'one_success')).toBe(false);
|
||||
});
|
||||
|
||||
it('all_done includes skipped deps', () => {
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(['a']), new Set(['b']), new Set(), 'all_done')).toBe(true);
|
||||
});
|
||||
|
||||
it('all_success treats excluded deps as satisfied', () => {
|
||||
expect(evaluateTriggerRule(['a', 'b'], new Set(['a']), new Set(), new Set(['b']))).toBe(true);
|
||||
});
|
||||
|
||||
it('defaults to all_success', () => {
|
||||
expect(evaluateTriggerRule(['a'], new Set(['a']), new Set(), new Set())).toBe(true);
|
||||
expect(evaluateTriggerRule(['a'], new Set(), new Set(), new Set())).toBe(false);
|
||||
});
|
||||
|
||||
it('returns true for empty deps', () => {
|
||||
expect(evaluateTriggerRule([], new Set(), new Set(), new Set())).toBe(true);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user