From ceaec3feb0c9fbdab48595d7e425930a39d87ad5 Mon Sep 17 00:00:00 2001 From: tidusjar Date: Tue, 28 Sep 2021 13:24:08 +0100 Subject: [PATCH] fix(request-limits): :bug: Fixed the issue where we were calculating Tv Request limit reset date incorrectly --- .../Engine/TvRequestLimitsTests.cs | 19 ++++++++++--------- .../Rule/Rules/Request/RequestLimitRule.cs | 5 ----- src/Ombi.Core/Services/RequestLimitService.cs | 12 ++++++------ 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs b/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs index 5e6d9bdf0..0676587a9 100644 --- a/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs +++ b/src/Ombi.Core.Tests/Engine/TvRequestLimitsTests.cs @@ -6,6 +6,7 @@ using Ombi.Core.Engine; using Ombi.Core.Models; using Ombi.Core.Services; +using Ombi.Helpers; using Ombi.Store.Entities; using Ombi.Store.Entities.Requests; using Ombi.Store.Repository; @@ -277,7 +278,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_OneRequestsToday() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).AddHours(-1)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).Date) ); } @@ -318,7 +319,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_AllRequestsToday() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(0) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).AddHours(-2)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).Date) ); } @@ -359,7 +360,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Daily_MultipleEpisodeRequests() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(10) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).AddHours(-2)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(1).Date) ); } @@ -426,7 +427,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Weekly_OneRequestsWeek() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(7)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.FirstDateInWeek().AddDays(7).Date) ); } @@ -467,7 +468,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Weekly_AllRequestsWeek() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(0) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(6)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.FirstDateInWeek().AddDays(7).Date) ); } @@ -508,7 +509,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Weekly_MultipleEpisodeRequests( .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(10) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddDays(6)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.FirstDateInWeek().AddDays(7).Date) ); } @@ -575,7 +576,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Monthly_OneRequests() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddMonths(1)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(new DateTime(today.Year, today.Month, 1).AddMonths(1).Date) ); } @@ -616,7 +617,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Monthly_AllRequests() .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(2) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(0) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddMonths(1).AddDays(-1)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(new DateTime(today.Year, today.Month, 1).AddMonths(1).Date) ); } @@ -657,7 +658,7 @@ public async Task UserPassedIn_TvLimit_Set_Limit_Monthly_MultipleEpisodeReuests( .With.Property(nameof(RequestQuotaCountModel.HasLimit)).EqualTo(true) .And.Property(nameof(RequestQuotaCountModel.Limit)).EqualTo(10) .And.Property(nameof(RequestQuotaCountModel.Remaining)).EqualTo(1) - .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(today.AddMonths(1).AddDays(-1)) + .And.Property(nameof(RequestQuotaCountModel.NextRequest)).EqualTo(new DateTime(today.Year, today.Month, 1).AddMonths(1).Date) ); } diff --git a/src/Ombi.Core/Rule/Rules/Request/RequestLimitRule.cs b/src/Ombi.Core/Rule/Rules/Request/RequestLimitRule.cs index e3b72f8bd..efa738601 100644 --- a/src/Ombi.Core/Rule/Rules/Request/RequestLimitRule.cs +++ b/src/Ombi.Core/Rule/Rules/Request/RequestLimitRule.cs @@ -25,16 +25,11 @@ // ************************************************************************/ #endregion -using System; -using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; -using Ombi.Core.Authentication; using Ombi.Core.Rule.Interfaces; using Ombi.Core.Services; using Ombi.Store.Entities; using Ombi.Store.Entities.Requests; -using Ombi.Store.Repository; namespace Ombi.Core.Rule.Rules.Request { diff --git a/src/Ombi.Core/Services/RequestLimitService.cs b/src/Ombi.Core/Services/RequestLimitService.cs index 6f56775dd..05032f6f3 100644 --- a/src/Ombi.Core/Services/RequestLimitService.cs +++ b/src/Ombi.Core/Services/RequestLimitService.cs @@ -1,8 +1,6 @@ using Microsoft.EntityFrameworkCore; using Ombi.Core.Authentication; -using Ombi.Core.Engine.Interfaces; using Ombi.Core.Models; -using Ombi.Core.Rule.Interfaces; using Ombi.Helpers; using Ombi.Store.Entities; using Ombi.Store.Entities.Requests; @@ -246,6 +244,7 @@ public async Task GetRemainingTvRequests(OmbiUser user) }; } + var now = DateTime.UtcNow; switch (user.EpisodeRequestLimitType) { case RequestLimitType.Day: @@ -260,10 +259,10 @@ public async Task GetRemainingTvRequests(OmbiUser user) .OrderBy(x => x.RequestDate) .Select(x => x.RequestDate) .FirstOrDefaultAsync(); - nextRequest = oldestRequestedAt.AddDays(1); + nextRequest = oldestRequestedAt.AddDays(1).Date; break; case RequestLimitType.Week: - + var fdow = now.FirstDateInWeek(); filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddDays(-7)); // Needed, due to a bug which would cause all episode counts to be 0 zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync(); @@ -274,9 +273,10 @@ public async Task GetRemainingTvRequests(OmbiUser user) .OrderBy(x => x.RequestDate) .Select(x => x.RequestDate) .FirstOrDefaultAsync(); - nextRequest = oldestRequestedAt.AddDays(7); + nextRequest = fdow.AddDays(7).Date; break; case RequestLimitType.Month: + var firstDayOfMonth = new DateTime(now.Year, now.Month, 1); filteredLog = log.Where(x => x.RequestDate >= DateTime.UtcNow.Date.AddMonths(-1)); // Needed, due to a bug which would cause all episode counts to be 0 zeroEpisodeCount = await filteredLog.Where(x => x.EpisodeCount == 0).Select(x => x.EpisodeCount).CountAsync(); @@ -287,7 +287,7 @@ public async Task GetRemainingTvRequests(OmbiUser user) .OrderBy(x => x.RequestDate) .Select(x => x.RequestDate) .FirstOrDefaultAsync(); - nextRequest = oldestRequestedAt.AddMonths(1); + nextRequest = firstDayOfMonth.AddMonths(1).Date; break; }