示例#1
0
        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);
        }
示例#2
0
        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();
        }