Skip to content

Commit 1e2988e

Browse files
committed
fix chain and add test
1 parent 46ae4b1 commit 1e2988e

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/execution/__tests__/abstract-test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -669,6 +669,10 @@ describe('Execute: Handles execution of abstract types', () => {
669669
name: String
670670
isFriendly: Boolean
671671
}
672+
673+
type Person implements Named {
674+
name: String
675+
}
672676
`);
673677

674678
const document = parse(`
@@ -706,6 +710,13 @@ describe('Execute: Handles execution of abstract types', () => {
706710
);
707711

708712
const petType = assertInterfaceType(schema.getType('Pet'));
713+
// FIXME: workaround since we can't inject resolveType into SDL
714+
namedType.resolveType = () => 'Pet';
715+
petType.resolveType = () => 'Person';
716+
expectError().toEqual(
717+
'Abstract type resolution for "Named" for field "Query.named" failed. Runtime Object type "Person" is not a possible type for encountered abstract type "Pet".',
718+
);
719+
709720
// FIXME: workaround since we can't inject resolveType into SDL
710721
namedType.resolveType = () => 'Pet';
711722
petType.resolveType = () => undefined;

src/execution/execute.ts

+10-10
Original file line numberDiff line numberDiff line change
@@ -881,7 +881,7 @@ function deriveRuntimeType(
881881
runtimeTypeName: unknown,
882882
exeContext: ExecutionContext,
883883
returnType: GraphQLAbstractType,
884-
abstractType: GraphQLAbstractType,
884+
currentAbstractType: GraphQLAbstractType,
885885
fieldNodes: ReadonlyArray<FieldNode>,
886886
info: GraphQLResolveInfo,
887887
result: unknown,
@@ -890,8 +890,8 @@ function deriveRuntimeType(
890890
if (runtimeTypeName == null) {
891891
throw new GraphQLError(
892892
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
893-
`Encountered abstract type "${abstractType.name}" must resolve to an Object or Interface type at runtime. ` +
894-
`Either the "${abstractType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,
893+
`Encountered abstract type "${currentAbstractType.name}" must resolve to an Object or Interface type at runtime. ` +
894+
`Either the "${currentAbstractType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,
895895
{ nodes: fieldNodes },
896896
);
897897
}
@@ -908,15 +908,15 @@ function deriveRuntimeType(
908908
throw new GraphQLError(
909909
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" ` +
910910
`with value ${inspect(result)} failed. ` +
911-
`Encountered abstract type "${abstractType.name}" must resolve to an Object or Interface type at runtime, ` +
911+
`Encountered abstract type "${currentAbstractType.name}" must resolve to an Object or Interface type at runtime, ` +
912912
`received "${inspect(runtimeTypeName)}".`,
913913
);
914914
}
915915

916916
if (encounteredTypeNames.has(runtimeTypeName)) {
917917
throw new GraphQLError(
918918
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
919-
`Encountered abstract type "${abstractType.name}" resolved to "${runtimeTypeName}", causing a cycle.`,
919+
`Encountered abstract type "${currentAbstractType.name}" resolved to "${runtimeTypeName}", causing a cycle.`,
920920
);
921921
}
922922
encounteredTypeNames.add(runtimeTypeName);
@@ -925,13 +925,13 @@ function deriveRuntimeType(
925925
if (runtimeType == null) {
926926
throw new GraphQLError(
927927
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
928-
`Encountered abstract type "${abstractType.name}" was resolved to a type "${runtimeTypeName}" that does not exist inside the schema.`,
928+
`Encountered abstract type "${currentAbstractType.name}" was resolved to a type "${runtimeTypeName}" that does not exist inside the schema.`,
929929
{ nodes: fieldNodes },
930930
);
931931
}
932932

933933
if (isInterfaceType(runtimeType)) {
934-
if (!exeContext.schema.isSubType(returnType, runtimeType)) {
934+
if (!exeContext.schema.isSubType(currentAbstractType, runtimeType)) {
935935
throw new GraphQLError(
936936
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
937937
`Interface type "${runtimeType.name}" is not a subtype of encountered interface type "${returnType.name}".`,
@@ -953,15 +953,15 @@ function deriveRuntimeType(
953953
if (!isObjectType(runtimeType)) {
954954
throw new GraphQLError(
955955
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
956-
`Encountered abstract type "${abstractType.name}" was resolved to a non-object type "${runtimeTypeName}".`,
956+
`Encountered abstract type "${currentAbstractType.name}" was resolved to a non-object type "${runtimeTypeName}".`,
957957
{ nodes: fieldNodes },
958958
);
959959
}
960960

961-
if (!exeContext.schema.isSubType(returnType, runtimeType)) {
961+
if (!exeContext.schema.isSubType(currentAbstractType, runtimeType)) {
962962
throw new GraphQLError(
963963
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
964-
`Runtime Object type "${runtimeType.name}" is not a possible type for encountered abstract type "${abstractType.name}".`,
964+
`Runtime Object type "${runtimeType.name}" is not a possible type for encountered abstract type "${currentAbstractType.name}".`,
965965
{ nodes: fieldNodes },
966966
);
967967
}

0 commit comments

Comments
 (0)