From fc0d341d15361d50637fac00e5a6826cc6a4e6d1 Mon Sep 17 00:00:00 2001 From: kjh2064 Date: Sun, 12 Jul 2026 13:44:43 +0900 Subject: [PATCH] test(web): add unit tests to verify Hangfire scheduler jobs mapping and cron pattern validation --- .../QuantEngine.Core.Tests.csproj | 3 + .../SchedulerServiceTests.cs | 70 +++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 src/dotnet/QuantEngine.Core.Tests/SchedulerServiceTests.cs diff --git a/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj b/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj index a7efe672..4c80110d 100644 --- a/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj +++ b/src/dotnet/QuantEngine.Core.Tests/QuantEngine.Core.Tests.csproj @@ -12,6 +12,8 @@ + + @@ -22,6 +24,7 @@ + diff --git a/src/dotnet/QuantEngine.Core.Tests/SchedulerServiceTests.cs b/src/dotnet/QuantEngine.Core.Tests/SchedulerServiceTests.cs new file mode 100644 index 00000000..c2287449 --- /dev/null +++ b/src/dotnet/QuantEngine.Core.Tests/SchedulerServiceTests.cs @@ -0,0 +1,70 @@ +using Xunit; +using Moq; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Hangfire; +using Hangfire.Common; +using QuantEngine.Web.Services; + +namespace QuantEngine.Core.Tests; + +public class SchedulerServiceTests +{ + [Fact] + public void InitializeSchedules_RegistersAllFourRequiredJobs() + { + // Arrange + var loggerMock = new Mock>(); + var jobClientMock = new Mock(); + var recurringJobManagerMock = new Mock(); + var scopeFactoryMock = new Mock(); + + var configMock = new Mock(); + configMock.Setup(c => c["Kis:AccountMode"]).Returns("mock"); + + var service = new SchedulerService( + loggerMock.Object, + jobClientMock.Object, + recurringJobManagerMock.Object, + scopeFactoryMock.Object, + configMock.Object + ); + + // Act + service.InitializeSchedules(); + + // Assert + // Verify daily-collection was added or updated + recurringJobManagerMock.Verify(m => m.AddOrUpdate( + "daily-collection", + It.IsAny(), + "0 9 * * *", + It.IsAny() + ), Times.Once); + + // Verify hourly-price-update was added or updated + recurringJobManagerMock.Verify(m => m.AddOrUpdate( + "hourly-price-update", + It.IsAny(), + "0 9,11,13,15 * * 1-5", + It.IsAny() + ), Times.Once); + + // Verify weekly-report was added or updated + recurringJobManagerMock.Verify(m => m.AddOrUpdate( + "weekly-report", + It.IsAny(), + "0 17 * * 5", + It.IsAny() + ), Times.Once); + + // Verify monthly-optimization was added or updated + recurringJobManagerMock.Verify(m => m.AddOrUpdate( + "monthly-optimization", + It.IsAny(), + "0 2 1 * *", + It.IsAny() + ), Times.Once); + } +}