Skip to content
This repository has been archived by the owner on Apr 15, 2020. It is now read-only.

Commit

Permalink
fix(tests): v12 and v13 extensionASTNode support
Browse files Browse the repository at this point in the history
v12 does not support extensionASTNodes
v13 supports extensionASTNodes for query, mutation, and interface types
  • Loading branch information
yaacovCR committed Mar 12, 2020
1 parent c0941a9 commit ed48c59
Showing 1 changed file with 90 additions and 35 deletions.
125 changes: 90 additions & 35 deletions src/test/testDirectives.ts
Expand Up @@ -31,9 +31,12 @@ import formatDate from 'dateformat';

import { makeExecutableSchema } from '../makeExecutableSchema';
import { VisitableSchemaType } from '../Interfaces';
import { SchemaDirectiveVisitor } from '../utils/SchemaDirectiveVisitor';
import { SchemaVisitor } from '../utils/SchemaVisitor';
import { visitSchema } from '../utils/visitSchema';
import {
SchemaDirectiveVisitor,
SchemaVisitor,
visitSchema,
graphqlVersion,
} from '../utils';

const typeDefs = `
directive @schemaDirective(role: String) on SCHEMA
Expand Down Expand Up @@ -67,57 +70,89 @@ schema @schemaDirective(role: "admin") {
mutation: Mutation
}
extend schema @schemaExtensionDirective(role: "admin")
${
graphqlVersion() >= 14
? 'extend schema @schemaExtensionDirective(role: "admin")'
: ''
}
type Query @queryTypeDirective {
people: [Person] @queryFieldDirective
}
extend type Query @queryTypeExtensionDirective
${
graphqlVersion() >= 13 ? 'extend type Query @queryTypeExtensionDirective' : ''
}
enum Gender @enumTypeDirective {
NONBINARY @enumValueDirective
FEMALE
MALE
}
extend enum Gender @enumTypeExtensionDirective
${
graphqlVersion() >= 14 ? 'extend enum Gender @enumTypeExtensionDirective' : ''
}
scalar Date @dateDirective(tz: "utc")
extend scalar Date @dateExtensionDirective(tz: "utc")
${
graphqlVersion() >= 14
? 'extend scalar Date @dateExtensionDirective(tz: "utc")'
: ''
}
interface Named @interfaceDirective {
name: String! @interfaceFieldDirective
}
extend interface Named @interfaceExtensionDirective
${
graphqlVersion() >= 13
? 'extend interface Named @interfaceExtensionDirective'
: ''
}
input PersonInput @inputTypeDirective {
name: String! @inputFieldDirective
gender: Gender
}
extend input PersonInput @inputTypeExtensionDirective
${
graphqlVersion() >= 14
? 'extend input PersonInput @inputTypeExtensionDirective'
: ''
}
type Mutation @mutationTypeDirective {
addPerson(
input: PersonInput @mutationArgumentDirective
): Person @mutationMethodDirective
}
extend type Mutation @mutationTypeExtensionDirective
${
graphqlVersion() >= 13
? 'extend type Mutation @mutationTypeExtensionDirective'
: ''
}
type Person implements Named @objectTypeDirective {
id: ID! @objectFieldDirective
name: String!
}
extend type Person @objectTypeExtensionDirective
${
graphqlVersion() >= 14
? 'extend type Person @objectTypeExtensionDirective'
: ''
}
union WhateverUnion @unionDirective = Person | Query | Mutation
extend union WhateverUnion @unionExtensionDirective
${
graphqlVersion() >= 14
? 'extend union WhateverUnion @unionExtensionDirective'
: ''
}
`;

describe('@directives', () => {
Expand Down Expand Up @@ -163,45 +198,57 @@ describe('@directives', () => {
return directives;
}

assert.deepEqual(getDirectiveNames(schema), [
'schemaDirective',
'schemaExtensionDirective',
]);
assert.deepEqual(
getDirectiveNames(schema),
graphqlVersion() >= 14
? ['schemaDirective', 'schemaExtensionDirective']
: ['schemaDirective'],
);

checkDirectives(
schema.getQueryType(),
['queryTypeDirective', 'queryTypeExtensionDirective'],
graphqlVersion() >= 13
? ['queryTypeDirective', 'queryTypeExtensionDirective']
: ['queryTypeDirective'],
{
people: ['queryFieldDirective'],
},
);

assert.deepEqual(getDirectiveNames(schema.getType('Gender')), [
'enumTypeDirective',
'enumTypeExtensionDirective',
]);
assert.deepEqual(
getDirectiveNames(schema.getType('Gender')),
graphqlVersion() >= 14
? ['enumTypeDirective', 'enumTypeExtensionDirective']
: ['enumTypeDirective'],
);

const nonBinary = (schema.getType(
'Gender',
) as GraphQLEnumType).getValues()[0];
assert.deepEqual(getDirectiveNames(nonBinary), ['enumValueDirective']);

checkDirectives(schema.getType('Date') as GraphQLObjectType, [
'dateDirective',
'dateExtensionDirective',
]);
checkDirectives(
schema.getType('Date') as GraphQLObjectType,
graphqlVersion() >= 14
? ['dateDirective', 'dateExtensionDirective']
: ['dateDirective'],
);

checkDirectives(
schema.getType('Named') as GraphQLObjectType,
['interfaceDirective', 'interfaceExtensionDirective'],
graphqlVersion() >= 13
? ['interfaceDirective', 'interfaceExtensionDirective']
: ['interfaceDirective'],
{
name: ['interfaceFieldDirective'],
},
);

checkDirectives(
schema.getType('PersonInput') as GraphQLObjectType,
['inputTypeDirective', 'inputTypeExtensionDirective'],
graphqlVersion() >= 14
? ['inputTypeDirective', 'inputTypeExtensionDirective']
: ['inputTypeDirective'],
{
name: ['inputFieldDirective'],
gender: [],
Expand All @@ -210,7 +257,9 @@ describe('@directives', () => {

checkDirectives(
schema.getMutationType(),
['mutationTypeDirective', 'mutationTypeExtensionDirective'],
graphqlVersion() >= 13
? ['mutationTypeDirective', 'mutationTypeExtensionDirective']
: ['mutationTypeDirective'],
{
addPerson: ['mutationMethodDirective'],
},
Expand All @@ -222,17 +271,21 @@ describe('@directives', () => {

checkDirectives(
schema.getType('Person'),
['objectTypeDirective', 'objectTypeExtensionDirective'],
graphqlVersion() >= 14
? ['objectTypeDirective', 'objectTypeExtensionDirective']
: ['objectTypeDirective'],
{
id: ['objectFieldDirective'],
name: [],
},
);

checkDirectives(schema.getType('WhateverUnion'), [
'unionDirective',
'unionExtensionDirective',
]);
checkDirectives(
schema.getType('WhateverUnion'),
graphqlVersion() >= 14
? ['unionDirective', 'unionExtensionDirective']
: ['unionDirective'],
);
});

it('works with enum and its resolvers', () => {
Expand Down Expand Up @@ -304,9 +357,11 @@ describe('@directives', () => {
}
},
});
assert.strictEqual(visited.length, 2);
assert.strictEqual(visited.length, graphqlVersion() >= 14 ? 2 : 1);
assert.strictEqual(visited[0], schema);
assert.strictEqual(visited[1], schema);
if (graphqlVersion() >= 14) {
assert.strictEqual(visited[1], schema);
}
});

it('can visit fields within object types', () => {
Expand Down

0 comments on commit ed48c59

Please sign in to comment.