Skip to content

Commit

Permalink
Merge branch 'main' into renovate/eslint-8.x
Browse files Browse the repository at this point in the history
  • Loading branch information
gwyneplaine committed Oct 12, 2021
2 parents 27aa7b7 + 11d309a commit 7155c37
Show file tree
Hide file tree
Showing 20 changed files with 392 additions and 671 deletions.
42 changes: 5 additions & 37 deletions packages/keystone/src/fields/types/file/tests/test-fixtures.ts
Expand Up @@ -3,7 +3,7 @@ import fs from 'fs-extra';
import { Upload } from 'graphql-upload';
import mime from 'mime';
import { file } from '..';
import { expectResolverError } from '../../../../../../../tests/api-tests/utils';
import { expectSingleResolverError } from '../../../../../../../tests/api-tests/utils';

const prepareFile = (_filePath: string) => {
const filePath = path.resolve(`${__dirname}/../test-files/${_filePath}`);
Expand Down Expand Up @@ -143,15 +143,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Invalid file reference`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.secretFile: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.secretFile', message);
})
);
test(
Expand All @@ -171,15 +163,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Either ref or upload must be passed to FileFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.secretFile: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.secretFile', message);
})
);
test(
Expand Down Expand Up @@ -209,15 +193,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Only one of ref and upload can be passed to FileFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.secretFile: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.secretFile', message);
})
);
test(
Expand All @@ -239,15 +215,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Only one of ref and upload can be passed to FileFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.secretFile: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.secretFile', message);
})
);
});
Expand Down
52 changes: 6 additions & 46 deletions packages/keystone/src/fields/types/image/tests/test-fixtures.ts
Expand Up @@ -4,7 +4,7 @@ import { Upload } from 'graphql-upload';
import mime from 'mime';
import { KeystoneContext } from '../../../../types';
import { image } from '..';
import { expectResolverError } from '../../../../../../../tests/api-tests/utils';
import { expectSingleResolverError } from '../../../../../../../tests/api-tests/utils';

const prepareFile = (_filePath: string) => {
const filePath = path.resolve(`${__dirname}/../test-files/${_filePath}`);
Expand Down Expand Up @@ -115,15 +115,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `File type not found`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.avatar: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.avatar', message);
})
);
});
Expand Down Expand Up @@ -189,15 +181,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Invalid image reference`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.avatar: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.avatar', message);
})
);
test(
Expand All @@ -217,15 +201,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Either ref or upload must be passed to ImageFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.avatar: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.avatar', message);
})
);
test(
Expand Down Expand Up @@ -253,15 +229,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Only one of ref and upload can be passed to ImageFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.avatar: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.avatar', message);
})
);
test(
Expand All @@ -283,15 +251,7 @@ export const crudTests = (keystoneTestWrapper: any) => {
});
expect(data).toEqual({ createTest: null });
const message = `Input error: Only one of ref and upload can be passed to ImageFieldInput`;
expectResolverError('dev', false, false, errors, [
{
path: ['createTest'],
messages: [`Test.avatar: ${message}`],
debug: [
{ message, stacktrace: expect.stringMatching(new RegExp(`Error: ${message}\n`)) },
],
},
]);
expectSingleResolverError(errors, 'createTest', 'Test.avatar', message);
})
);
});
Expand Down
@@ -1,7 +1,7 @@
import { text } from '@keystone-next/keystone/fields';
import { list } from '@keystone-next/keystone';
import { setupTestRunner } from '@keystone-next/keystone/testing';
import { apiTestConfig } from '../utils';
import { apiTestConfig, expectExtensionError } from '../utils';

