From c1b531f24beb97cc13c84f2c4ca912d57dfee789 Mon Sep 17 00:00:00 2001 From: krishanthaudayakumara Date: Wed, 13 Aug 2025 14:15:07 +0530 Subject: [PATCH] fix: Update date formatting tests to handle culture-specific formats - Convert DateTagHelper unit tests to use InlineData pattern with multiple cultures --- .../Binding/ViewFieldsBindingFixture.cs | 6 +- .../TagHelpers/AllFieldTagHelpersFixture.cs | 2 +- .../TagHelpers/DateFieldTagHelperFixture.cs | 4 +- .../RichTextFieldTagHelperFixture.cs | 6 +- .../TagHelpers/Fields/DateTagHelperFixture.cs | 102 +++++++++++++----- 5 files changed, 85 insertions(+), 35 deletions(-) diff --git a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/Binding/ViewFieldsBindingFixture.cs b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/Binding/ViewFieldsBindingFixture.cs index 8f8f7ef..532c7fe 100644 --- a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/Binding/ViewFieldsBindingFixture.cs +++ b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/Binding/ViewFieldsBindingFixture.cs @@ -1,4 +1,5 @@ -using System.Net; +using System.Globalization; +using System.Net; using FluentAssertions; using HtmlAgilityPack; using Microsoft.AspNetCore.TestHost; @@ -75,7 +76,8 @@ public async Task SitecoreLayoutModelBinders_BindDataCorrectly() sectionNode.ChildNodes.First(n => n.Name.Equals("p", StringComparison.OrdinalIgnoreCase)).InnerText .Should().BeEmpty(); - sectionNode.ChildNodes.First(n => n.Name.Equals("textarea", StringComparison.OrdinalIgnoreCase)).InnerText.Should().Contain("12/12/2019"); + DateTime expectedDate = DateTime.Parse("12.12.19", CultureInfo.InvariantCulture); + sectionNode.ChildNodes.First(n => n.Name.Equals("textarea", StringComparison.OrdinalIgnoreCase)).InnerText.Should().Contain(expectedDate.ToString("MM/dd/yyyy", CultureInfo.CurrentCulture)); sectionNode.ChildNodes.First(n => n.Name.Equals("span", StringComparison.OrdinalIgnoreCase)).InnerHtml .Should().Be(TestConstants.TestMultilineFieldValue.Replace(Environment.NewLine, "
", StringComparison.OrdinalIgnoreCase)); diff --git a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/AllFieldTagHelpersFixture.cs b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/AllFieldTagHelpersFixture.cs index bf853cb..7152897 100644 --- a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/AllFieldTagHelpersFixture.cs +++ b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/AllFieldTagHelpersFixture.cs @@ -82,7 +82,7 @@ public async Task ComponentWithAllFieldTypes_RendersFieldsCorrectly() sectionNode.ChildNodes.First(n => n.Name.Equals("div", StringComparison.OrdinalIgnoreCase) && n.Id.Equals("div5", StringComparison.OrdinalIgnoreCase)).InnerHtml .Should().Be(TestConstants.AllFieldsImageValue); sectionNode.ChildNodes.First(n => n.Name.Equals("div", StringComparison.OrdinalIgnoreCase) && n.Id.Equals("div6", StringComparison.OrdinalIgnoreCase)).InnerHtml - .Should().Be(TestConstants.DateFieldValue); + .Should().Be(TestConstants.DateTimeValue.ToString("MM/dd/yyyy", CultureInfo.CurrentCulture)); sectionNode.ChildNodes.First(n => n.Name.Equals("div", StringComparison.OrdinalIgnoreCase) && n.Id.Equals("div7", StringComparison.OrdinalIgnoreCase)).InnerHtml .Should().Be(TestConstants.MediaLibraryItemImageFieldValue); sectionNode.ChildNodes.First(n => n.Name.Equals("div", StringComparison.OrdinalIgnoreCase) && n.Id.Equals("div8", StringComparison.OrdinalIgnoreCase)).InnerHtml diff --git a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/DateFieldTagHelperFixture.cs b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/DateFieldTagHelperFixture.cs index 60f4aa3..c6ec161 100644 --- a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/DateFieldTagHelperFixture.cs +++ b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/DateFieldTagHelperFixture.cs @@ -93,8 +93,8 @@ public async Task DateTagHelper_GeneratesProperDate() HtmlNode? sectionNode = doc.DocumentNode.ChildNodes.First(n => n.HasClass("component-with-dates")); // Assert - sectionNode.ChildNodes[1].InnerHtml.Should().Be("05/04/2012"); - sectionNode.ChildNodes[3].InnerHtml.Should().Be("05/04/2012 00:00:00"); + sectionNode.ChildNodes[1].InnerHtml.Should().Be(TestConstants.DateTimeValue.ToString("MM/dd/yyyy", CultureInfo.CurrentCulture)); + sectionNode.ChildNodes[3].InnerHtml.Should().Be(TestConstants.DateTimeValue.ToString("MM/dd/yyyy HH:mm:ss", CultureInfo.CurrentCulture)); sectionNode.ChildNodes[5].InnerHtml.Should().Be(TestConstants.DateTimeValue.ToString(CultureInfo.CurrentCulture)); sectionNode.ChildNodes[9].InnerHtml.Should().Contain("04.05.2012"); } diff --git a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/RichTextFieldTagHelperFixture.cs b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/RichTextFieldTagHelperFixture.cs index 23e1ef2..b6ff80f 100644 --- a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/RichTextFieldTagHelperFixture.cs +++ b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Integration.Tests/Fixtures/TagHelpers/RichTextFieldTagHelperFixture.cs @@ -1,4 +1,5 @@ -using System.Net; +using System.Globalization; +using System.Net; using System.Text.Encodings.Web; using FluentAssertions; using HtmlAgilityPack; @@ -70,7 +71,8 @@ public async Task RichTextFieldTagHelper_DoesNotResetOtherTagHelperOutput() // Assert // check scenario that RichTextTagHelper does not reset values of another helpers. - sectionNode.ChildNodes.First(n => n.Name.Equals("textarea", StringComparison.OrdinalIgnoreCase)).InnerText.Should().Contain("12/12/2019"); + DateTime expectedDate = DateTime.Parse("12.12.19", CultureInfo.InvariantCulture); + sectionNode.ChildNodes.First(n => n.Name.Equals("textarea", StringComparison.OrdinalIgnoreCase)).InnerText.Should().Contain(expectedDate.ToString("MM/dd/yyyy", CultureInfo.CurrentCulture)); } [Fact] diff --git a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Tests/TagHelpers/Fields/DateTagHelperFixture.cs b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Tests/TagHelpers/Fields/DateTagHelperFixture.cs index 1ba472b..0515b21 100644 --- a/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Tests/TagHelpers/Fields/DateTagHelperFixture.cs +++ b/tests/Sitecore.AspNetCore.SDK.RenderingEngine.Tests/TagHelpers/Fields/DateTagHelperFixture.cs @@ -123,23 +123,46 @@ public void Process_ScDateTagWithEmptyValueInForAttribute_GeneratesEmptyOutput( } [Theory] - [AutoNSubstituteData] - public void Process_ScDateTagWithCustomFormat_GeneratesCustomDateFormatOutput( - DateTagHelper sut, - TagHelperContext tagHelperContext, - TagHelperOutput tagHelperOutput) + [InlineData("en-US")] + [InlineData("da-DK")] + [InlineData("uk-UA")] + public void Process_ScDateTagWithCustomFormat_GeneratesCustomDateFormatOutput(string cultureName) { // Arrange - const string dateFormat = "MM/dd/yyyy H:mm"; - tagHelperOutput.TagName = RenderingEngineConstants.SitecoreTagHelpers.DateHtmlTag; - sut.DateFormat = dateFormat; - sut.For = GetModelExpression(new DateField(_date)); + CultureInfo originalCulture = CultureInfo.CurrentCulture; + CultureInfo originalUiCulture = CultureInfo.CurrentUICulture; + CultureInfo testCulture = new CultureInfo(cultureName); - // Act - sut.Process(tagHelperContext, tagHelperOutput); - - // Assert - tagHelperOutput.Content.GetContent().Should().Be(_date.ToString(dateFormat, CultureInfo.InvariantCulture)); + try + { + CultureInfo.CurrentCulture = testCulture; + CultureInfo.CurrentUICulture = testCulture; + + const string dateFormat = "MM/dd/yyyy H:mm"; + DateTagHelper sut = new DateTagHelper(new EditableChromeRenderer()); + TagHelperContext tagHelperContext = new TagHelperContext([], new Dictionary(), Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); + TagHelperOutput tagHelperOutput = new TagHelperOutput(string.Empty, [], (_, _) => + { + DefaultTagHelperContent tagHelperContent = new(); + return Task.FromResult(tagHelperContent); + }); + + tagHelperOutput.TagName = RenderingEngineConstants.SitecoreTagHelpers.DateHtmlTag; + sut.DateFormat = dateFormat; + sut.For = GetModelExpression(new DateField(_date)); + + // Act + sut.Process(tagHelperContext, tagHelperOutput); + + // Assert - Expect culture-specific formatting based on current culture + string expected = _date.ToString(dateFormat, testCulture); + tagHelperOutput.Content.GetContent().Should().Be(expected); + } + finally + { + CultureInfo.CurrentCulture = originalCulture; + CultureInfo.CurrentUICulture = originalUiCulture; + } } [Theory] @@ -258,23 +281,46 @@ public void Process_ScDateTagWithAspDataAttributeWithEmptyValueInForAttribute_Ge } [Theory] - [AutoNSubstituteData] - public void Process_ScDateTagWithAspDataAttributeWithCustomFormat_GeneratesCustomDateFormatOutput( - DateTagHelper sut, - TagHelperContext tagHelperContext, - TagHelperOutput tagHelperOutput) + [InlineData("en-US")] + [InlineData("da-DK")] + [InlineData("uk-UA")] + public void Process_ScDateTagWithAspDataAttributeWithCustomFormat_GeneratesCustomDateFormatOutput(string cultureName) { // Arrange - string dateFormat = "MM/dd/yyyy H:mm"; - tagHelperOutput.TagName = RenderingEngineConstants.SitecoreTagHelpers.DateHtmlTag; - sut.DateFormat = dateFormat; - sut.DateModel = new DateField(_date); + CultureInfo originalCulture = CultureInfo.CurrentCulture; + CultureInfo originalUiCulture = CultureInfo.CurrentUICulture; + CultureInfo testCulture = new CultureInfo(cultureName); - // Act - sut.Process(tagHelperContext, tagHelperOutput); - - // Assert - tagHelperOutput.Content.GetContent().Should().Be(_date.ToString(dateFormat, CultureInfo.InvariantCulture)); + try + { + CultureInfo.CurrentCulture = testCulture; + CultureInfo.CurrentUICulture = testCulture; + + string dateFormat = "MM/dd/yyyy H:mm"; + DateTagHelper sut = new DateTagHelper(new EditableChromeRenderer()); + TagHelperContext tagHelperContext = new TagHelperContext([], new Dictionary(), Guid.NewGuid().ToString("N", CultureInfo.InvariantCulture)); + TagHelperOutput tagHelperOutput = new TagHelperOutput(string.Empty, [], (_, _) => + { + DefaultTagHelperContent tagHelperContent = new(); + return Task.FromResult(tagHelperContent); + }); + + tagHelperOutput.TagName = RenderingEngineConstants.SitecoreTagHelpers.DateHtmlTag; + sut.DateFormat = dateFormat; + sut.DateModel = new DateField(_date); + + // Act + sut.Process(tagHelperContext, tagHelperOutput); + + // Assert - Expect culture-specific formatting based on current culture + string expected = _date.ToString(dateFormat, testCulture); + tagHelperOutput.Content.GetContent().Should().Be(expected); + } + finally + { + CultureInfo.CurrentCulture = originalCulture; + CultureInfo.CurrentUICulture = originalUiCulture; + } } [Theory]