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 async Task InvokeAsync_ResourceInspectors_AreInvokedInSequence() { int order = 0; var syncInspector = new Mock <IHalResourceInspector>(); syncInspector.Setup(i => i.OnInspectingResource(It.IsAny <HalResourceInspectingContext>())) .Callback(() => { Assert.AreEqual(0, order++); }) .Verifiable(); syncInspector.Setup(i => i.OnInspectedResource(It.IsAny <HalResourceInspectedContext>())) .Callback(() => { Assert.AreEqual(2, order++); }) .Verifiable(); var asyncInspector = new Mock <IAsyncHalResourceInspector>(); asyncInspector.Setup(i => i.OnResourceInspectionAsync(It.IsAny <HalResourceInspectingContext>(), It.IsAny <HalResourceInspectionDelegate>())) .Callback(() => { Assert.AreEqual(1, order++); }) .Returns <HalResourceInspectingContext, HalResourceInspectionDelegate>((context, n) => Task.FromResult(new HalResourceInspectedContext(context))) .Verifiable(); var inspectors = new IHalResourceInspectorMetadata[] { syncInspector.Object, asyncInspector.Object }; var invoker = new HalResourceInspectorInvoker(inspectors, NullLogger <HalResourceInspectorInvoker> .Instance); await invoker.InspectAsync( new HalResourceInspectingContext( Mock.Of <IResource>(), Mock.Of <ActionContext>(), true, Mock.Of <ResourcePipeline>(), new MvcPipeline((HttpContext context) => Task.CompletedTask), Mock.Of <object>())); syncInspector.Verify(); asyncInspector.Verify(); }