Exemplo n.º 1
0
        public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
        {
            var viewRenderer = new PartialTagHelper(_viewEngine, _viewBufferScope)
            {
                ViewContext = ViewContext,
                Model       = null,
                Name        = "Prose/_ProseHeader"
            };

            return(viewRenderer.ProcessAsync(context, output));
        }
Exemplo n.º 2
0
    public async Task ProcessAsync_RendersMainPartial_If_FallbackIsSet_AndMainPartialIsFound()
    {
        // Arrange
        var expected     = "Hello from partial!";
        var bufferScope  = new TestViewBufferScope();
        var partialName  = "_Partial";
        var fallbackName = "_Fallback";
        var model        = new object();
        var viewContext  = GetViewContext();

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            v.Writer.Write(expected);
        })
        .Returns(Task.CompletedTask);

        var fallbackView = new Mock <IView>();

        fallbackView.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            v.Writer.Write("Hello from fallback partial!");
        })
        .Returns(Task.CompletedTask);

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));
        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), fallbackName, false))
        .Returns(ViewEngineResult.Found(fallbackName, fallbackView.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name         = partialName,
            ViewContext  = viewContext,
            FallbackName = fallbackName
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        var content = HtmlContentUtilities.HtmlContentToString(output.Content, new HtmlTestEncoder());

        Assert.Equal(expected, content);
    }
Exemplo n.º 3
0
    public async Task ProcessAsync_IfHasFallback_Throws_When_MainPartialAndFallback_AreNotFound()
    {
        // Arrange
        var bufferScope  = new TestViewBufferScope();
        var partialName  = "_Partial";
        var fallbackName = "_Fallback";
        var expected     = string.Join(
            Environment.NewLine,
            $"The partial view '{partialName}' was not found. The following locations were searched:",
            "PartialNotFound1",
            "PartialNotFound2",
            "PartialNotFound3",
            "PartialNotFound4",
            $"The fallback partial view '{fallbackName}' was not found. The following locations were searched:",
            "FallbackNotFound1",
            "FallbackNotFound2",
            "FallbackNotFound3",
            "FallbackNotFound4");
        var viewData    = new ViewDataDictionary(new TestModelMetadataProvider(), new ModelStateDictionary());
        var viewContext = GetViewContext();

        var view       = Mock.Of <IView>();
        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.NotFound(partialName, new[] { "PartialNotFound1", "PartialNotFound2" }));

        viewEngine.Setup(v => v.FindView(viewContext, partialName, false))
        .Returns(ViewEngineResult.NotFound(partialName, new[] { $"PartialNotFound3", $"PartialNotFound4" }));

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), fallbackName, false))
        .Returns(ViewEngineResult.NotFound(partialName, new[] { "FallbackNotFound1", "FallbackNotFound2" }));

        viewEngine.Setup(v => v.FindView(viewContext, fallbackName, false))
        .Returns(ViewEngineResult.NotFound(partialName, new[] { $"FallbackNotFound3", $"FallbackNotFound4" }));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name         = partialName,
            ViewContext  = viewContext,
            ViewData     = viewData,
            FallbackName = fallbackName
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act & Assert
        var exception = await Assert.ThrowsAsync <InvalidOperationException>(
            () => tagHelper.ProcessAsync(tagHelperContext, output));

        Assert.Equal(expected, exception.Message);
    }
Exemplo n.º 4
0
    public async Task ProcessAsync_SetsHtmlFieldPrefix_UsingModelExpression()
    {
        // Arrange
        var expected              = "order.items[0].Property";
        var bufferScope           = new TestViewBufferScope();
        var partialName           = "_Partial";
        var modelMetadataProvider = new TestModelMetadataProvider();
        var containerModel        = new TestModel {
            Property = new PropertyModel()
        };
        var containerModelExplorer = modelMetadataProvider.GetModelExplorerForType(
            typeof(TestModel),
            containerModel);
        var propertyModelExplorer = containerModelExplorer.GetExplorerForProperty(nameof(TestModel.Property));

        var modelExpression = new ModelExpression("Property", propertyModelExplorer);
        var viewContext     = GetViewContext();

        viewContext.ViewData.TemplateInfo.HtmlFieldPrefix = "order.items[0]";

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            Assert.Equal(expected, v.ViewData.TemplateInfo.HtmlFieldPrefix);
        })
        .Returns(Task.CompletedTask)
        .Verifiable();

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
            For         = modelExpression,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        view.Verify();
        Assert.Equal("order.items[0]", viewContext.ViewData.TemplateInfo.HtmlFieldPrefix);
    }
