private async Task <IResource> ResourcePipeline(ActionContext actionContext, object resourceObject, bool isRoot) { // TODO: Should the resourceObject actually be an objectresult? if (actionContext == null) { throw new ArgumentNullException(nameof(actionContext)); } var resourceFactoryContext = new ResourceFactoryContext { ActionContext = actionContext, Resource = resourceObject, IsRootResource = isRoot }; var resource = await InvokeResourceFactory(resourceFactoryContext); var lggr = this.loggerFactory.CreateLogger <HalResourceInspectorInvoker>(); var inspectors = this.selector.Select(isRoot); var resourceInspector = new HalResourceInspectorInvoker( inspectors, lggr); var inspectingContext = new HalResourceInspectingContext( resource, actionContext, isRoot, EmbeddedResourceFactory, this.mvcPipeline, resourceObject); var result = await resourceInspector.InspectAsync(inspectingContext); return(result.Resource); }
public void IsRootResource_DefaultFalse() { // Arrange var context = new ResourceFactoryContext(); // Act bool isRoot = context.IsRootResource; // Assert Assert.IsFalse(isRoot); }
public void IsRootResource_GetSet() { // Arrange var context = new ResourceFactoryContext(); // Act context.IsRootResource = true; bool isRoot = context.IsRootResource; // Assert Assert.IsTrue(isRoot); }
public void Resource_GetSet() { // Arrange var context = new ResourceFactoryContext(); var stub = Mock.Of <IResource>(); // Act context.Resource = stub; // Assert Assert.AreSame(stub, context.Resource); }
public void ActionContext_GetSet() { // Arrange var context = new ResourceFactoryContext(); var stub = Mock.Of <ActionContext>(); // Act context.ActionContext = stub; // Assert Assert.AreSame(stub, context.ActionContext); }
public void CreateResource_IResourceUnchanged() { var factory = new DefaultHalResourceFactory(); var resource = Mock.Of <IResource>(); var context = new ResourceFactoryContext { Resource = resource }; var result = factory.CreateResource(context); Assert.AreSame(resource, result); }
public void CreateResource_EnumerableCreatesCollection() { var factory = new DefaultHalResourceFactory(); object resource = new List <string>(); var context = new ResourceFactoryContext { Resource = resource }; var result = factory.CreateResource(context); Assert.IsNotNull(result); Assert.IsInstanceOf <ResourceCollection <object> >(result); }
private async Task <IResource> InvokeResourceFactory(ResourceFactoryContext context) { if (this.resourceFactory is IAsyncHalResourceFactory asyncFactory) { return(await asyncFactory.CreateResourceAsync(context)); } else if (this.resourceFactory is IHalResourceFactory syncFactory) { return(syncFactory.CreateResource(context)); } else { throw new HalException($"Could not understand hal resource factory type. Expecting {nameof(IAsyncHalResourceFactory)} or {nameof(IHalResourceFactory)}."); } }
public void CreateResource_NoResource_Wrapped() { var factory = new DefaultHalResourceFactory(); object resource = new object(); var context = new ResourceFactoryContext { Resource = resource }; var result = factory.CreateResource(context); Assert.IsInstanceOf <Resource <object> >(result); var casted = (Resource <object>)result; Assert.AreSame(resource, casted.Data); }
public void CreateResource_EnumerableIncludedInCollection() { var factory = new DefaultHalResourceFactory(); object resource = new List <object> { new object(), new object() }; var context = new ResourceFactoryContext { Resource = resource }; var result = factory.CreateResource(context); var casted = (IResourceCollection)result; Assert.AreEqual(2, casted.Collection.Count); }
public void CreateResource_NullResourceIsFine() { var factory = new DefaultHalResourceFactory(); object resource = null; var context = new ResourceFactoryContext { Resource = resource }; var result = factory.CreateResource(context); Assert.IsNotNull(result); Assert.IsInstanceOf <Resource <object> >(result); var casted = (Resource <object>)result; Assert.IsNull(casted.Data); }
public void Ctor_HasDefaultConstructor() { // Won't compile if not true var context = new ResourceFactoryContext(); }