const runner = setupTestRunner({
config: apiTestConfig({
Expand Down Expand Up @@ -35,20 +35,30 @@ const runner = setupTestRunner({
describe('Access control - Filter', () => {
test(
'findMany - Bad function return value',
runner(async ({ graphQLRequest }) => {
runner(async ({ context }) => {
// Valid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `query { badAccesses { id } }`,
});

// Returns null and throws an error
expect(body.data).toEqual({ badAccesses: null });
expect(body.errors).toHaveLength(1);
expect(body.errors[0].path).toEqual(['badAccesses']);
expect(body.errors[0].message).toMatchInlineSnapshot(`
"An error occured while running \\"Access control\\".
- BadAccess.access.filter.query: Variable \\"$where\\" got invalid value \\"blah\\" at \\"where.name\\"; Expected type \\"StringFilter\\" to be an object."
`);
expect(data).toEqual({ badAccesses: null });
const message =
'Variable "$where" got invalid value "blah" at "where.name"; Expected type "StringFilter" to be an object.';
expectExtensionError('dev', false, false, errors, 'Access control', [
{
path: ['badAccesses'],
messages: [`BadAccess.access.filter.query: ${message}`],
debug: [
{
message,
stacktrace: expect.stringMatching(
new RegExp(`GraphQLError: ${message.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}`)
),
},
],
},
]);
})
);
test(
Expand Down
24 changes: 12 additions & 12 deletions tests/api-tests/access-control/mutations-field.test.ts
Expand Up @@ -48,18 +48,18 @@ const runner = setupTestRunner({
describe('Access control', () => {
test(
'findMany - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
const item = await context
.sudo()
.query.User.createOne({ data: { name: 'foo', badAccess: 'bar' } });

const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `query { users { id name badAccess } }`,
});

// Returns the item, with null for the bad field, and an error message
expect(body.data).toEqual({ users: [{ id: item.id, name: 'foo', badAccess: null }] });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ users: [{ id: item.id, name: 'foo', badAccess: null }] });
expectAccessReturnError(errors, [
{
path: ['users', 0, 'badAccess'],
errors: [{ tag: 'User.badAccess.access.read', returned: 'string' }],
Expand Down Expand Up @@ -97,19 +97,19 @@ describe('Access control', () => {

test(
'createOne - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
// Valid name should pass
await context.query.User.createOne({ data: { name: 'good', other: 'a' } });

// Invalid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `mutation ($data: UserCreateInput!) { createUser(data: $data) { id } }`,
variables: { data: { name: 'fine', other: 'b', badAccess: 'bar' } },
});

// Returns null and throws an error
expect(body.data).toEqual({ createUser: null });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ createUser: null });
expectAccessReturnError(errors, [
{
path: ['createUser'],
errors: [{ tag: 'User.badAccess.access.create', returned: 'string' }],
Expand Down Expand Up @@ -157,7 +157,7 @@ describe('Access control', () => {

test(
'updateOne - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
// Valid name should pass
const user = await context.query.User.createOne({ data: { name: 'good', other: 'a' } });
await context.query.User.updateOne({
Expand All @@ -166,14 +166,14 @@ describe('Access control', () => {
});

// Invalid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `mutation ($id: ID! $data: UserUpdateInput!) { updateUser(where: { id: $id }, data: $data) { id } }`,
variables: { id: user.id, data: { name: 'bad', other: 'c', badAccess: 'bar' } },
});

// Returns null and throws an error
expect(body.data).toEqual({ updateUser: null });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ updateUser: null });
expectAccessReturnError(errors, [
{
path: ['updateUser'],
errors: [{ tag: 'User.badAccess.access.update', returned: 'string' }],
Expand Down
24 changes: 12 additions & 12 deletions tests/api-tests/access-control/mutations-list-item.test.ts
Expand Up @@ -76,16 +76,16 @@ describe('Access control - Item', () => {

test(
'createOne - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
// Valid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `mutation ($data: BadAccessCreateInput!) { createBadAccess(data: $data) { id } }`,
variables: { data: { name: 'better' } },
});

// Returns null and throws an error
expect(body.data).toEqual({ createBadAccess: null });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ createBadAccess: null });
expectAccessReturnError(errors, [
{
path: ['createBadAccess'],
errors: [{ tag: 'BadAccess.access.item.create', returned: 'object' }],
Expand Down Expand Up @@ -128,18 +128,18 @@ describe('Access control - Item', () => {

test(
'updateOne - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
const item = await context.sudo().query.BadAccess.createOne({ data: { name: 'good' } });

// Valid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `mutation ($id: ID! $data: BadAccessUpdateInput!) { updateBadAccess(where: { id: $id }, data: $data) { id } }`,
variables: { id: item.id, data: { name: 'better' } },
});

// Returns null and throws an error
expect(body.data).toEqual({ updateBadAccess: null });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ updateBadAccess: null });
expectAccessReturnError(errors, [
{
path: ['updateBadAccess'],
errors: [{ tag: 'BadAccess.access.item.update', returned: 'object' }],
Expand Down Expand Up @@ -183,18 +183,18 @@ describe('Access control - Item', () => {

test(
'deleteOne - Bad function return value',
runner(async ({ context, graphQLRequest }) => {
runner(async ({ context }) => {
const item = await context.sudo().query.BadAccess.createOne({ data: { name: 'good' } });

// Valid name
const { body } = await graphQLRequest({
const { data, errors } = await context.graphql.raw({
query: `mutation ($id: ID!) { deleteBadAccess(where: { id: $id }) { id } }`,
variables: { id: item.id },
});

// Returns null and throws an error
expect(body.data).toEqual({ deleteBadAccess: null });
expectAccessReturnError(body.errors, [
expect(data).toEqual({ deleteBadAccess: null });
expectAccessReturnError(errors, [
{
path: ['deleteBadAccess'],
errors: [{ tag: 'BadAccess.access.item.delete', returned: 'object' }],
Expand Down

0 comments on commit 7155c37

Please sign in to comment.