Exemplo n.º 5
0
    public async Task ProcessAsync_UsesModelExpression_ToDetermineModel()
    {
        // Arrange
        var expected              = new PropertyModel();
        var bufferScope           = new TestViewBufferScope();
        var partialName           = "_Partial";
        var modelMetadataProvider = new TestModelMetadataProvider();
        var containerModel        = new TestModel {
            Property = expected
        };
        var containerModelExplorer = modelMetadataProvider.GetModelExplorerForType(
            typeof(TestModel),
            containerModel);
        var propertyModelExplorer = containerModelExplorer.GetExplorerForProperty(nameof(TestModel.Property));

        var modelExpression = new ModelExpression("Property", propertyModelExplorer);
        var viewContext     = GetViewContext();

        viewContext.ViewData.Model = new object();

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            var actual = Assert.IsType <PropertyModel>(v.ViewData.Model);
            Assert.Same(expected, actual);
        })
        .Returns(Task.CompletedTask)
        .Verifiable();

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
            For         = modelExpression,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        view.Verify();
    }
Exemplo n.º 6
0
    public async Task ProcessAsync_UsesPassedInViewData_WhenNotNull()
    {
        // Arrange
        var expected    = "Explicit";
        var bufferScope = new TestViewBufferScope();
        var partialName = "_Partial";
        var model       = new object();
        var viewData    = new ViewDataDictionary(new TestModelMetadataProvider(), new ModelStateDictionary());

        viewData["key"] = expected;
        var viewContext = GetViewContext();

        viewContext.ViewData["key"] = "ViewContext";

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            v.Writer.Write(v.ViewData["key"]);
        })
        .Returns(Task.CompletedTask);

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
            ViewData    = viewData,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        var content = HtmlContentUtilities.HtmlContentToString(output.Content, new HtmlTestEncoder());

        Assert.Equal(expected, content);
    }
Exemplo n.º 7
0
    public async Task ProcessAsync_UsesViewDataFromContext()
    {
        // Arrange
        var expected    = "Implicit";
        var bufferScope = new TestViewBufferScope();
        var partialName = "_Partial";
        var viewContext = GetViewContext();

        viewContext.ViewData["key"] = expected;

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            v.Writer.Write(v.ViewData["key"]);
        })
        .Returns(Task.CompletedTask);

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.NotFound(partialName, new[] { partialName }));

        viewEngine.Setup(v => v.FindView(viewContext, partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        var content = HtmlContentUtilities.HtmlContentToString(output.Content, new HtmlTestEncoder());

        Assert.Equal(expected, content);
    }
Exemplo n.º 8
0
    public async Task ProcessAsync_IfOptional_And_ViewIsNotFound_WillNotRenderAnything()
    {
        // Arrange
        var expected    = string.Empty;
        var bufferScope = new TestViewBufferScope();
        var partialName = "_ThisViewDoesNotExists";
        var model       = new object();
        var viewContext = GetViewContext();

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            v.Writer.Write(expected);
        })
        .Returns(Task.CompletedTask);

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.NotFound(partialName, searchedLocations: Array.Empty <string>()));
        viewEngine.Setup(v => v.FindView(viewContext, partialName, false))
        .Returns(ViewEngineResult.NotFound(partialName, searchedLocations: Array.Empty <string>()));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
            Optional    = true
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        var content = HtmlContentUtilities.HtmlContentToString(output.Content, new HtmlTestEncoder());

        Assert.Empty(content);
    }
Exemplo n.º 9
0
    public async Task ProcessAsync_DoesNotModifyHtmlFieldPrefix_WhenModelExpressionIsNull()
    {
        // Arrange
        var expected    = "original";
        var bufferScope = new TestViewBufferScope();
        var partialName = "_Partial";
        var model       = new object();
        var viewContext = GetViewContext();

        viewContext.ViewData.Model = model;
        viewContext.ViewData.TemplateInfo.HtmlFieldPrefix = expected;

        var view = new Mock <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Callback((ViewContext v) =>
        {
            Assert.Equal(expected, v.ViewData.TemplateInfo.HtmlFieldPrefix);
        })
        .Returns(Task.CompletedTask)
        .Verifiable();

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        view.Verify();
    }
Exemplo n.º 10
0
    public async Task ProcessAsync_DisposesViewInstance()
    {
        // Arrange
        var bufferScope = new TestViewBufferScope();
        var partialName = "_Partial";
        var viewContext = GetViewContext();

        var disposable = new Mock <IDisposable>();

        disposable.Setup(d => d.Dispose()).Verifiable();
        var view = disposable.As <IView>();

        view.Setup(v => v.RenderAsync(It.IsAny <ViewContext>()))
        .Returns(Task.CompletedTask)
        .Verifiable();

        var viewEngine = new Mock <ICompositeViewEngine>();

        viewEngine.Setup(v => v.GetView(It.IsAny <string>(), partialName, false))
        .Returns(ViewEngineResult.Found(partialName, view.Object));

        var tagHelper = new PartialTagHelper(viewEngine.Object, bufferScope)
        {
            Name        = partialName,
            ViewContext = viewContext,
        };
        var tagHelperContext = GetTagHelperContext();
        var output           = GetTagHelperOutput();

        // Act
        await tagHelper.ProcessAsync(tagHelperContext, output);

        // Assert
        disposable.Verify();
        view.Verify();
    }