From 3d06135ebae1d86ff34cf3fd54fdb70706bb5454 Mon Sep 17 00:00:00 2001 From: Kevin Pamaran Date: Tue, 16 Sep 2025 15:12:36 -0400 Subject: [PATCH] Fix api contract and anticipate future change --- .../mock-data-generator-modal.spec.tsx | 86 +++++------ .../mock-data-generator-modal/types.ts | 5 +- .../src/modules/collection-tab.ts | 2 +- .../src/atlas-ai-service.spec.ts | 136 ++++++++---------- .../src/atlas-ai-service.ts | 38 +++-- 5 files changed, 110 insertions(+), 157 deletions(-) diff --git a/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx b/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx index 2e313aaaefc..1b651c2f2b6 100644 --- a/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx +++ b/packages/compass-collection/src/components/mock-data-generator-modal/mock-data-generator-modal.spec.tsx @@ -81,18 +81,14 @@ describe('MockDataGeneratorModal', () => { atlasAiService: { getMockDataSchema: () => { return Promise.resolve({ - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.firstName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.firstName', + fakerArgs: [], + }, + ], } as MockDataSchemaResponse); }, }, @@ -287,42 +283,32 @@ describe('MockDataGeneratorModal', () => { const mockServicesWithMockDataResponse = createMockServices(); mockServicesWithMockDataResponse.atlasAiService.getMockDataSchema = () => Promise.resolve({ - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.firstName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'age', - mongoType: 'int', - fakerMethod: 'number.int', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'email', - mongoType: 'string', - fakerMethod: 'internet', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'username', - mongoType: 'string', - fakerMethod: 'noSuchMethod', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.firstName', + fakerArgs: [], + }, + { + fieldPath: 'age', + mongoType: 'int', + fakerMethod: 'number.int', + fakerArgs: [], + }, + { + fieldPath: 'email', + mongoType: 'string', + fakerMethod: 'internet', + fakerArgs: [], + }, + { + fieldPath: 'username', + mongoType: 'string', + fakerMethod: 'noSuchMethod', + fakerArgs: [], + }, + ], }); it('shows a loading spinner when the faker schema generation is in progress', async () => { @@ -332,9 +318,7 @@ describe('MockDataGeneratorModal', () => { setTimeout( () => resolve({ - content: { - fields: [], - }, + fields: [], }), 1000 ) diff --git a/packages/compass-collection/src/components/mock-data-generator-modal/types.ts b/packages/compass-collection/src/components/mock-data-generator-modal/types.ts index 279bc3f3921..947911eabc1 100644 --- a/packages/compass-collection/src/components/mock-data-generator-modal/types.ts +++ b/packages/compass-collection/src/components/mock-data-generator-modal/types.ts @@ -35,7 +35,4 @@ export type MockDataGeneratorState = | MockDataGeneratorCompletedState | MockDataGeneratorErrorState; -export type FakerSchemaMapping = Omit< - MockDataSchemaResponse['content']['fields'][number], - 'isArray' ->; +export type FakerSchemaMapping = MockDataSchemaResponse['fields'][number]; diff --git a/packages/compass-collection/src/modules/collection-tab.ts b/packages/compass-collection/src/modules/collection-tab.ts index 449e4b503ab..0b460c3c576 100644 --- a/packages/compass-collection/src/modules/collection-tab.ts +++ b/packages/compass-collection/src/modules/collection-tab.ts @@ -703,7 +703,7 @@ const validateFakerSchema = ( fakerSchema: MockDataSchemaResponse, logger: Logger ) => { - return fakerSchema.content.fields.map((field) => { + return fakerSchema.fields.map((field) => { const { fakerMethod } = field; const [moduleName, methodName, ...rest] = fakerMethod.split('.'); diff --git a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts index e1051c1c333..a093b730e47 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.spec.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.spec.ts @@ -428,26 +428,20 @@ describe('AtlasAiService', function () { if (apiURLPreset === 'cloud') { it('makes a post request to the correct endpoint', async function () { const mockResponse = { - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.fullName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'age', - mongoType: 'int', - fakerMethod: 'number.int', - fakerArgs: [{ json: '{"min": 18, "max": 65}' }], - isArray: false, - probability: 0.8, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.fullName', + fakerArgs: [], + }, + { + fieldPath: 'age', + mongoType: 'int', + fakerMethod: 'number.int', + fakerArgs: [{ json: '{"min": 18, "max": 65}' }], + }, + ], }; const fetchStub = sandbox .stub() @@ -469,26 +463,20 @@ describe('AtlasAiService', function () { it('includes sample values by default (includeSampleValues=true)', async function () { const mockResponse = { - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.fullName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'age', - mongoType: 'int', - fakerMethod: 'number.int', - fakerArgs: [{ json: '{"min": 18, "max": 122}' }], - isArray: false, - probability: 0.8, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.fullName', + fakerArgs: [], + }, + { + fieldPath: 'age', + mongoType: 'int', + fakerMethod: 'number.int', + fakerArgs: [{ json: '{"min": 18, "max": 122}' }], + }, + ], }; const fetchStub = sandbox .stub() @@ -515,26 +503,20 @@ describe('AtlasAiService', function () { it('excludes sample values when includeSampleValues=false', async function () { const mockResponse = { - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.fullName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'age', - mongoType: 'int', - fakerMethod: 'number.int', - fakerArgs: [{ json: '{"min": 18, "max": 65}' }], - isArray: false, - probability: 0.8, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.fullName', + fakerArgs: [], + }, + { + fieldPath: 'age', + mongoType: 'int', + fakerMethod: 'number.int', + fakerArgs: [{ json: '{"min": 18, "max": 65}' }], + }, + ], }; const fetchStub = sandbox .stub() @@ -559,26 +541,20 @@ describe('AtlasAiService', function () { it('makes POST request with correct headers and body structure', async function () { const mockResponse = { - content: { - fields: [ - { - fieldPath: 'name', - mongoType: 'string', - fakerMethod: 'person.fullName', - fakerArgs: [], - isArray: false, - probability: 1.0, - }, - { - fieldPath: 'age', - mongoType: 'int', - fakerMethod: 'number.int', - fakerArgs: [{ json: '{"min": 18, "max": 65}' }], - isArray: false, - probability: 0.8, - }, - ], - }, + fields: [ + { + fieldPath: 'name', + mongoType: 'string', + fakerMethod: 'person.fullName', + fakerArgs: [], + }, + { + fieldPath: 'age', + mongoType: 'int', + fakerMethod: 'number.int', + fakerArgs: [{ json: '{"min": 18, "max": 65}' }], + }, + ], }; const fetchStub = sandbox .stub() diff --git a/packages/compass-generative-ai/src/atlas-ai-service.ts b/packages/compass-generative-ai/src/atlas-ai-service.ts index bd52e581202..480beb00cd5 100644 --- a/packages/compass-generative-ai/src/atlas-ai-service.ts +++ b/packages/compass-generative-ai/src/atlas-ai-service.ts @@ -232,27 +232,23 @@ export interface MockDataSchemaRequest { } export const MockDataSchemaResponseShape = z.object({ - content: z.object({ - fields: z.array( - z.object({ - fieldPath: z.string(), - mongoType: z.string(), - fakerMethod: z.string(), - fakerArgs: z.array( - z.union([ - z.object({ - json: z.string(), - }), - z.string(), - z.number(), - z.boolean(), - ]) - ), - isArray: z.boolean(), - probability: z.number(), - }) - ), - }), + fields: z.array( + z.object({ + fieldPath: z.string(), + mongoType: z.string(), + fakerMethod: z.string(), + fakerArgs: z.array( + z.union([ + z.object({ + json: z.string(), + }), + z.string(), + z.number(), + z.boolean(), + ]) + ), + }) + ), }); export type MockDataSchemaResponse = z.infer<