From 97fd3beeaa0de108333953e2d2c576de02632cbd Mon Sep 17 00:00:00 2001 From: Leendert de Borst Date: Wed, 4 Dec 2024 16:02:48 +0100 Subject: [PATCH] Add E2E test for server settings admin page (#221) --- .../Tests/Admin/ServerSettingsTests.cs | 90 +++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 src/Tests/AliasVault.E2ETests/Tests/Admin/ServerSettingsTests.cs diff --git a/src/Tests/AliasVault.E2ETests/Tests/Admin/ServerSettingsTests.cs b/src/Tests/AliasVault.E2ETests/Tests/Admin/ServerSettingsTests.cs new file mode 100644 index 000000000..55d2212da --- /dev/null +++ b/src/Tests/AliasVault.E2ETests/Tests/Admin/ServerSettingsTests.cs @@ -0,0 +1,90 @@ +//----------------------------------------------------------------------- +// +// Copyright (c) lanedirt. All rights reserved. +// Licensed under the MIT license. See LICENSE.md file in the project root for full license information. +// +//----------------------------------------------------------------------- + +namespace AliasVault.E2ETests.Tests.Admin; + +using Microsoft.EntityFrameworkCore; + +/// +/// End-to-end tests for server settings feature. +/// +[Parallelizable(ParallelScope.Self)] +[Category("AdminTests")] +[TestFixture] +public class ServerSettingsTests : AdminPlaywrightTest +{ + /// + /// Test if mutating server settings works correctly. + /// + /// Async task. + [Test] + public async Task ServerSettingsMutationTest() + { + // Navigate to server settings page + await NavigateBrowser("settings/server"); + await WaitForUrlAsync("settings/server", "Server settings"); + + // Set new values for retention settings + await Page.Locator("input[id='generalLogRetention']").FillAsync("45"); + await Page.Locator("input[id='authLogRetention']").FillAsync("120"); + await Page.Locator("input[id='emailRetention']").FillAsync("60"); + await Page.Locator("input[id='maxEmails']").FillAsync("200"); + + // Set maintenance time + await Page.Locator("input[id='schedule']").FillAsync("03:30"); + + // Uncheck Sunday and Saturday from maintenance days + await Page.Locator("input[id='day_7']").UncheckAsync(); // Sunday + await Page.Locator("input[id='day_6']").UncheckAsync(); // Saturday + + // Save changes + var saveButton = Page.Locator("text=Save changes"); + await saveButton.ClickAsync(); + + // Wait for success message + await WaitForUrlAsync("settings/server", "Settings saved successfully"); + + // Verify settings in database + var settings = await DbContext.ServerSettings.ToListAsync(); + + // Check retention settings + var generalLogRetention = settings.Find(s => s.Key == "GeneralLogRetentionDays"); + Assert.That(generalLogRetention?.Value, Is.EqualTo("45"), "General log retention days not saved correctly"); + + var authLogRetention = settings.Find(s => s.Key == "AuthLogRetentionDays"); + Assert.That(authLogRetention?.Value, Is.EqualTo("120"), "Auth log retention days not saved correctly"); + + var emailRetention = settings.Find(s => s.Key == "EmailRetentionDays"); + Assert.That(emailRetention?.Value, Is.EqualTo("60"), "Email retention days not saved correctly"); + + var maxEmails = settings.Find(s => s.Key == "MaxEmailsPerUser"); + Assert.That(maxEmails?.Value, Is.EqualTo("200"), "Max emails per user not saved correctly"); + + // Check maintenance schedule + var maintenanceTime = settings.Find(s => s.Key == "MaintenanceTime"); + Assert.That(maintenanceTime?.Value, Is.EqualTo("03:30"), "Maintenance time not saved correctly"); + + var taskRunnerDays = settings.Find(s => s.Key == "TaskRunnerDays"); + Assert.That(taskRunnerDays?.Value, Is.EqualTo("1,2,3,4,5"), "Task runner days not saved correctly"); + + // Refresh page and verify values persist + await Page.ReloadAsync(); + await WaitForUrlAsync("settings/server", "Server settings"); + + var generalLogRetentionValue = await Page.Locator("input[id='generalLogRetention']").InputValueAsync(); + Assert.That(generalLogRetentionValue, Is.EqualTo("45"), "General log retention value not persisted after refresh"); + + var maintenanceTimeValue = await Page.Locator("input[id='schedule']").InputValueAsync(); + Assert.That(maintenanceTimeValue, Does.Contain("03:30"), "Maintenance time value not persisted after refresh"); + + // Verify weekend days are still unchecked + var sundayChecked = await Page.Locator("input[id='day_7']").IsCheckedAsync(); + var saturdayChecked = await Page.Locator("input[id='day_6']").IsCheckedAsync(); + Assert.That(sundayChecked, Is.False, "Sunday checkbox should be unchecked"); + Assert.That(saturdayChecked, Is.False, "Saturday checkbox should be unchecked"); + } +}