From 5c95d6d58e3f1572803290deb2a29c23a57ab6fb Mon Sep 17 00:00:00 2001 From: webdevcody Date: Sun, 4 Jan 2026 00:22:06 -0500 Subject: [PATCH] fix: update category mapping and improve ID generation format in IdeationService - Changed the category mapping for 'feature' from 'feature' to 'ui'. - Updated ID generation format to use hyphens instead of underscores for better readability. - Enhanced unit tests to reflect the updated category and ensure proper functionality. --- apps/server/src/services/ideation-service.ts | 4 +- .../unit/services/ideation-service.test.ts | 37 ++++++++++++++++--- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/apps/server/src/services/ideation-service.ts b/apps/server/src/services/ideation-service.ts index d2fde6dd..3528c858 100644 --- a/apps/server/src/services/ideation-service.ts +++ b/apps/server/src/services/ideation-service.ts @@ -1631,7 +1631,7 @@ Focus on practical, implementable suggestions that would genuinely improve the p private mapIdeaCategoryToFeatureCategory(category: IdeaCategory): string { const mapping: Record = { - feature: 'feature', + feature: 'ui', 'ux-ui': 'enhancement', dx: 'chore', growth: 'feature', @@ -1674,6 +1674,6 @@ Focus on practical, implementable suggestions that would genuinely improve the p } private generateId(prefix: string): string { - return `${prefix}_${Date.now()}_${Math.random().toString(36).substring(2, 11)}`; + return `${prefix}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`; } } diff --git a/apps/server/tests/unit/services/ideation-service.test.ts b/apps/server/tests/unit/services/ideation-service.test.ts index 6cc9e340..346fe442 100644 --- a/apps/server/tests/unit/services/ideation-service.test.ts +++ b/apps/server/tests/unit/services/ideation-service.test.ts @@ -15,10 +15,26 @@ import type { } from '@automaker/types'; import { ProviderFactory } from '@/providers/provider-factory.js'; +// Create a shared mock logger instance for assertions using vi.hoisted +const mockLogger = vi.hoisted(() => ({ + info: vi.fn(), + error: vi.fn(), + warn: vi.fn(), + debug: vi.fn(), +})); + // Mock dependencies vi.mock('@/lib/secure-fs.js'); vi.mock('@automaker/platform'); -vi.mock('@automaker/utils'); +vi.mock('@automaker/utils', async () => { + const actual = await vi.importActual('@automaker/utils'); + return { + ...actual, + createLogger: vi.fn(() => mockLogger), + loadContextFiles: vi.fn(), + isAbortError: vi.fn(), + }; +}); vi.mock('@/providers/provider-factory.js'); vi.mock('@/lib/sdk-options.js', () => ({ createChatOptions: vi.fn(() => ({ @@ -56,7 +72,9 @@ describe('IdeationService', () => { // Mock platform functions vi.mocked(platform.ensureIdeationDir).mockResolvedValue(undefined); - vi.mocked(platform.getIdeaDir).mockReturnValue('/test/project/.automaker/ideation/ideas/idea-123'); + vi.mocked(platform.getIdeaDir).mockReturnValue( + '/test/project/.automaker/ideation/ideas/idea-123' + ); vi.mocked(platform.getIdeaPath).mockReturnValue( '/test/project/.automaker/ideation/ideas/idea-123/idea.json' ); @@ -71,7 +89,7 @@ describe('IdeationService', () => { '/test/project/.automaker/ideation/analysis.json' ); - // Mock utils + // Mock utils (already mocked above, but reset return values) vi.mocked(utils.loadContextFiles).mockResolvedValue({ formattedPrompt: 'Test context', files: [], @@ -497,7 +515,7 @@ describe('IdeationService', () => { id: 'idea-123', title: 'Add Dark Mode', description: 'Implement dark mode theme', - category: 'features', + category: 'feature', status: 'refined', impact: 'high', effort: 'medium', @@ -613,7 +631,14 @@ describe('IdeationService', () => { }); it('should emit error event on failure', async () => { - vi.mocked(secureFs.readFile).mockRejectedValue(new Error('Read failed')); + // Mock writeFile to fail (this is called after gatherProjectStructure and isn't caught) + vi.mocked(secureFs.readFile).mockResolvedValue( + JSON.stringify({ + name: 'test-project', + dependencies: {}, + }) + ); + vi.mocked(secureFs.writeFile).mockRejectedValue(new Error('Write failed')); await expect(service.analyzeProject(testProjectPath)).rejects.toThrow(); @@ -665,7 +690,7 @@ describe('IdeationService', () => { expect(Array.isArray(categories)).toBe(true); expect(categories.length).toBeGreaterThan(0); expect(categories[0]).toHaveProperty('id'); - expect(categories[0]).toHaveProperty('label'); + expect(categories[0]).toHaveProperty('name'); }); });