public async Task TemplateIsInterface_SourceDataDoesNotImplementInterface_FailsRequest() { var server = new TestServerBuilder() .AddGraphType <ResolverObject>() .Build(); var fieldContextBuilder = server.CreateFieldContextBuilder <ResolverObject>(nameof(ResolverObject.Address1)); fieldContextBuilder.AddSourceData(new TwoPropertyObject()); // set properties parent to be an interface // that hte source data is not castable to var parentMock = new Mock <IGraphTypeTemplate>(); parentMock.Setup(x => x.ObjectType).Returns(typeof(ITestInterface)); fieldContextBuilder.GraphMethod.Setup(x => x.Parent).Returns(parentMock.Object); var resolver = new GraphObjectPropertyResolver(fieldContextBuilder.GraphMethod.Object); var resolutionContext = fieldContextBuilder.CreateResolutionContext(); await resolver.Resolve(resolutionContext); Assert.AreEqual(null, resolutionContext.Result); Assert.IsFalse(resolutionContext.Messages.IsSucessful); Assert.AreEqual(Constants.ErrorCodes.INVALID_OBJECT, resolutionContext.Messages[0].Code); }
public async Task TemplateIsInterface_SourceDataDoesImplementInterface_RendersCorrectly() { var server = new TestServerBuilder() .AddGraphType <ResolverObject>() .AddGraphType <IResolverInterface>() .Build(); var fieldContextBuilder = server.CreateFieldContextBuilder <ResolverObject>(nameof(ResolverObject.Address1)); var item = new ResolverObject(); item.Address1 = "15th Street"; fieldContextBuilder.AddSourceData(item); // set properties parent to be an interface that the source data is castable // this scenario shouldnt be possible in general execution but exists // in case of developers extending the framework var parentMock = new Mock <IGraphTypeTemplate>(); parentMock.Setup(x => x.ObjectType).Returns(typeof(IResolverInterface)); fieldContextBuilder.GraphMethod.Setup(x => x.Parent).Returns(parentMock.Object); var resolver = new GraphObjectPropertyResolver(fieldContextBuilder.GraphMethod.Object); var resolutionContext = fieldContextBuilder.CreateResolutionContext(); await resolver.Resolve(resolutionContext); Assert.AreEqual("15th Street", resolutionContext.Result); Assert.IsTrue(resolutionContext.Messages.IsSucessful); }
public async Task NullSourceData_FailsRequest() { var server = new TestServerBuilder() .AddGraphType <ResolverObject>() .Build(); var fieldContextBuilder = server.CreateFieldContextBuilder <ResolverObject>( nameof(ResolverObject.Address1)); fieldContextBuilder.AddSourceData(null); var resolutionContext = fieldContextBuilder.CreateResolutionContext(); var resolver = new GraphObjectPropertyResolver(fieldContextBuilder.GraphMethod.Object); await resolver.Resolve(resolutionContext); Assert.AreEqual(null, resolutionContext.Result); Assert.IsFalse(resolutionContext.Messages.IsSucessful); Assert.AreEqual(Constants.ErrorCodes.INVALID_OBJECT, resolutionContext.Messages[0].Code); }
public async Task PropertyThrowsException_FailsRequest() { var server = new TestServerBuilder() .AddGraphType <ResolverObject>() .Build(); var fieldContextBuilder = server.CreateFieldContextBuilder <ResolverObject>( nameof(ResolverObject.PropertyThrowException)); // source data is not of the type the resolver is for fieldContextBuilder.AddSourceData(new ResolverObject()); var resolver = new GraphObjectPropertyResolver(fieldContextBuilder.GraphMethod.Object); var resolutionContext = fieldContextBuilder.CreateResolutionContext(); await resolver.Resolve(resolutionContext); Assert.AreEqual(null, resolutionContext.Result); Assert.IsFalse(resolutionContext.Messages.IsSucessful); Assert.IsTrue(resolutionContext.Messages[0].Exception is InvalidOperationException); Assert.AreEqual("resolver.property.throwException", resolutionContext.Messages[0].Exception.Message); Assert.AreEqual(Constants.ErrorCodes.UNHANDLED_EXCEPTION, resolutionContext.Messages[0].Code); }