Fix Unknow type merge bug on overloaded types (#6494)

* Fix Unknow type bug on overloaded types

* check args too
This commit is contained in:
Antoine Cormouls
2020-03-11 20:59:18 +01:00
committed by GitHub
parent 35d76b8ff5
commit 16a974a04a
2 changed files with 30 additions and 4 deletions

View File

@@ -10821,11 +10821,11 @@ describe('ParseGraphQLServer', () => {
expect(result2.data.someClass.name).toEqual('aname');
expect(result.data.someClass.language).toEqual('fr');
const result3 = await apolloClient.mutate({
variables: { id: obj.id, name: 'anewname' },
variables: { id: obj.id, name: 'anewname', type: 'human' },
mutation: gql`
mutation someClass($id: ID!, $name: String!) {
mutation someClass($id: ID!, $name: String!, $type: TypeEnum!) {
updateSomeClass(
input: { id: $id, fields: { name: $name, type: human } }
input: { id: $id, fields: { name: $name, type: $type } }
) {
someClass {
nameUpperCase

View File

@@ -211,7 +211,33 @@ class ParseGraphQLSchema {
const autoGraphQLSchemaType = this.graphQLAutoSchema.getType(
customGraphQLSchemaType.name
);
if (autoGraphQLSchemaType) {
if (
autoGraphQLSchemaType &&
typeof customGraphQLSchemaType.getFields === 'function'
) {
const findAndAddLastType = type => {
if (type.name) {
if (!this.graphQLAutoSchema.getType(type)) {
// To avoid schema stitching (Unknow type) bug on variables
// transfer the final type to the Auto Schema
this.graphQLAutoSchema._typeMap[type.name] = type;
}
} else {
if (type.ofType) {
findAndAddLastType(type.ofType);
}
}
};
Object.values(customGraphQLSchemaType.getFields()).forEach(
field => {
findAndAddLastType(field.type);
if (field.args) {
field.args.forEach(arg => {
findAndAddLastType(arg.type);
});
}
}
);
autoGraphQLSchemaType._fields = {
...autoGraphQLSchemaType._fields,
...customGraphQLSchemaType._fields,