From f44fb59b34ba7191c8db63308b9bde969d84c0e8 Mon Sep 17 00:00:00 2001 From: Nhu Dinh <150406148+nhudinh0309@users.noreply.github.com> Date: Tue, 7 May 2024 11:59:59 +0700 Subject: [PATCH 1/3] V14 QA Added acceptance tests for Language (#15997) * Fixed failing tests * Updated tests to use the updated helpers * Clean up tests * Enabled our pipeline for E2E testing * Updated the CMS URl for our E2E tests * Bumped version of our testHelpers * Did some fixing, still a bit more to do * Updated auth tests to use LoginUiHelper * Updated Telemetry tests to use TelemetryUiHelper * Updated LogViewer tests to use LogViewerUiHelper * Updated api tests to apply AAA pattern and fix failed tests * Removed unused import * Updated api tests for Language * Added ui tests for Language * Updated ui test of Language as test helper is changed * Bumped version of test helper * Updated create language tests * Updated delete language test * Added Language folder * Fixed method name * Bumped version of test helper * Fix merge conflict * Fixed typo * Added more waits * Fixed locator * Updated locator * Added timeout * Fixed password * Reversed file * Bumped version * Bumped version of test helper * Added more waits * Added skip for add language test * Bumped version of test helper * Added smoke tags * Fix conflict * Added @smoke tag to test all Language tests in the pipeline * Fixed comment * Removed smoke tag in describe --------- Co-authored-by: Andreas Zerbst --- .../ApiTesting/Language/Language.spec.ts | 13 +- .../ApiTesting/Stylesheet/Stylesheet.spec.ts | 2 +- .../Settings/Language/Language.spec.ts | 124 ++++++++++++++++++ 3 files changed, 132 insertions(+), 7 deletions(-) create mode 100644 tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/Language/Language.spec.ts diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Language/Language.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Language/Language.spec.ts index dd485b7a972f..71f4d595afe3 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Language/Language.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Language/Language.spec.ts @@ -6,14 +6,15 @@ test.describe('Language tests', () => { const isoCodeDanish = 'da-DK'; test.beforeEach(async ({umbracoApi}) => { - await umbracoApi.language.delete(isoCodeDanish); + await umbracoApi.language.ensureNameNotExists(languageNameDanish); }); test.afterEach(async ({umbracoApi}) => { - await umbracoApi.language.delete(isoCodeDanish); + await umbracoApi.language.ensureNameNotExists(languageNameDanish); }); test('can create a language', async ({umbracoApi}) => { + // Act await umbracoApi.language.create(languageNameDanish, false, false, isoCodeDanish); // Assert @@ -21,13 +22,12 @@ test.describe('Language tests', () => { }); test('can update a language', async ({umbracoApi}) => { + // Arrange const wrongLanguageName = 'densk'; - await umbracoApi.language.create(wrongLanguageName, false, false, isoCodeDanish); - const language = await umbracoApi.language.get(isoCodeDanish); - // Updates language + // Act language.name = languageNameDanish; await umbracoApi.language.update(isoCodeDanish, language); @@ -39,10 +39,11 @@ test.describe('Language tests', () => { }); test('can delete a language', async ({umbracoApi}) => { + // Arrange await umbracoApi.language.create(languageNameDanish, false, false, isoCodeDanish); - expect(await umbracoApi.language.doesExist(isoCodeDanish)).toBeTruthy(); + //Act await umbracoApi.language.delete(isoCodeDanish); // Assert diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Stylesheet/Stylesheet.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Stylesheet/Stylesheet.spec.ts index f9d401641365..72874f7e3441 100644 --- a/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Stylesheet/Stylesheet.spec.ts +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/ApiTesting/Stylesheet/Stylesheet.spec.ts @@ -58,7 +58,7 @@ test.describe('Stylesheet tests', () => { expect(await umbracoApi.stylesheet.doesExist(stylesheetPath)).toBeTruthy(); // Act - await umbracoApi.stylesheet.delete(stylesheetPath); + await umbracoApi.stylesheet.delete(stylesheetName); // Assert expect(await umbracoApi.stylesheet.doesExist(stylesheetPath)).toBeFalsy(); diff --git a/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/Language/Language.spec.ts b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/Language/Language.spec.ts new file mode 100644 index 000000000000..ce06589d656a --- /dev/null +++ b/tests/Umbraco.Tests.AcceptanceTest/tests/DefaultConfig/Settings/Language/Language.spec.ts @@ -0,0 +1,124 @@ +import {test} from '@umbraco/playwright-testhelpers'; +import {expect} from "@playwright/test"; + +test.describe('Language tests', () => { + const languageName = 'Arabic'; + const isoCode = 'ar'; + const defaultLanguageName = 'English (United States)'; + const defaultLanguageIsoCode = 'en-US'; + + test.beforeEach(async ({umbracoApi, umbracoUi}) => { + await umbracoUi.goToBackOffice(); + await umbracoApi.language.ensureNameNotExists(languageName); + }); + + test.afterEach(async ({umbracoApi}) => { + await umbracoApi.language.ensureNameNotExists(languageName); + }); + + test('can add language @smoke', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.clickCreateLink(); + await umbracoUi.language.chooseLanguageByName(languageName); + await umbracoUi.language.clickSaveButton(); + + // Assert + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + // Verify the created language displays in the list + await umbracoUi.language.clickLanguageRoot(); + await umbracoUi.language.isLanguageNameVisible(languageName, true); + }); + + test('can update default language option @smoke', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.language.create(languageName, false, false, isoCode); + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.clickLanguageByName(languageName); + await umbracoUi.language.switchDefaultLanguageOption(); + await umbracoUi.language.clickSaveButton(); + + // Assert + const languageData = await umbracoApi.language.get(isoCode); + expect(languageData.isDefault).toBe(true); + + // Clean + // To delete this language, you need to change en-US to be default language + const defaultLanguageData = await umbracoApi.language.get(defaultLanguageIsoCode); + defaultLanguageData.isDefault = true; + await umbracoApi.language.update(defaultLanguageIsoCode, defaultLanguageData); + }); + + test('can update mandatory language option', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.language.create(languageName, false, false, isoCode); + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.clickLanguageByName(languageName); + await umbracoUi.language.switchMandatoryLanguageOption(); + await umbracoUi.language.clickSaveButton(); + + // Assert + const languageData = await umbracoApi.language.get(isoCode); + expect(languageData.isMandatory).toBe(true); + }); + + test('can delete language @smoke', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.language.create(languageName, false, false, isoCode); + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.removeLanguageByName(languageName); + + // Assert + await umbracoUi.language.isSuccessNotificationVisible(); + expect(await umbracoApi.language.doesExist(isoCode)).toBeFalsy(); + // TODO: uncomment this when the front-end is ready. Currently the deleted language is not disappeared after deleting. + //await umbracoUi.language.isLanguageNameVisible(languageName, false); + }); + + // TODO: Remove skip when the add fallback language function works + test.skip('can remove fallback language', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.language.create(languageName, false, false, isoCode); + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.clickLanguageByName(languageName); + await umbracoUi.language.removeFallbackLanguageByName(defaultLanguageName); + await umbracoUi.language.clickSaveButton(); + + // Act + const languageData = await umbracoApi.language.get(isoCode); + expect(languageData.fallbackIsoCode).toBeFalsy(); + }); + + // TODO: Remove skip when the add fallback language function works + test.skip('can add fallback language', async ({umbracoApi, umbracoUi}) => { + // Arrange + await umbracoApi.language.create(languageName, false, false, isoCode, null); + expect(await umbracoApi.language.doesExist(isoCode)).toBeTruthy(); + await umbracoUi.language.goToSettingsTreeItem('Language'); + + // Act + await umbracoUi.language.clickLanguageByName(languageName); + await umbracoUi.language.clickAddFallbackLanguageButton(); + await umbracoUi.language.selectFallbackLanguageByName(defaultLanguageName); + await umbracoUi.language.clickSaveButton(); + + // Act + const languageData = await umbracoApi.language.get(isoCode); + expect(languageData.fallbackIsoCode).toBe(defaultLanguageIsoCode); + }); +}); + From 2260da210d269c0ee8c7e901cd916b13695c8aef Mon Sep 17 00:00:00 2001 From: Bjarke Berg Date: Tue, 7 May 2024 08:07:20 +0200 Subject: [PATCH 2/3] Management api should use datetimeoffset (#16196) * Move audit log endpoints to their respective silos and clean up * Fix failing integration tests * Using DateTimeOffset in management api and new methods in service layer --------- Co-authored-by: kjac --- .../Document/GetAuditLogDocumentController.cs | 2 +- .../LogViewer/AllLogViewerController.cs | 4 ++-- .../AllMessageTemplateLogViewerController.cs | 4 ++-- .../LogViewer/LogLevelCountLogViewerController.cs | 4 ++-- .../ValidateLogFileSizeLogViewerController.cs | 4 ++-- .../Media/GetAuditLogMediaController.cs | 2 +- .../ViewModels/Member/MemberResponseModel.cs | 6 +++--- src/Umbraco.Core/Services/AuditService.cs | 4 ++-- src/Umbraco.Core/Services/IAuditService.cs | 2 +- src/Umbraco.Core/Services/ILogViewerService.cs | 10 +++++----- src/Umbraco.Core/Services/LogViewerService.cs | 14 +++++++------- 11 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Document/GetAuditLogDocumentController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Document/GetAuditLogDocumentController.cs index 206d2d2252d8..a22841850e44 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Document/GetAuditLogDocumentController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Document/GetAuditLogDocumentController.cs @@ -35,7 +35,7 @@ public GetAuditLogDocumentController( [MapToApiVersion("1.0")] [HttpGet("{id:guid}/audit-log")] [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] - public async Task GetAuditLog(CancellationToken cancellationToken, Guid id, Direction orderDirection = Direction.Descending, DateTime? sinceDate = null, int skip = 0, int take = 100) + public async Task GetAuditLog(CancellationToken cancellationToken, Guid id, Direction orderDirection = Direction.Descending, DateTimeOffset? sinceDate = null, int skip = 0, int take = 100) { AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync( User, diff --git a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllLogViewerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllLogViewerController.cs index 1a93a60da2ab..d341361da264 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllLogViewerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllLogViewerController.cs @@ -48,8 +48,8 @@ public async Task AllLogs( Direction orderDirection = Direction.Descending, string? filterExpression = null, [FromQuery(Name = "logLevel")] LogLevel[]? logLevels = null, - DateTime? startDate = null, - DateTime? endDate = null) + DateTimeOffset? startDate = null, + DateTimeOffset? endDate = null) { var levels = logLevels?.Select(l => l.ToString()).ToArray(); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllMessageTemplateLogViewerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllMessageTemplateLogViewerController.cs index faed45ca05d6..92f5c9d970da 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllMessageTemplateLogViewerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/AllMessageTemplateLogViewerController.cs @@ -40,8 +40,8 @@ public async Task AllMessageTemplates( CancellationToken cancellationToken, int skip = 0, int take = 100, - DateTime? startDate = null, - DateTime? endDate = null) + DateTimeOffset? startDate = null, + DateTimeOffset? endDate = null) { Attempt, LogViewerOperationStatus> messageTemplatesAttempt = await _logViewerService.GetMessageTemplatesAsync(startDate, endDate, skip, take); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/LogLevelCountLogViewerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/LogLevelCountLogViewerController.cs index 5ae69bb9014f..4e7095b9ef23 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/LogLevelCountLogViewerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/LogLevelCountLogViewerController.cs @@ -34,8 +34,8 @@ public LogLevelCountLogViewerController(ILogViewerService logViewerService, IUmb [ProducesResponseType(typeof(LogLevelCountsReponseModel), StatusCodes.Status200OK)] public async Task LogLevelCounts( CancellationToken cancellationToken, - DateTime? startDate = null, - DateTime? endDate = null) + DateTimeOffset? startDate = null, + DateTimeOffset? endDate = null) { Attempt logLevelCountsAttempt = await _logViewerService.GetLogLevelCountsAsync(startDate, endDate); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/ValidateLogFileSizeLogViewerController.cs b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/ValidateLogFileSizeLogViewerController.cs index 553b3df475bf..6b42892f2dfe 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/ValidateLogFileSizeLogViewerController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/LogViewer/ValidateLogFileSizeLogViewerController.cs @@ -26,8 +26,8 @@ public class ValidateLogFileSizeLogViewerController : LogViewerControllerBase [ProducesResponseType(StatusCodes.Status200OK)] public async Task CanViewLogs( CancellationToken cancellationToken, - DateTime? startDate = null, - DateTime? endDate = null) + DateTimeOffset? startDate = null, + DateTimeOffset? endDate = null) { Attempt result = await _logViewerService.CanViewLogsAsync(startDate, endDate); diff --git a/src/Umbraco.Cms.Api.Management/Controllers/Media/GetAuditLogMediaController.cs b/src/Umbraco.Cms.Api.Management/Controllers/Media/GetAuditLogMediaController.cs index 445bf86b9fbf..bd99aa27ad88 100644 --- a/src/Umbraco.Cms.Api.Management/Controllers/Media/GetAuditLogMediaController.cs +++ b/src/Umbraco.Cms.Api.Management/Controllers/Media/GetAuditLogMediaController.cs @@ -34,7 +34,7 @@ public GetAuditLogMediaController( [MapToApiVersion("1.0")] [HttpGet("{id:guid}/audit-log")] [ProducesResponseType(typeof(PagedViewModel), StatusCodes.Status200OK)] - public async Task GetAuditLog(CancellationToken cancellationToken, Guid id, Direction orderDirection = Direction.Descending, DateTime? sinceDate = null, int skip = 0, int take = 100) + public async Task GetAuditLog(CancellationToken cancellationToken, Guid id, Direction orderDirection = Direction.Descending, DateTimeOffset? sinceDate = null, int skip = 0, int take = 100) { AuthorizationResult authorizationResult = await _authorizationService.AuthorizeResourceAsync( User, diff --git a/src/Umbraco.Cms.Api.Management/ViewModels/Member/MemberResponseModel.cs b/src/Umbraco.Cms.Api.Management/ViewModels/Member/MemberResponseModel.cs index 13cff882c0c8..0125d85523ec 100644 --- a/src/Umbraco.Cms.Api.Management/ViewModels/Member/MemberResponseModel.cs +++ b/src/Umbraco.Cms.Api.Management/ViewModels/Member/MemberResponseModel.cs @@ -19,11 +19,11 @@ public class MemberResponseModel : ContentResponseModelBase Groups { get; set; } = []; } diff --git a/src/Umbraco.Core/Services/AuditService.cs b/src/Umbraco.Core/Services/AuditService.cs index 0281066dbff3..737314201324 100644 --- a/src/Umbraco.Core/Services/AuditService.cs +++ b/src/Umbraco.Core/Services/AuditService.cs @@ -242,7 +242,7 @@ public async Task> GetItemsByKeyAsync( int skip, int take, Direction orderDirection = Direction.Descending, - DateTime? sinceDate = null, + DateTimeOffset? sinceDate = null, AuditType[]? auditTypeFilter = null) { if (skip < 0) @@ -264,7 +264,7 @@ public async Task> GetItemsByKeyAsync( using (ScopeProvider.CreateCoreScope(autoComplete: true)) { IQuery query = Query().Where(x => x.Id == keyToIdAttempt.Result); - IQuery? customFilter = sinceDate.HasValue ? Query().Where(x => x.CreateDate >= sinceDate) : null; + IQuery? customFilter = sinceDate.HasValue ? Query().Where(x => x.CreateDate >= sinceDate.Value.LocalDateTime) : null; PaginationHelper.ConvertSkipTakeToPaging(skip, take, out var pageNumber, out var pageSize); IEnumerable auditItems = _auditRepository.GetPagedResultsByQuery(query, pageNumber, pageSize, out var totalRecords, orderDirection, auditTypeFilter, customFilter); diff --git a/src/Umbraco.Core/Services/IAuditService.cs b/src/Umbraco.Core/Services/IAuditService.cs index b80fdb3b3e68..e4c973ced056 100644 --- a/src/Umbraco.Core/Services/IAuditService.cs +++ b/src/Umbraco.Core/Services/IAuditService.cs @@ -99,7 +99,7 @@ Task> GetItemsByKeyAsync( int skip, int take, Direction orderDirection = Direction.Descending, - DateTime? sinceDate = null, + DateTimeOffset? sinceDate = null, AuditType[]? auditTypeFilter = null) => throw new NotImplementedException(); /// diff --git a/src/Umbraco.Core/Services/ILogViewerService.cs b/src/Umbraco.Core/Services/ILogViewerService.cs index 97907ec9728a..9e7f9feb3f85 100644 --- a/src/Umbraco.Core/Services/ILogViewerService.cs +++ b/src/Umbraco.Core/Services/ILogViewerService.cs @@ -22,8 +22,8 @@ public interface ILogViewerService : IService /// The query expression to filter on. /// The log levels for which to retrieve the log messages. Task?, LogViewerOperationStatus>> GetPagedLogsAsync( - DateTime? startDate, - DateTime? endDate, + DateTimeOffset? startDate, + DateTimeOffset? endDate, int skip, int take, Direction orderDirection = Direction.Descending, @@ -63,7 +63,7 @@ public interface ILogViewerService : IService /// The start date for the date range. /// The end date for the date range. /// The value whether or not you are able to view the logs. - Task> CanViewLogsAsync(DateTime? startDate, DateTime? endDate); + Task> CanViewLogsAsync(DateTimeOffset? startDate, DateTimeOffset? endDate); /// /// Returns a number of the different log level entries. @@ -72,7 +72,7 @@ public interface ILogViewerService : IService /// /// The start date for the date range. /// The end date for the date range. - Task> GetLogLevelCountsAsync(DateTime? startDate, DateTime? endDate); + Task> GetLogLevelCountsAsync(DateTimeOffset? startDate, DateTimeOffset? endDate); /// /// Returns a paged model of all unique message templates and their counts. @@ -83,7 +83,7 @@ public interface ILogViewerService : IService /// The end date for the date range. /// The amount of items to skip. /// The amount of items to take. - Task, LogViewerOperationStatus>> GetMessageTemplatesAsync(DateTime? startDate, DateTime? endDate, int skip, int take); + Task, LogViewerOperationStatus>> GetMessageTemplatesAsync(DateTimeOffset? startDate, DateTimeOffset? endDate, int skip, int take); /// /// Get the log level values of the global minimum and the UmbracoFile one from the config file. diff --git a/src/Umbraco.Core/Services/LogViewerService.cs b/src/Umbraco.Core/Services/LogViewerService.cs index 5f3a7d3f04c0..aa1b1478ad3c 100644 --- a/src/Umbraco.Core/Services/LogViewerService.cs +++ b/src/Umbraco.Core/Services/LogViewerService.cs @@ -32,8 +32,8 @@ public LogViewerService( /// public async Task?, LogViewerOperationStatus>> GetPagedLogsAsync( - DateTime? startDate, - DateTime? endDate, + DateTimeOffset? startDate, + DateTimeOffset? endDate, int skip, int take, Direction orderDirection = Direction.Descending, @@ -109,7 +109,7 @@ public async Task> GetSavedLogQueriesAsync(int skip, } /// - public async Task> CanViewLogsAsync(DateTime? startDate, DateTime? endDate) + public async Task> CanViewLogsAsync(DateTimeOffset? startDate, DateTimeOffset? endDate) { LogTimePeriod logTimePeriod = GetTimePeriod(startDate, endDate); bool isAllowed = CanViewLogs(logTimePeriod); @@ -123,7 +123,7 @@ public async Task> CanViewLogsAsync(Date } /// - public async Task> GetLogLevelCountsAsync(DateTime? startDate, DateTime? endDate) + public async Task> GetLogLevelCountsAsync(DateTimeOffset? startDate, DateTimeOffset? endDate) { LogTimePeriod logTimePeriod = GetTimePeriod(startDate, endDate); @@ -143,7 +143,7 @@ public async Task> CanViewLogsAsync(Date } /// - public async Task, LogViewerOperationStatus>> GetMessageTemplatesAsync(DateTime? startDate, DateTime? endDate, int skip, int take) + public async Task, LogViewerOperationStatus>> GetMessageTemplatesAsync(DateTimeOffset? startDate, DateTimeOffset? endDate, int skip, int take) { LogTimePeriod logTimePeriod = GetTimePeriod(startDate, endDate); @@ -183,7 +183,7 @@ public ReadOnlyDictionary GetLogLevelsFromSinks() /// The start date for the date range (can be null). /// The end date for the date range (can be null). /// The LogTimePeriod object used to filter logs. - private LogTimePeriod GetTimePeriod(DateTime? startDate, DateTime? endDate) + private LogTimePeriod GetTimePeriod(DateTimeOffset? startDate, DateTimeOffset? endDate) { if (startDate is null || endDate is null) { @@ -199,7 +199,7 @@ private LogTimePeriod GetTimePeriod(DateTime? startDate, DateTime? endDate) } } - return new LogTimePeriod(startDate.Value, endDate.Value); + return new LogTimePeriod(startDate.Value.LocalDateTime, endDate.Value.LocalDateTime); } /// From f65d465a8a48c8479d76cb8cd036138d93a6b61c Mon Sep 17 00:00:00 2001 From: Jacob Overgaard <752371+iOvergaard@users.noreply.github.com> Date: Tue, 7 May 2024 10:27:23 +0200 Subject: [PATCH 3/3] update backoffice submodule --- src/Umbraco.Web.UI.Client | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Umbraco.Web.UI.Client b/src/Umbraco.Web.UI.Client index 3bfb38889798..5d11765881df 160000 --- a/src/Umbraco.Web.UI.Client +++ b/src/Umbraco.Web.UI.Client @@ -1 +1 @@ -Subproject commit 3bfb388897989a02d4d158798be8c4760558195b +Subproject commit 5d11765881df04c3829e5eb9b7a21be95cf63351