Tm start (#1200)
Co-authored-by: Max Tuzzolino <maxtuzz@Maxs-MacBook-Pro.local> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Max Tuzzolino <max.tuzsmith@gmail.com> Co-authored-by: Ralph Khreish <35776126+Crunchyman-ralph@users.noreply.github.com>
This commit is contained in:
82
packages/tm-core/tests/unit/executor.test.ts
Normal file
82
packages/tm-core/tests/unit/executor.test.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
/**
|
||||
* Tests for executor functionality
|
||||
*/
|
||||
|
||||
import { describe, it, expect, beforeEach, vi } from 'vitest';
|
||||
import {
|
||||
ExecutorFactory,
|
||||
ClaudeExecutor,
|
||||
type ExecutorOptions
|
||||
} from '../../src/executors/index.js';
|
||||
|
||||
describe('ExecutorFactory', () => {
|
||||
const mockProjectRoot = '/test/project';
|
||||
|
||||
it('should create a Claude executor', () => {
|
||||
const options: ExecutorOptions = {
|
||||
type: 'claude',
|
||||
projectRoot: mockProjectRoot
|
||||
};
|
||||
|
||||
const executor = ExecutorFactory.create(options);
|
||||
expect(executor).toBeInstanceOf(ClaudeExecutor);
|
||||
});
|
||||
|
||||
it('should throw error for unimplemented executor types', () => {
|
||||
const options: ExecutorOptions = {
|
||||
type: 'shell',
|
||||
projectRoot: mockProjectRoot
|
||||
};
|
||||
|
||||
expect(() => ExecutorFactory.create(options)).toThrow(
|
||||
'Shell executor not yet implemented'
|
||||
);
|
||||
});
|
||||
|
||||
it('should get available executor types', () => {
|
||||
const types = ExecutorFactory.getAvailableTypes();
|
||||
expect(types).toContain('claude');
|
||||
expect(types).toContain('shell');
|
||||
expect(types).toContain('custom');
|
||||
});
|
||||
});
|
||||
|
||||
describe('ClaudeExecutor', () => {
|
||||
const mockProjectRoot = '/test/project';
|
||||
let executor: ClaudeExecutor;
|
||||
|
||||
beforeEach(() => {
|
||||
executor = new ClaudeExecutor(mockProjectRoot);
|
||||
});
|
||||
|
||||
it('should return claude as executor type', () => {
|
||||
expect(executor.getType()).toBe('claude');
|
||||
});
|
||||
|
||||
it('should format task prompt correctly', () => {
|
||||
const mockTask = {
|
||||
id: '1',
|
||||
title: 'Test Task',
|
||||
description: 'Test description',
|
||||
status: 'pending' as const,
|
||||
priority: 'high' as const,
|
||||
dependencies: [],
|
||||
details: 'Implementation details',
|
||||
testStrategy: 'Unit tests',
|
||||
subtasks: []
|
||||
};
|
||||
|
||||
// Access protected method through any type assertion for testing
|
||||
const formattedPrompt = (executor as any).formatTaskPrompt(mockTask);
|
||||
|
||||
expect(formattedPrompt).toContain('Task ID: 1');
|
||||
expect(formattedPrompt).toContain('Title: Test Task');
|
||||
expect(formattedPrompt).toContain('Description:\nTest description');
|
||||
expect(formattedPrompt).toContain(
|
||||
'Implementation Details:\nImplementation details'
|
||||
);
|
||||
expect(formattedPrompt).toContain('Test Strategy:\nUnit tests');
|
||||
expect(formattedPrompt).toContain('Status: pending');
|
||||
expect(formattedPrompt).toContain('Priority: high');
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user