public async Task ProcessAsync_FormActionSpecifiedAddsAttributeToOutput(string type)
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                FormAction = "foo",
                Type       = type
            };

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

            // Assert
            Assert.Equal("button", output.TagName);
            Assert.Equal("foo", output.Attributes["formaction"].Value);
        }
        public async Task ProcessAsync_CorrectlyInfersButtonElementType()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                Type = "button"
            };

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

            // Assert
            Assert.Equal("button", output.TagName);
        }
        public async Task ProcessAsync_ButtonElementGeneratesExpectedOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>());

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

            // Assert
            var html = output.AsString();

            Assert.Equal(
                "<button class=\"govuk-button\" data-module=\"govuk-button\" type=\"submit\">" +
                "Button text" +
                "</button>",
                html);
        }
        public async Task ProcessAsync_PreventDoubleClickSpecifiedAddsAttributesToOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                PreventDoubleClick = true
            };

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

            // Assert
            Assert.Equal("true", output.Attributes["data-prevent-double-click"].Value);
        }
        public async Task ProcessAsync_PreventDoubleClickSpecifiedForAnchorElementThrowsInvalidOperationException()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                PreventDoubleClick = true,
                Href = "https://place.com"
            };

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

            Assert.Equal("Cannot specify the 'prevent-double-click' attribute for 'a' elements.", ex.Message);
        }
        public async Task ProcessAsync_AnchorDisabledSpecifiedAddsDisabledAttributesToOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                Disabled = true,
                Href     = "https://place.com"
            };

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

            // Assert
            Assert.Equal("a", output.TagName);
            Assert.Contains("govuk-button--disabled", output.Attributes["class"].Value.ToString().Split(' '));
        }
        public async Task ProcessAsync_IsStartButtonAddsIconToOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper(
                new DefaultGovUkHtmlGenerator(),
                Mock.Of <IUrlHelperFactory>())
            {
                IsStartButton = true
            };

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

            // Assert
            Assert.Contains("govuk-button--start", output.Attributes["class"].Value.ToString().Split(' '));
            Assert.Contains("<svg class=\"govuk-button__start-icon\"", output.Content.GetContent());
        }
Example #8
0
        public async Task ProcessAsync_Disabled_AddsDisabledAttributesToOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper()
            {
                Disabled = true
            };

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

            // Assert
            var element = output.RenderToElement();

            Assert.Contains("govuk-button--disabled", element.ClassList);
            Assert.Equal("disabled", element.Attributes["disabled"].Value);
            Assert.Equal("true", element.Attributes["aria-disabled"].Value);
        }
Example #9
0
        public async Task ProcessAsync_GeneratesExpectedOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper();

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

            // Assert
            var expectedHtml = @"
<button class=""govuk-button"" data-module=""govuk-button"">
    Button text
</button>";

            AssertEx.HtmlEqual(expectedHtml, output.RenderToString());
        }
Example #10
0
        public async Task ProcessAsync_IsStartButton_AddsIconToOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new ButtonTagHelper()
            {
                IsStartButton = true
            };

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

            // Assert
            var element = output.RenderToElement();

            Assert.Contains("govuk-button--start", element.ClassList);

            Assert.Collection(
                element.QuerySelectorAll("svg"),
                svg => Assert.Contains("govuk-button__start-icon", svg.ClassList));
        }
        public async Task ProcessAsync_AspLinkAttributesSpecifiedWithButtonElementTypeGeneratesFormActionAttribute(
            string action,
            string controller,
            string area,
            string fragment,
            string host,
            string page,
            string pageHandler,
            string protocol,
            string route,
            IDictionary <string, string> routeValues)
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-button",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-button",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Button text");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var urlHelperFactory = new Mock <IUrlHelperFactory>();

            urlHelperFactory
            .Setup(mock => mock.GetUrlHelper(It.IsAny <ActionContext>()))
            .Returns((ActionContext actionContext) =>
            {
                var urlHelper = new Mock <IUrlHelper>();

                urlHelper.SetupGet(mock => mock.ActionContext).Returns(actionContext);

                urlHelper
                .Setup(mock => mock.Action(
                           /*actionContext: */ It.IsAny <UrlActionContext>()))
                .Returns("http://place.com");

                urlHelper
                .Setup(mock => mock.Link(
                           /*routeName: */ It.IsAny <string>(),
                           /*values: */ It.IsAny <object>()))
                .Returns("http://place.com");

                urlHelper
                .Setup(mock => mock.RouteUrl(
                           /*routeContext: */ It.IsAny <UrlRouteContext>()))
                .Returns("http://place.com");

                return(urlHelper.Object);
            });

            var viewContext = new ViewContext()
            {
                RouteData = new Microsoft.AspNetCore.Routing.RouteData()
            };

            var tagHelper = new ButtonTagHelper(new DefaultGovUkHtmlGenerator(), urlHelperFactory.Object)
            {
                Action      = action,
                Area        = area,
                Controller  = controller,
                Fragment    = fragment,
                Host        = host,
                Page        = page,
                PageHandler = pageHandler,
                Protocol    = protocol,
                Route       = route,
                RouteValues = routeValues,
                Type        = "button",
                ViewContext = viewContext
            };

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

            // Assert
            Assert.Equal("button", output.TagName);
            Assert.Equal("http://place.com", output.Attributes["formaction"].Value);
        }