Skip to content
Merged
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public override void SetErrorMessage(
TemplateString? html,
string tagName)
{
if (Fieldset is not null)
if (Fieldset is not null && !_fieldsetIsOpen)
{
throw new InvalidOperationException($"<{tagName}> must be inside <{FieldsetTagName}>.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ private protected override void SetErrorMessage(TagHelperContent? content, TagHe
var attributes = new AttributeCollection(output.Attributes);

checkboxesContext.SetErrorMessage(
VisuallyHiddenText,
VisuallyHiddenText is not null ? new TemplateString(VisuallyHiddenText) : null,
attributes,
content?.ToTemplateString(),
output.TagName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ internal CheckboxesTagHelper(IComponentGenerator componentGenerator, IModelHelpe
/// <inheritdoc/>
public override void Init(TagHelperContext context)
{
context.SetContextItem(new CheckboxesContext(Name, For));
var checkboxesContext = new CheckboxesContext(Name, For);
context.SetContextItem(checkboxesContext);
context.SetContextItem<FormGroupContext3>(checkboxesContext);
}

/// <inheritdoc/>
Expand Down
4 changes: 2 additions & 2 deletions src/GovUk.Frontend.AspNetCore/TagHelpers/DateInputContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ public override void SetLabel(bool? isPageHeading, AttributeCollection attribute

public override void SetHint(AttributeCollection attributes, TemplateString? html, string tagName)
{
if (Fieldset is not null)
if (Fieldset is not null && !_fieldsetIsOpen)
{
throw new InvalidOperationException($"<{tagName}> must be inside <{FieldsetTagName}>.");
}
Expand Down Expand Up @@ -159,7 +159,7 @@ public void SetErrorMessage(
TemplateString? html,
string tagName)
{
if (Fieldset is not null)
if (Fieldset is not null && !_fieldsetIsOpen)
{
throw new InvalidOperationException($"<{tagName}> must be inside <{FieldsetTagName}>.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ private protected override void SetErrorMessage(TagHelperContent? content, TagHe

dateInputContext.SetErrorMessage(
ErrorItems,
VisuallyHiddenText,
VisuallyHiddenText is not null ? new TemplateString(VisuallyHiddenText) : null,
attributes,
content?.ToTemplateString(),
output.TagName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ private protected virtual void SetErrorMessage(TagHelperContent? content, TagHel
var formGroupContext3 = context.GetContextItem<FormGroupContext3>();

formGroupContext3.SetErrorMessage(
VisuallyHiddenText,
VisuallyHiddenText is not null ? new TemplateString(VisuallyHiddenText) : null,
new AttributeCollection(output.Attributes),
content?.ToTemplateString(),
output.TagName);
Expand Down
2 changes: 1 addition & 1 deletion src/GovUk.Frontend.AspNetCore/TagHelpers/RadiosContext.cs
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ public override void SetErrorMessage(
TemplateString? html,
string tagName)
{
if (Fieldset is not null)
if (Fieldset is not null && !_fieldsetIsOpen)
{
throw new InvalidOperationException($"<{tagName}> must be inside <{FieldsetTagName}>.");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ private protected override void SetErrorMessage(TagHelperContent? content, TagHe
var attributes = new AttributeCollection(output.Attributes);

radiosContext.SetErrorMessage(
VisuallyHiddenText,
VisuallyHiddenText is not null ? new TemplateString(VisuallyHiddenText) : null,
attributes,
content?.ToTemplateString(),
output.TagName);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" />
<PackageReference Include="Microsoft.Playwright" Version="1.21.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="8.0.23" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CharacterCountTestsModel

<govuk-character-count for="Text" max-length="200" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CharacterCountTestsModel

<govuk-character-count for="Text" name="OverriddenName" id="OverriddenId" max-length="200">
<govuk-character-count-label>Overridden label</govuk-character-count-label>
<govuk-character-count-hint>Overridden hint</govuk-character-count-hint>
<govuk-character-count-error-message>Overridden error message</govuk-character-count-error-message>
<govuk-character-count-value>Overridden value</govuk-character-count-value>
</govuk-character-count>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CheckboxesTestsModel

<govuk-checkboxes for="Options">
<govuk-checkboxes-fieldset>
<govuk-checkboxes-fieldset-legend />
<govuk-checkboxes-item value="option1">Option 1</govuk-checkboxes-item>
<govuk-checkboxes-item value="option2">Option 2</govuk-checkboxes-item>
</govuk-checkboxes-fieldset>
</govuk-checkboxes>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.CheckboxesTestsModel

<govuk-checkboxes for="Options" id-prefix="OverriddenIdPrefix" name="OverriddenName">
<govuk-checkboxes-fieldset>
<govuk-checkboxes-fieldset-legend>
Overridden legend
</govuk-checkboxes-fieldset-legend>
<govuk-checkboxes-hint>Overridden hint</govuk-checkboxes-hint>
<govuk-checkboxes-error-message>Overridden error message</govuk-checkboxes-error-message>
<govuk-checkboxes-item value="option1" checked="true">Option 1</govuk-checkboxes-item>
<govuk-checkboxes-item value="option2" checked="false">Option 2</govuk-checkboxes-item>
</govuk-checkboxes-fieldset>
</govuk-checkboxes>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.DateInputTestsModel

<govuk-date-input for="Date">
<govuk-date-input-fieldset>
<govuk-date-input-fieldset-legend />
</govuk-date-input-fieldset>
</govuk-date-input>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.DateInputTestsModel

<govuk-date-input for="Date" name-prefix="OverriddenName" id="OverriddenId">
<govuk-date-input-fieldset>
<govuk-date-input-fieldset-legend>Overridden legend</govuk-date-input-fieldset-legend>
<govuk-date-input-hint>Overridden hint</govuk-date-input-hint>
<govuk-date-input-error-message>Overridden error message</govuk-date-input-error-message>
</govuk-date-input-fieldset>
</govuk-date-input>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.DateInputTestsModel

<govuk-date-input for="Date">
<govuk-date-input-day id="OverriddenDayId" name="OverriddenDayName" value="1" />
<govuk-date-input-month id="OverriddenMonthId" name="OverriddenMonthName" value="2" />
<govuk-date-input-year id="OverriddenYearId" name="OverriddenYearName" value="2020" />
</govuk-date-input>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.FileUploadTestsModel

<govuk-file-upload for="File" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.FileUploadTestsModel

<govuk-file-upload for="File" name="OverriddenName" id="OverriddenId">
<govuk-file-upload-label>Overridden label</govuk-file-upload-label>
<govuk-file-upload-hint>Overridden hint</govuk-file-upload-hint>
<govuk-file-upload-error-message>Overridden error message</govuk-file-upload-error-message>
</govuk-file-upload>
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.PasswordInputTestsModel

<govuk-password-input for="Password" />
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.PasswordInputTestsModel

<govuk-password-input for="Password" name="OverriddenName" id="OverriddenId" value="Overridden value">
<govuk-password-input-label>Overridden label</govuk-password-input-label>
<govuk-password-input-hint>Overridden hint</govuk-password-input-hint>
<govuk-password-input-error-message>Overridden error message</govuk-password-input-error-message>
</govuk-password-input>
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.RadiosTestsModel

<govuk-radios for="Option">
<govuk-radios-fieldset>
<govuk-radios-fieldset-legend />
<govuk-radios-item value="option1">Option 1</govuk-radios-item>
<govuk-radios-item value="option2">Option 2</govuk-radios-item>
</govuk-radios-fieldset>
</govuk-radios>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.RadiosTestsModel

<govuk-radios for="Option" id-prefix="OverriddenIdPrefix" name="OverriddenName">
<govuk-radios-fieldset>
<govuk-radios-fieldset-legend>
Overridden legend
</govuk-radios-fieldset-legend>
<govuk-radios-hint>Overridden hint</govuk-radios-hint>
<govuk-radios-error-message>Overridden error message</govuk-radios-error-message>
<govuk-radios-item value="option1" checked="true">Option 1</govuk-radios-item>
<govuk-radios-item value="option2" checked="false">Option 2</govuk-radios-item>
</govuk-radios-fieldset>
</govuk-radios>
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.SelectTestsModel

<govuk-select for="Option">
<govuk-select-item value="">Choose an option</govuk-select-item>
<govuk-select-item value="option1">Option 1</govuk-select-item>
<govuk-select-item value="option2">Option 2</govuk-select-item>
</govuk-select>
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
@model GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests.SelectTestsModel

<govuk-select for="Option" name="OverriddenName" id="OverriddenId">
<govuk-select-label>Overridden label</govuk-select-label>
<govuk-select-hint>Overridden hint</govuk-select-hint>
<govuk-select-error-message>Overridden error message</govuk-select-error-message>
<govuk-select-item value="">Choose an option</govuk-select-item>
<govuk-select-item value="option1">Option 1</govuk-select-item>
<govuk-select-item value="overridden-value" selected="true">Overridden option</govuk-select-item>
</govuk-select>
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
namespace GovUk.Frontend.AspNetCore.IntegrationTests.TagHelperModelBindingTests;

public class TagHelperModelBindingTestsFixture : ServerFixture
{
protected override void Configure(IApplicationBuilder app)
{
base.Configure(app);

app.UseEndpoints(endpoints => endpoints.MapControllers());
}

protected override void ConfigureServices(IServiceCollection services)
{
services.AddGovUkFrontend();

services
.AddMvc()
.AddRazorOptions(options =>
{
options.ViewLocationFormats.Add("/TagHelperModelBindingTests/{0}.cshtml");
});
}
}
Loading