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()); }
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); }
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()); }
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); }