public void CreateSourcePropertyResolver()
        {
            // arrange
            Mock <IResolverContext> context = new Mock <IResolverContext>(MockBehavior.Strict);

            context.Setup(t => t.Parent <FooType>()).Returns(new FooType());

            FieldReference          fieldReference = new FieldReference("type", "field");
            FieldResolverDescriptor descriptor     = FieldResolverDescriptor
                                                     .CreateSourceProperty(fieldReference, typeof(FooType),
                                                                           typeof(FooType).GetProperty("BarProperty"));

            // act
            FieldResolverBuilder fieldResolverBuilder = new FieldResolverBuilder();

            FieldResolver[] resolvers = fieldResolverBuilder.Build(
                new[] { descriptor }).ToArray();

            // assert
            Assert.Collection(resolvers,
                              r =>
            {
                Assert.Equal("type", r.TypeName);
                Assert.Equal("field", r.FieldName);
                Assert.NotNull(r.Resolver);

                object result = r.Resolver(context.Object, CancellationToken.None);
                Assert.Equal("Hello World Property", result);
            });
        }
        public void CreateAsyncCollectionMethodResolver()
        {
            // arrange
            Mock <IResolverContext> context = new Mock <IResolverContext>(MockBehavior.Strict);

            context.Setup(t => t.Parent <FooType>()).Returns(new FooType());
            context.Setup(t => t.Service <FooTypeResolver>()).Returns(new FooTypeResolver());

            FieldResolverArgumentDescriptor argumentDescriptor =
                new FieldResolverArgumentDescriptor(
                    "foo", "b", FieldResolverArgumentKind.Source,
                    typeof(FooType));

            FieldReference          fieldReference = new FieldReference("type", "field");
            FieldResolverDescriptor descriptor     = FieldResolverDescriptor
                                                     .CreateCollectionMethod(fieldReference,
                                                                             typeof(FooTypeResolver), typeof(FooType),
                                                                             typeof(FooTypeResolver).GetMethod("BarResolverAsync"), true,
                                                                             new[] { argumentDescriptor });

            // act
            FieldResolverBuilder fieldResolverBuilder = new FieldResolverBuilder();

            FieldResolver[] resolvers = fieldResolverBuilder.Build(
                new[] { descriptor }).ToArray();

            // assert
            Assert.Collection(resolvers,
                              r =>
            {
                Assert.Equal("type", r.TypeName);
                Assert.Equal("field", r.FieldName);
                Assert.NotNull(r.Resolver);

                object result = ((Task <object>)r.Resolver(context.Object, CancellationToken.None)).Result;
                Assert.Equal("Hello World_123", result);
            });
        }