diff --git a/__tests__/unit/resolvers/mirage-field-resolver-test.js b/__tests__/unit/resolvers/mirage-field-resolver-test.js index 408106f..147822f 100644 --- a/__tests__/unit/resolvers/mirage-field-resolver-test.js +++ b/__tests__/unit/resolvers/mirage-field-resolver-test.js @@ -106,6 +106,23 @@ describe("Unit | resolvers | mirage field resolver", function () { args, context, info, + false, + type + ); + }); + + it("can resolve interface list types", function () { + const type = typeMap.TestInterface; + const info = { returnType: queryFields.testInterfaceMultiple.type }; + + mirageGraphQLFieldResolver(obj, args, context, info); + + expect(resolveInterface).toHaveBeenCalledWith( + obj, + args, + context, + info, + true, type ); }); diff --git a/lib/resolvers/interface.js b/lib/resolvers/interface.js index 898a0d6..42ffd8f 100644 --- a/lib/resolvers/interface.js +++ b/lib/resolvers/interface.js @@ -1,3 +1,4 @@ +import resolveList from "./list"; import resolveObject from "./object"; function getTypeFromInlineFragment(info) { @@ -39,15 +40,25 @@ function resolveFromImplementations(obj, args, context, info, type) { * @param {Object} args * @param {Object} context * @param {Object} info + * @param {Boolean} isList * @param {Object} type An unwrapped type. * @see {@link https://graphql.org/learn/execution/#root-fields-resolvers} * @see resolveObject * @returns {Object} A record from Mirage's database. */ -export default function resolveInterface(obj, args, context, info, type) { +export default function resolveInterface( + obj, + args, + context, + info, + isList, + type +) { const implType = getTypeFromInlineFragment(info); - return implType + return isList + ? resolveList(obj, args, context, info, type) + : implType ? resolveObject(obj, args, context, info, implType) : resolveFromImplementations(obj, args, context, info, type); } diff --git a/lib/resolvers/mirage.js b/lib/resolvers/mirage.js index b0eaebf..88fdbc0 100644 --- a/lib/resolvers/mirage.js +++ b/lib/resolvers/mirage.js @@ -30,7 +30,7 @@ export default function mirageGraphQLFieldResolver(obj, args, context, info) { let { isList, type } = unwrapType(info.returnType); return isInterfaceType(type) - ? resolveInterface(obj, args, context, info, type) + ? resolveInterface(obj, args, context, info, isList, type) : isUnionType(type) ? resolveUnion(obj, args, context, info, isList, type) : !isObjectType(type)