From 541dfa4ff01c704f28e5c6edc021b4ed2d4139e4 Mon Sep 17 00:00:00 2001 From: Tim Leslie Date: Fri, 22 May 2020 11:05:29 +1000 Subject: [PATCH] Refactor test internals to supprt future tests (#3015) --- .changeset/pink-bugs-walk.md | 5 + .../nested-mutations/connect-singular.test.js | 67 +++++------ .../nested-mutations/create-singular.test.js | 112 +++++++++--------- 3 files changed, 85 insertions(+), 99 deletions(-) create mode 100644 .changeset/pink-bugs-walk.md diff --git a/.changeset/pink-bugs-walk.md b/.changeset/pink-bugs-walk.md new file mode 100644 index 00000000000..ab4cb237461 --- /dev/null +++ b/.changeset/pink-bugs-walk.md @@ -0,0 +1,5 @@ +--- +'@keystonejs/api-tests': patch +--- + +Refactored internals to allow for future extension of nested-mutation tests. diff --git a/api-tests/relationships/nested-mutations/connect-singular.test.js b/api-tests/relationships/nested-mutations/connect-singular.test.js index 1e15c2bf93d..565b644067b 100644 --- a/api-tests/relationships/nested-mutations/connect-singular.test.js +++ b/api-tests/relationships/nested-mutations/connect-singular.test.js @@ -211,24 +211,23 @@ multiAdapterRunners().map(({ runner, adapterName }) => describe('with access control', () => { describe('read: false on related list', () => { + const group = { name: 'GroupNoRead' }; test( 'throws error when linking nested within create mutation', runner(setupKeystone, async ({ app, create }) => { const groupName = sampleOne(gen.alphaNumString.notEmpty()); // Create an item to link against - const createGroupNoRead = await create('GroupNoRead', { - name: groupName, - }); + const { id } = await create(group.name, { name: groupName }); // Create an item that does the linking const { errors } = await networkedGraphqlRequest({ app, query: ` mutation { - createEventToGroupNoRead(data: { + createEventTo${group.name}(data: { title: "A thing", - group: { connect: { id: "${createGroupNoRead.id}" } } + group: { connect: { id: "${id}" } } }) { id } @@ -241,7 +240,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => data: { errors: expect.arrayContaining([ expect.objectContaining({ - message: 'Unable to connect a EventToGroupNoRead.group', + message: `Unable to connect a EventTo${group.name}.group<${group.name}>`, }), ]), }, @@ -256,32 +255,23 @@ multiAdapterRunners().map(({ runner, adapterName }) => const groupName = sampleOne(gen.alphaNumString.notEmpty()); // Create an item to link against - const createGroupNoRead = await create('GroupNoRead', { - name: groupName, - }); - - expect(createGroupNoRead.id).toBeTruthy(); + const groupModel = await create(group.name, { name: groupName }); + expect(groupModel.id).toBeTruthy(); // Create an item to update - const { - data: { createEventToGroupNoRead }, - } = await networkedGraphqlRequest({ - app, - query: 'mutation { createEventToGroupNoRead(data: { title: "A thing", }) { id } }', - }); - - expect(createEventToGroupNoRead.id).toBeTruthy(); + const eventModel = await create(`EventTo${group.name}`, { title: 'A thing' }); + expect(eventModel.id).toBeTruthy(); // Update the item and link the relationship field const { errors } = await networkedGraphqlRequest({ app, query: ` mutation { - updateEventToGroupNoRead( - id: "${createEventToGroupNoRead.id}" + updateEventTo${group.name}( + id: "${eventModel.id}" data: { title: "A thing", - group: { connect: { id: "${createGroupNoRead.id}" } } + group: { connect: { id: "${groupModel}" } } } ) { id @@ -295,7 +285,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => data: { errors: expect.arrayContaining([ expect.objectContaining({ - message: 'Unable to connect a EventToGroupNoRead.group', + message: `Unable to connect a EventTo${group.name}.group<${group.name}>`, }), ]), }, @@ -306,6 +296,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); describe('create: false on related list', () => { + const group = { name: 'GroupNoCreate' }; test( 'does not throw error when linking nested within create mutation', runner(setupKeystone, async ({ app, create }) => { @@ -313,14 +304,14 @@ multiAdapterRunners().map(({ runner, adapterName }) => // Create an item to link against // We can't use the graphQL query here (it's `create: () => false`) - const { id } = await create('GroupNoCreate', { name: groupName }); + const { id } = await create(group.name, { name: groupName }); // Create an item that does the linking const { data, errors } = await networkedGraphqlRequest({ app, query: ` mutation { - createEventToGroupNoCreate(data: { + createEventTo${group.name}(data: { title: "A thing", group: { connect: { id: "${id}" } } }) { @@ -334,7 +325,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); expect(data).toMatchObject({ - createEventToGroupNoCreate: { id: expect.any(String), group: { id } }, + [`createEventTo${group.name}`]: { id: expect.any(String), group: { id } }, }); expect(errors).toBe(undefined); }) @@ -347,25 +338,21 @@ multiAdapterRunners().map(({ runner, adapterName }) => // Create an item to link against // We can't use the graphQL query here (it's `create: () => false`) - const createGroupNoCreate = await create('GroupNoCreate', { - name: groupName, - }); + const groupModel = await create(group.name, { name: groupName }); // Create an item to update - const createEventToGroupNoCreate = await create('EventToGroupNoCreate', { - title: 'A Thing', - }); + const eventModel = await create(`EventTo${group.name}`, { title: 'A Thing' }); // Update the item and link the relationship field const { data, errors } = await networkedGraphqlRequest({ app, query: ` mutation { - updateEventToGroupNoCreate( - id: "${createEventToGroupNoCreate.id}" + updateEventTo${group.name}( + id: "${eventModel.id}" data: { title: "A thing", - group: { connect: { id: "${createGroupNoCreate.id}" } } + group: { connect: { id: "${groupModel.id}" } } } ) { id @@ -379,7 +366,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); expect(data).toMatchObject({ - updateEventToGroupNoCreate: { + [`updateEventTo${group.name}`]: { id: expect.any(String), group: { id: expect.any(String), @@ -390,13 +377,13 @@ multiAdapterRunners().map(({ runner, adapterName }) => expect(errors).toBe(undefined); // See that it actually stored the group ID on the Event record - const event = await findOne('EventToGroupNoCreate', { title: 'A thing' }); + const event = await findOne(`EventTo${group.name}`, { title: 'A thing' }); expect(event).toBeTruthy(); expect(event.group).toBeTruthy(); - const group = await findById('GroupNoCreate', event.group); - expect(group).toBeTruthy(); - expect(group.name).toBe(groupName); + const _group = await findById(group.name, event.group); + expect(_group).toBeTruthy(); + expect(_group.name).toBe(groupName); }) ); }); diff --git a/api-tests/relationships/nested-mutations/create-singular.test.js b/api-tests/relationships/nested-mutations/create-singular.test.js index d965dd83a6a..1e5f64e50bc 100644 --- a/api-tests/relationships/nested-mutations/create-singular.test.js +++ b/api-tests/relationships/nested-mutations/create-singular.test.js @@ -184,6 +184,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => describe('with access control', () => { describe('read: false on related list', () => { + const group = { name: 'GroupNoRead' }; test( 'does not throw error when creating nested within create mutation', runner(setupKeystone, async ({ app, findOne, findById }) => { @@ -194,7 +195,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => app, query: ` mutation { - createEventToGroupNoRead(data: { + createEventTo${group.name}(data: { title: "A thing", group: { create: { name: "${groupName}" } } }) { @@ -206,17 +207,17 @@ multiAdapterRunners().map(({ runner, adapterName }) => expect(errors).toBe(undefined); expect(data).toMatchObject({ - createEventToGroupNoRead: { id: expect.any(String) }, + [`createEventTo${group.name}`]: { id: expect.any(String) }, }); // See that it actually stored the group ID on the Event record - const event = await findOne('EventToGroupNoRead', { title: 'A thing' }); + const event = await findOne(`EventTo${group.name}`, { title: 'A thing' }); expect(event).toBeTruthy(); expect(event.group).toBeTruthy(); - const group = await findById('GroupNoRead', event.group); - expect(group).toBeTruthy(); - expect(group.name).toBe(groupName); + const _group = await findById(group.name, event.group); + expect(_group).toBeTruthy(); + expect(_group.name).toBe(groupName); }) ); @@ -226,17 +227,15 @@ multiAdapterRunners().map(({ runner, adapterName }) => const groupName = sampleOne(gen.alphaNumString.notEmpty()); // Create an item to update - const createEventToGroupNoRead = await create('EventToGroupNoRead', { - title: 'A thing', - }); + const eventModel = await create(`EventTo${group.name}`, { title: 'A thing' }); // Update an item that does the nested create const { data, errors } = await networkedGraphqlRequest({ app, query: ` mutation { - updateEventToGroupNoRead( - id: "${createEventToGroupNoRead.id}" + updateEventTo${group.name}( + id: "${eventModel.id}" data: { title: "A thing", group: { create: { name: "${groupName}" } } @@ -249,21 +248,24 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); expect(errors).toBe(undefined); - expect(data).toMatchObject({ updateEventToGroupNoRead: { id: expect.any(String) } }); + expect(data).toMatchObject({ + [`updateEventTo${group.name}`]: { id: expect.any(String) }, + }); // See that it actually stored the group ID on the Event record - const event = await findOne('EventToGroupNoRead', { title: 'A thing' }); + const event = await findOne(`EventTo${group.name}`, { title: 'A thing' }); expect(event).toBeTruthy(); expect(event.group).toBeTruthy(); - const group = await findById('GroupNoRead', event.group); - expect(group).toBeTruthy(); - expect(group.name).toBe(groupName); + const _group = await findById(group.name, event.group); + expect(_group).toBeTruthy(); + expect(_group.name).toBe(groupName); }) ); }); describe('create: false on related list', () => { + const group = { name: 'GroupNoCreate' }; test( 'throws error when creating nested within create mutation', runner(setupKeystone, async ({ keystone, app }) => { @@ -276,7 +278,7 @@ multiAdapterRunners().map(({ runner, adapterName }) => app, query: ` mutation { - createEventToGroupNoCreate(data: { + createEventTo${group.name}(data: { title: "${eventName}", group: { create: { name: "${groupName}" } } }) { @@ -287,13 +289,13 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); // Assert it throws an access denied error - expect(data.createEventToGroupNoCreate).toBe(null); + expect(data[`createEventTo${group.name}`]).toBe(null); expect(errors).toMatchObject([ { data: { errors: expect.arrayContaining([ expect.objectContaining({ - message: 'Unable to create a EventToGroupNoCreate.group', + message: `Unable to create a EventTo${group.name}.group<${group.name}>`, }), ]), }, @@ -301,38 +303,34 @@ multiAdapterRunners().map(({ runner, adapterName }) => ]); // Confirm it didn't insert either of the records anyway - const { - data: { allGroupNoCreates }, - } = await graphqlRequest({ + const result = await graphqlRequest({ keystone, query: ` - query { - allGroupNoCreates(where: { name: "${groupName}" }) { - id - name - } - } - `, + query { + all${group.name}s(where: { name: "${groupName}" }) { + id + name + } + } + `, }); - expect(allGroupNoCreates).toMatchObject([]); + expect(result.data[`all${group.name}s`]).toMatchObject([]); // Confirm it didn't insert either of the records anyway - const { - data: { allEventToGroupNoCreates }, - } = await graphqlRequest({ + const result2 = await graphqlRequest({ keystone, query: ` - query { - allEventToGroupNoCreates(where: { title: "${eventName}" }) { - id - title - } - } - `, + query { + allEventTo${group.name}s(where: { title: "${eventName}" }) { + id + title + } + } + `, }); - expect(allEventToGroupNoCreates).toMatchObject([]); + expect(result2.data[`allEventTo${group.name}s`]).toMatchObject([]); }) ); @@ -342,17 +340,15 @@ multiAdapterRunners().map(({ runner, adapterName }) => const groupName = sampleOne(gen.alphaNumString.notEmpty()); // Create an item to update - const createEventToGroupNoCreate = await create('EventToGroupNoCreate', { - title: 'A thing', - }); + const eventModel = await create(`EventTo${group.name}`, { title: 'A thing' }); // Update an item that does the nested create const { data, errors } = await networkedGraphqlRequest({ app, query: ` mutation { - updateEventToGroupNoCreate( - id: "${createEventToGroupNoCreate.id}" + updateEventTo${group.name}( + id: "${eventModel.id}" data: { title: "A thing", group: { create: { name: "${groupName}" } } @@ -365,13 +361,13 @@ multiAdapterRunners().map(({ runner, adapterName }) => }); // Assert it throws an access denied error - expect(data.updateEventToGroupNoCreate).toBe(null); + expect(data[`updateEventTo${group.name}`]).toBe(null); expect(errors).toMatchObject([ { data: { errors: expect.arrayContaining([ expect.objectContaining({ - message: 'Unable to create a EventToGroupNoCreate.group', + message: `Unable to create a EventTo${group.name}.group<${group.name}>`, }), ]), }, @@ -379,21 +375,19 @@ multiAdapterRunners().map(({ runner, adapterName }) => ]); // Confirm it didn't insert the record anyway - const { - data: { allGroupNoCreates }, - } = await graphqlRequest({ + const result = await graphqlRequest({ keystone, query: ` - query { - allGroupNoCreates(where: { name: "${groupName}" }) { - id - name - } - } - `, + query { + all${group.name}s(where: { name: "${groupName}" }) { + id + name + } + } + `, }); - expect(allGroupNoCreates).toMatchObject([]); + expect(result.data[`all${group.name}s`]).toMatchObject([]); }) ); });