n8n/packages/cli/test/integration/task-runners/task-runner-module.internal.test.ts
Declan Carroll 060ab37a7b
chore: Run pnpm dedupe (no-changelog) (#31084)
Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 12:16:47 +01:00

44 lines
1.5 KiB
TypeScript

import { TaskRunnersConfig } from '@n8n/config';
import { Container } from '@n8n/di';
import { InternalTaskRunnerDisconnectAnalyzer } from '@/task-runners/internal-task-runner-disconnect-analyzer';
import { TaskBrokerWsServer } from '@/task-runners/task-broker/task-broker-ws-server';
import { TaskRunnerModule } from '@/task-runners/task-runner-module';
import { PyTaskRunnerProcess } from '@/task-runners/task-runner-process-py';
// Direct method replacement (not jest.spyOn) because the root jest config
// enables `restoreMocks: true` which restores spies between tests, but
// `module.start()` calls `checkRequirements` and we need the stub to remain
// active throughout the file.
const originalCheckRequirements = PyTaskRunnerProcess.checkRequirements;
beforeAll(() => {
PyTaskRunnerProcess.checkRequirements = async () => 'python';
});
afterAll(() => {
PyTaskRunnerProcess.checkRequirements = originalCheckRequirements;
});
describe('TaskRunnerModule in internal mode', () => {
const runnerConfig = Container.get(TaskRunnersConfig);
runnerConfig.port = 0; // Random port
runnerConfig.mode = 'internal';
const module = Container.get(TaskRunnerModule);
afterEach(async () => {
await module.stop();
});
describe('start', () => {
it('should start the task runner', async () => {
// Act
await module.start();
});
it('should use InternalTaskRunnerDisconnectAnalyzer', () => {
const wsServer = Container.get(TaskBrokerWsServer);
expect(wsServer.getDisconnectAnalyzer()).toBeInstanceOf(InternalTaskRunnerDisconnectAnalyzer);
});
});
});