feat: Complete generateObject migration with JSON mode support

This commit is contained in:
Ben Vargas
2025-07-22 15:59:15 -06:00
committed by Ralph Khreish
parent 604b94baa9
commit b16023ab2f
35 changed files with 1621 additions and 960 deletions

View File

@@ -30,6 +30,12 @@ jest.unstable_mockModule(
generateTextService: jest.fn().mockResolvedValue({
mainResult: '[]', // mainResult is the text string directly
telemetryData: {}
}),
generateObjectService: jest.fn().mockResolvedValue({
mainResult: {
tasks: [] // generateObject returns structured data
},
telemetryData: {}
})
})
);
@@ -84,7 +90,7 @@ const { readJSON, writeJSON, log } = await import(
'../../../../../scripts/modules/utils.js'
);
const { generateTextService } = await import(
const { generateObjectService } = await import(
'../../../../../scripts/modules/ai-services-unified.js'
);
@@ -154,7 +160,9 @@ describe('updateTasks', () => {
];
const mockApiResponse = {
mainResult: JSON.stringify(mockUpdatedTasks), // mainResult is the JSON string directly
mainResult: {
tasks: mockUpdatedTasks // generateObject returns structured data
},
telemetryData: {}
};
@@ -164,7 +172,7 @@ describe('updateTasks', () => {
tag: 'master',
_rawTaggedData: mockInitialTasks
});
generateTextService.mockResolvedValue(mockApiResponse);
generateObjectService.mockResolvedValue(mockApiResponse);
// Act
const result = await updateTasks(
@@ -185,7 +193,7 @@ describe('updateTasks', () => {
);
// 2. AI Service called with correct args
expect(generateTextService).toHaveBeenCalledWith(expect.any(Object));
expect(generateObjectService).toHaveBeenCalledWith(expect.any(Object));
// 3. Write JSON called with correctly merged tasks
expect(writeJSON).toHaveBeenCalledWith(
@@ -252,7 +260,7 @@ describe('updateTasks', () => {
'/mock/path',
'master'
);
expect(generateTextService).not.toHaveBeenCalled();
expect(generateObjectService).not.toHaveBeenCalled();
expect(writeJSON).not.toHaveBeenCalled();
expect(log).toHaveBeenCalledWith(
'info',
@@ -327,8 +335,10 @@ describe('updateTasks', () => {
_rawTaggedData: mockTaggedData
});
generateTextService.mockResolvedValue({
mainResult: JSON.stringify(mockUpdatedTasks),
generateObjectService.mockResolvedValue({
mainResult: {
tasks: mockUpdatedTasks
},
telemetryData: { commandName: 'update-tasks', totalCost: 0.05 }
});