diff --git a/ProjectLighthouse.Tests/Unit/ModerationTests.cs b/ProjectLighthouse.Tests/Unit/ModerationTests.cs index 49b42e15..9aa4055b 100644 --- a/ProjectLighthouse.Tests/Unit/ModerationTests.cs +++ b/ProjectLighthouse.Tests/Unit/ModerationTests.cs @@ -15,22 +15,22 @@ public class ModerationTests public async void DismissExpiredCases_ShouldDismissExpiredCase() { await using DatabaseContext database = await MockHelper.GetTestDatabase(); - + ModerationCaseEntity @case = new() { CaseId = 1, ExpiresAt = DateTime.UnixEpoch, CreatorUsername = "unitTestUser", }; - + database.Cases.Add(@case); - + await database.SaveChangesAsync(); - + DismissExpiredCasesTask task = new(); await task.Run(database); - Assert.Null(await database.Cases.FirstOrDefaultAsync(c => c.CaseId == 1 && c.DismissedAt == null)); + Assert.NotNull(await database.Cases.FirstOrDefaultAsync(c => c.CaseId == 1 && c.DismissedAt != null)); } [Fact] @@ -54,4 +54,29 @@ public class ModerationTests Assert.NotNull(await database.Cases.FirstOrDefaultAsync(c => c.CaseId == 2 && c.DismissedAt == null)); } + + [Fact] + public async void DismissExpiredCases_ShouldNotDismissAlreadyDismissedCase() + { + await using DatabaseContext database = await MockHelper.GetTestDatabase(); + + ModerationCaseEntity @case = new() + { + CaseId = 3, + ExpiresAt = DateTime.UnixEpoch, + DismissedAt = DateTime.UnixEpoch, + CreatorUsername = "unitTestUser", + }; + + database.Cases.Add(@case); + + await database.SaveChangesAsync(); + + DismissExpiredCasesTask task = new(); + await task.Run(database); + + // check that the case was not dismissed again by comparing original time to new time + Assert.NotNull( + await database.Cases.FirstOrDefaultAsync(c => c.CaseId == 3 && c.DismissedAt == DateTime.UnixEpoch)); + } } \ No newline at end of file diff --git a/ProjectLighthouse/Administration/Maintenance/RepeatingTasks/DismissExpiredCasesTask.cs b/ProjectLighthouse/Administration/Maintenance/RepeatingTasks/DismissExpiredCasesTask.cs index e38e5405..84b282ad 100644 --- a/ProjectLighthouse/Administration/Maintenance/RepeatingTasks/DismissExpiredCasesTask.cs +++ b/ProjectLighthouse/Administration/Maintenance/RepeatingTasks/DismissExpiredCasesTask.cs @@ -19,8 +19,9 @@ public class DismissExpiredCasesTask : IRepeatingTask public async Task Run(DatabaseContext database) { - List expiredCases = - await database.Cases.Where(c => c.ExpiresAt != null && c.ExpiresAt < DateTime.UtcNow).ToListAsync(); + List expiredCases = await database.Cases + .Where(c => c.DismissedAt == null && c.ExpiresAt != null && c.ExpiresAt < DateTime.UtcNow) + .ToListAsync(); if (expiredCases.Count == 0) {