diff --git a/packages/amplify-graphql-model-transformer/src/__tests__/model-transformer.test.ts b/packages/amplify-graphql-model-transformer/src/__tests__/model-transformer.test.ts index 420ae5e4e38..673b3ae9c45 100644 --- a/packages/amplify-graphql-model-transformer/src/__tests__/model-transformer.test.ts +++ b/packages/amplify-graphql-model-transformer/src/__tests__/model-transformer.test.ts @@ -1056,4 +1056,37 @@ describe('ModelTransformer: ', () => { validateModelSchema(parsed); }); + + it('should generate the ID field when not specified', () => { + const validSchema = `type Todo @model { + name: String + }`; + + const transformer = new GraphQLTransform({ + transformers: [new ModelTransformer()], + }); + + const out = transformer.transform(validSchema); + expect(out).toBeDefined(); + + const definition = out.schema; + expect(definition).toBeDefined(); + + const parsed = parse(definition); + validateModelSchema(parsed); + + const createTodoInput = getInputType(parsed, 'CreateTodoInput'); + expect(createTodoInput).toBeDefined(); + + expectFieldsOnInputType(createTodoInput!, ['id', 'name']); + + const idField = createTodoInput!.fields!.find(f => f.name.value === 'id'); + expect((idField!.type as NamedTypeNode).name!.value).toEqual('ID'); + expect((idField!.type as NamedTypeNode).kind).toEqual('NamedType'); + + const updateTodoInput = getInputType(parsed, 'UpdateTodoInput'); + expect(updateTodoInput).toBeDefined(); + + expectFieldsOnInputType(updateTodoInput!, ['name']); + }); }); diff --git a/packages/amplify-graphql-model-transformer/src/graphql-types/mutation.ts b/packages/amplify-graphql-model-transformer/src/graphql-types/mutation.ts index de8d8b70922..98e56a72329 100644 --- a/packages/amplify-graphql-model-transformer/src/graphql-types/mutation.ts +++ b/packages/amplify-graphql-model-transformer/src/graphql-types/mutation.ts @@ -45,9 +45,7 @@ export const makeUpdateInputField = ( input.fields.forEach(f => f.makeNullable()); // Add id field and make it optional - if (!hasIdField) { - input.addField(InputFieldWrapper.create('id', 'ID', false)); - } else { + if (hasIdField) { const idField = input.fields.find(f => f.name === 'id'); if (idField) { idField.makeNonNullable(); @@ -127,7 +125,7 @@ export const makeCreateInputField = ( // Add id field and make it optional if (!hasIdField) { - input.addField(InputFieldWrapper.create('id', 'ID')); + input.addField(InputFieldWrapper.create('id', 'ID', true)); } else { const idField = input.fields.find(f => f.name === 'id'); if (idField) {