public void SetItem_OutsideOfFieldset_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new DateInputContext(haveExplicitValue: false);

            context.OpenFieldset();
            var fieldsetContext = new DateInputFieldsetContext(attributes: null);

            context.CloseFieldset(fieldsetContext);

            // Act
            var ex = Record.Exception(() => context.SetItem(DateInputItemType.Month, new DateInputContextItem()));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("<govuk-date-input-month> must be inside <govuk-date-input-fieldset>.", ex.Message);
        }
Exemplo n.º 2
0
        public async Task ProcessAsync_ParentAlreadyHasFieldset_ThrowsInvalidOperationException()
        {
            // Arrange
            var dateInputContext = new DateInputContext(haveExplicitValue: false);

            dateInputContext.OpenFieldset();
            var checkboxesFieldsetContext = new DateInputFieldsetContext(attributes: null);

            checkboxesFieldsetContext.SetLegend(isPageHeading: false, attributes: null, content: new HtmlString("Existing legend"));
            dateInputContext.CloseFieldset(checkboxesFieldsetContext);

            var context = new TagHelperContext(
                tagName: "govuk-date-input-fieldset",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>()
            {
                { typeof(DateInputContext), dateInputContext }
            },
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-date-input-fieldset",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var fieldsetContext = context.GetContextItem <DateInputFieldsetContext>();
                fieldsetContext.SetLegend(isPageHeading: true, attributes: null, content: new HtmlString("Legend"));

                var tagHelperContent = new DefaultTagHelperContent();
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new DateInputFieldsetTagHelper();

            // Act
            var ex = await Record.ExceptionAsync(() => tagHelper.ProcessAsync(context, output));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("Only one <govuk-date-input-fieldset> element is permitted within each <govuk-date-input>.", ex.Message);
        }
        public void SetHint_OutsideOfFieldset_ThrowsInvalidOperationException()
        {
            // Arrange
            var context = new DateInputContext(haveExplicitValue: false);

            var item = new DateInputContextItem()
            {
                LabelContent = new HtmlString("Day")
            };

            context.OpenFieldset();
            var fieldsetContext = new DateInputFieldsetContext(attributes: null);

            context.CloseFieldset(fieldsetContext);

            // Act
            var ex = Record.Exception(() => context.SetHint(attributes: null, new HtmlString("Hint")));

            // Assert
            Assert.IsType <InvalidOperationException>(ex);
            Assert.Equal("<govuk-date-input-hint> must be inside <govuk-date-input-fieldset>.", ex.Message);
        }
Exemplo n.º 4
0
        public async Task ProcessAsync_AddsLegendToContext()
        {
            // Arrange
            var fieldsetContext = new DateInputFieldsetContext(attributes: null);

            var context = new TagHelperContext(
                tagName: "govuk-date-input-fieldset-legend",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>()
            {
                { typeof(DateInputFieldsetContext), fieldsetContext }
            },
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-date-input-fieldset-legend",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var tagHelperContent = new DefaultTagHelperContent();
                tagHelperContent.SetContent("Legend content");
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new DateInputFieldsetLegendTagHelper()
            {
                IsPageHeading = true
            };

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

            // Assert
            Assert.Equal("Legend content", fieldsetContext.Legend?.Content.RenderToString());
            Assert.True(fieldsetContext.Legend?.IsPageHeading);
        }
Exemplo n.º 5
0
        public async Task ProcessAsync_WithFieldset_GeneratesExpectedOutput()
        {
            // Arrange
            var context = new TagHelperContext(
                tagName: "govuk-date-input",
                allAttributes: new TagHelperAttributeList(),
                items: new Dictionary <object, object>(),
                uniqueId: "test");

            var output = new TagHelperOutput(
                "govuk-date-input",
                attributes: new TagHelperAttributeList(),
                getChildContentAsync: (useCachedResult, encoder) =>
            {
                var dateInputContext = context.GetContextItem <DateInputContext>();

                dateInputContext.OpenFieldset();
                var dateInputFieldsetContext = new DateInputFieldsetContext(attributes: null);
                dateInputFieldsetContext.SetLegend(isPageHeading: false, attributes: null, content: new HtmlString("Legend"));

                dateInputContext.CloseFieldset(dateInputFieldsetContext);

                var tagHelperContent = new DefaultTagHelperContent();
                return(Task.FromResult <TagHelperContent>(tagHelperContent));
            });

            var tagHelper = new DateInputTagHelper(Options.Create(new GovUkFrontendAspNetCoreOptions()), new DateInputParseErrorsProvider())
            {
                DescribedBy = "describedby",
                Id          = "my-id",
                NamePrefix  = "my-name",
                Value       = new Date(2020, 4, 1)
            };

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

            // Assert
            var expectedHtml = @"
<div class=""govuk-form-group"">
    <fieldset class=""govuk-fieldset"" role=""group"" aria-describedby=""describedby"">
        <legend class=""govuk-fieldset__legend"">
            Legend
        </legend>

        <div class=""govuk-date-input"" id=""my-id"">
            <div class=""govuk-date-input__item"">
                <div class=""govuk-form-group"">
                    <label class=""govuk-date-input__label govuk-label"" for=""my-id.Day"">Day</label>
                    <input class=""govuk-input--width-2 govuk-date-input__input govuk-input"" id=""my-id.Day"" inputmode=""numeric"" name=""my-name.Day"" type=""text"" value=""1"">
                </div>
            </div>
            <div class=""govuk-date-input__item"">
                <div class=""govuk-form-group"">
                    <label class=""govuk-date-input__label govuk-label"" for=""my-id.Month"">Month</label>
                    <input class=""govuk-input--width-2 govuk-date-input__input govuk-input"" id=""my-id.Month"" inputmode=""numeric"" name=""my-name.Month"" type=""text"" value=""4"">
                </div>
            </div>
            <div class=""govuk-date-input__item"">
                <div class=""govuk-form-group"">
                    <label class=""govuk-date-input__label govuk-label"" for=""my-id.Year"">Year</label>
                    <input class=""govuk-input--width-4 govuk-date-input__input govuk-input"" id=""my-id.Year"" inputmode=""numeric"" name=""my-name.Year"" type=""text"" value=""2020"">
                </div>
            </div>
        </div>
    </fieldset>
</div>";

            AssertEx.HtmlEqual(expectedHtml, output.RenderToString());
        }