Skip to main content
Glama

AI Code Toolkit

by AgiFlow
GenerateFeatureScaffoldTool.test.ts3.68 kB
import { beforeEach, describe, expect, it, vi } from 'vitest'; import { GenerateFeatureScaffoldTool } from '../../src/tools/GenerateFeatureScaffoldTool'; vi.mock('../../src/services/ScaffoldGeneratorService'); describe('GenerateFeatureScaffoldTool', () => { let tool: GenerateFeatureScaffoldTool; const templatesPath = '/test/templates'; beforeEach(() => { tool = new GenerateFeatureScaffoldTool(templatesPath); vi.clearAllMocks(); }); describe('getDefinition', () => { it('should return tool definition with correct schema', () => { const definition = tool.getDefinition(); expect(definition.name).toBe('generate-feature-scaffold'); expect(definition.description).toBeTruthy(); expect(definition.inputSchema.type).toBe('object'); expect(definition.inputSchema.required).toContain('templateName'); expect(definition.inputSchema.required).toContain('featureName'); expect(definition.inputSchema.required).toContain('description'); expect(definition.inputSchema.required).toContain('variables'); }); it('should not require generator field', () => { const definition = tool.getDefinition(); expect(definition.inputSchema.required).not.toContain('generator'); }); it('should include includes and patterns as optional', () => { const definition = tool.getDefinition(); expect(definition.inputSchema.properties.includes).toBeDefined(); expect(definition.inputSchema.properties.patterns).toBeDefined(); }); }); describe('execute', () => { it('should execute successfully with valid arguments', async () => { const args = { templateName: 'nextjs-15', featureName: 'scaffold-nextjs-page', description: 'Generate Next.js pages', variables: [ { name: 'pageName', description: 'Page name', type: 'string', required: true, }, ], }; const spy = vi.spyOn(tool.scaffoldGeneratorService, 'generateFeatureScaffold'); spy.mockResolvedValue({ success: true, message: 'Feature created', templatePath: '/test/templates/nextjs-15', scaffoldYamlPath: '/test/templates/nextjs-15/scaffold.yaml', }); const result = await tool.execute(args); expect(result.isError).toBeFalsy(); expect(result.content[0].type).toBe('text'); const response = JSON.parse(result.content[0].text); expect(response.success).toBe(true); }); it('should handle optional fields', async () => { const args = { templateName: 'nextjs-15', featureName: 'scaffold-test', description: 'Test feature', instruction: 'Instructions here', variables: [], includes: ['src/page.tsx'], patterns: ['src/**/*.tsx'], }; const spy = vi.spyOn(tool.scaffoldGeneratorService, 'generateFeatureScaffold'); spy.mockResolvedValue({ success: true, message: 'Feature created', }); const result = await tool.execute(args); expect(result.isError).toBeFalsy(); }); it('should return error when service fails', async () => { const args = { templateName: 'nextjs-15', featureName: 'existing-feature', description: 'Test', variables: [], }; const spy = vi.spyOn(tool.scaffoldGeneratorService, 'generateFeatureScaffold'); spy.mockResolvedValue({ success: false, message: 'Feature already exists', }); const result = await tool.execute(args); expect(result.isError).toBeTruthy(); }); }); });

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/AgiFlow/aicode-toolkit'

If you have feedback or need assistance with the MCP directory API, please join our Discord server