public async Task ProcessAsync_SetsLegendOnContext() { // Arrange var fieldsetContext = new CheckboxesFieldsetContext(); var context = new TagHelperContext( tagName: "govuk-checkboxes-fieldset-legend", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>() { { typeof(CheckboxesFieldsetContext), fieldsetContext } }, uniqueId: "test"); var output = new TagHelperOutput( "govuk-checkboxes-fieldset-legend", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetHtmlContent(new HtmlString("Legend")); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); var tagHelper = new CheckboxesFieldsetLegendTagHelper(); // Act await tagHelper.ProcessAsync(context, output); // Assert Assert.Equal("Legend", fieldsetContext.Legend?.content?.AsString()); }
public async Task ProcessAsync_ParentAlreadyHasFieldset_ThrowsInvalidOperationException() { // Arrange var checkboxesContext = new CheckboxesContext(name: null, aspFor: null); checkboxesContext.OpenFieldset(); var checkboxesFieldsetContext = new CheckboxesFieldsetContext(attributes: null); checkboxesFieldsetContext.SetLegend(isPageHeading: false, attributes: null, content: new HtmlString("Existing legend")); checkboxesContext.CloseFieldset(checkboxesFieldsetContext); var context = new TagHelperContext( tagName: "govuk-checkboxes-fieldset", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>() { { typeof(CheckboxesContext), checkboxesContext } }, uniqueId: "test"); var output = new TagHelperOutput( "govuk-checkboxes-fieldset", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var fieldsetContext = context.GetContextItem <CheckboxesFieldsetContext>(); fieldsetContext.SetLegend(isPageHeading: true, attributes: null, content: new HtmlString("Legend")); var tagHelperContent = new DefaultTagHelperContent(); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); var tagHelper = new CheckboxesFieldsetTagHelper(); // Act var ex = await Record.ExceptionAsync(() => tagHelper.ProcessAsync(context, output)); // Assert Assert.IsType <InvalidOperationException>(ex); Assert.Equal("Only one <govuk-checkboxes-fieldset> element is permitted within each <govuk-checkboxes>.", ex.Message); }
public void AddItem_OutsideOfFieldset_ThrowsInvalidOperationException() { // Arrange var context = new CheckboxesContext(name: null, aspFor: null); var item = new CheckboxesItem() { LabelContent = new HtmlString("Item 1"), Value = "item1" }; context.OpenFieldset(); var fieldsetContext = new CheckboxesFieldsetContext(attributes: null); context.CloseFieldset(fieldsetContext); // Act var ex = Record.Exception(() => context.AddItem(item)); // Assert Assert.IsType <InvalidOperationException>(ex); Assert.Equal("<govuk-checkboxes-item> must be inside <govuk-checkboxes-fieldset>.", ex.Message); }
public async Task ProcessAsync_AddsLegendToContext() { // Arrange var fieldsetContext = new CheckboxesFieldsetContext(attributes: null); var context = new TagHelperContext( tagName: "govuk-checkboxes-fieldset-legend", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>() { { typeof(CheckboxesFieldsetContext), fieldsetContext } }, uniqueId: "test"); var output = new TagHelperOutput( "govuk-checkboxes-fieldset-legend", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var tagHelperContent = new DefaultTagHelperContent(); tagHelperContent.SetContent("Legend content"); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); var tagHelper = new CheckboxesFieldsetLegendTagHelper() { IsPageHeading = true }; // Act await tagHelper.ProcessAsync(context, output); // Assert Assert.Equal("Legend content", fieldsetContext.Legend?.Content.RenderToString()); Assert.True(fieldsetContext.Legend?.IsPageHeading); }
public async Task ProcessAsync_WithFieldset_GeneratesExpectedOutput() { // Arrange var context = new TagHelperContext( tagName: "govuk-checkboxes", allAttributes: new TagHelperAttributeList(), items: new Dictionary <object, object>(), uniqueId: "test"); var output = new TagHelperOutput( "govuk-checkboxes", attributes: new TagHelperAttributeList(), getChildContentAsync: (useCachedResult, encoder) => { var checkboxesContext = context.GetContextItem <CheckboxesContext>(); checkboxesContext.OpenFieldset(); var checkboxesFieldsetContext = new CheckboxesFieldsetContext(attributes: null); checkboxesFieldsetContext.SetLegend(isPageHeading: false, attributes: null, content: new HtmlString("Legend")); checkboxesContext.SetHint(attributes: null, content: new HtmlString("The hint")); checkboxesContext.AddItem(new CheckboxesItem() { Checked = false, LabelContent = new HtmlString("First"), Disabled = true, Id = "first", Value = "first" }); checkboxesContext.AddItem(new CheckboxesItem() { Checked = true, LabelContent = new HtmlString("Second"), Disabled = false, Id = "second", Value = "second" }); checkboxesContext.CloseFieldset(checkboxesFieldsetContext); var tagHelperContent = new DefaultTagHelperContent(); return(Task.FromResult <TagHelperContent>(tagHelperContent)); }); var tagHelper = new CheckboxesTagHelper(new ComponentGenerator(), new DefaultModelHelper()) { DescribedBy = "describedby", IdPrefix = "my-id", Name = "testcheckboxes" }; // Act await tagHelper.ProcessAsync(context, output); // Assert var expectedHtml = @" <div class=""govuk-form-group""> <fieldset aria-describedby=""describedby my-id-hint"" class=""govuk-fieldset""> <legend class=""govuk-fieldset__legend"">Legend</legend> <div class=""govuk-hint"" id=""my-id-hint"">The hint</div> <div class=""govuk-checkboxes"" data-module=""govuk-checkboxes""> <div class=""govuk-checkboxes__item""> <input class=""govuk-checkboxes__input"" id=""first"" name=""testcheckboxes"" type=""checkbox"" value=""first"" disabled=""disabled"" /> <label class=""govuk-checkboxes__label govuk-label"" for=""first"">First</label> </div> <div class=""govuk-checkboxes__item""> <input class=""govuk-checkboxes__input"" id=""second"" name=""testcheckboxes"" type=""checkbox"" value=""second"" checked=""checked"" /> <label class=""govuk-checkboxes__label govuk-label"" for=""second"">Second</label> </div> </div> </fieldset> </div>"; AssertEx.HtmlEqual(expectedHtml, output.RenderToString()); }