import { registerProject } from '../../src/tools/register_project';
import { ErrorCode } from '../../src/models/types';
import { ProjectManager } from '../../src/services/project_manager';
// Mock ProjectManager
jest.mock('../../src/services/project_manager');
describe('register_project', () => {
let mockValidateProjectPath: jest.Mock;
let mockAddProject: jest.Mock;
beforeEach(() => {
// Reset mocks
jest.clearAllMocks();
mockValidateProjectPath = jest.fn();
mockAddProject = jest.fn();
// Setup mock implementation
(ProjectManager as jest.Mock).mockImplementation(() => ({
validateProjectPath: mockValidateProjectPath,
addProject: mockAddProject
}));
});
it('should register a valid project', async () => {
mockValidateProjectPath.mockResolvedValue(true);
mockAddProject.mockResolvedValue(undefined);
const result = await registerProject({
name: 'Test Project',
rootPath: '/tmp/test-project',
});
expect(result.success).toBe(true);
expect(result.projectId).toBe('test-project');
expect(mockValidateProjectPath).toHaveBeenCalledWith('/tmp/test-project');
expect(mockAddProject).toHaveBeenCalled();
});
it('should reject non-existent path', async () => {
mockValidateProjectPath.mockResolvedValue(false);
await expect(
registerProject({
name: 'Bad Project',
rootPath: '/nonexistent/path',
})
).rejects.toThrow(expect.objectContaining({
code: ErrorCode.INVALID_PATH
}));
});
it('should reject missing args', async () => {
await expect(
// @ts-ignore
registerProject({
name: 'Bad Project',
})
).rejects.toThrow(expect.objectContaining({
code: ErrorCode.INVALID_ARGUMENTS
}));
});
});