Skip to content

Commit 7167fcf

Browse files
committed
fix chain and add test
1 parent 00dbea1 commit 7167fcf

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/execution/__tests__/abstract-test.ts

Lines changed: 11 additions & 0 deletions
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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ function deriveRuntimeType(
877877
runtimeTypeName: unknown,
878878
exeContext: ExecutionContext,
879879
returnType: GraphQLAbstractType,
880-
abstractType: GraphQLAbstractType,
880+
currentAbstractType: GraphQLAbstractType,
881881
fieldNodes: ReadonlyArray<FieldNode>,
882882
info: GraphQLResolveInfo,
883883
result: unknown,
@@ -886,8 +886,8 @@ function deriveRuntimeType(
886886
if (runtimeTypeName == null) {
887887
throw new GraphQLError(
888888
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
889-
`Encountered abstract type "${abstractType.name}" must resolve to an Object or Interface type at runtime. ` +
890-
`Either the "${abstractType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,
889+
`Encountered abstract type "${currentAbstractType.name}" must resolve to an Object or Interface type at runtime. ` +
890+
`Either the "${currentAbstractType.name}" type should provide a "resolveType" function or each possible type should provide an "isTypeOf" function.`,
891891
{ nodes: fieldNodes },
892892
);
893893
}
@@ -904,15 +904,15 @@ function deriveRuntimeType(
904904
throw new GraphQLError(
905905
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" ` +
906906
`with value ${inspect(result)} failed. ` +
907-
`Encountered abstract type "${abstractType.name}" must resolve to an Object or Interface type at runtime, ` +
907+
`Encountered abstract type "${currentAbstractType.name}" must resolve to an Object or Interface type at runtime, ` +
908908
`received "${inspect(runtimeTypeName)}".`,
909909
);
910910
}
911911

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

929929
if (isInterfaceType(runtimeType)) {
930-
if (!exeContext.schema.isSubType(returnType, runtimeType)) {
930+
if (!exeContext.schema.isSubType(currentAbstractType, runtimeType)) {
931931
throw new GraphQLError(
932932
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
933933
`Interface type "${runtimeType.name}" is not a subtype of encountered interface type "${returnType.name}".`,
@@ -949,15 +949,15 @@ function deriveRuntimeType(
949949
if (!isObjectType(runtimeType)) {
950950
throw new GraphQLError(
951951
`Abstract type resolution for "${returnType.name}" for field "${info.parentType.name}.${info.fieldName}" failed. ` +
952-
`Encountered abstract type "${abstractType.name}" was resolved to a non-object type "${runtimeTypeName}".`,
952+
`Encountered abstract type "${currentAbstractType.name}" was resolved to a non-object type "${runtimeTypeName}".`,
953953
{ nodes: fieldNodes },
954954
);
955955
}
956956

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

0 commit comments

Comments
 (0)