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]