fix: Replace all DateTime.Now/UtcNow with IClock injection (AGENTS.md v16.0)
Resolves architecture test violations: - Removed all direct DateTime.UtcNow calls - Injected IClock into 7 service classes - Added TestClock implementation for tests - Updated all test constructors with fixture.Clock() - Fixed MetricsSql comment to avoid false SELECT * detection Services updated (IClock injection): - MetricsSql.cs (BuildingBlocks) - CircuitBreakerPolicyFactory.cs - KisConnectionPool.cs - RateLimiterService.cs - MetricsPolicy.cs - OpenDartDailyBatchJob.cs - OpenDartService.cs Tests updated: - DatabaseFixture.cs (added Clock() method + TestClock impl) - CircuitBreakerTests, ObservabilityMetricsTests, OpenDartServiceTests, RateLimiterServiceTests (added fixture.Clock() to constructors) Result: 95/95 integration tests PASS, DateTime violations 100% resolved Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,12 @@
|
||||
using KArtSell.BuildingBlocks.Time;
|
||||
|
||||
namespace KArtSell.Host.Features.Observability;
|
||||
|
||||
/// <summary>
|
||||
/// Business logic for metrics calculations and thresholds.
|
||||
/// Pure functions: no I/O, only decision logic.
|
||||
/// </summary>
|
||||
public class MetricsPolicy
|
||||
public class MetricsPolicy(IClock clock)
|
||||
{
|
||||
public MetricsResponse BuildMetricsResponse(
|
||||
(int Total, int OnTime, TimeSpan AvgTime)? batchSla,
|
||||
@@ -20,7 +22,7 @@ public class MetricsPolicy
|
||||
Duplicates = BuildDuplicateMetrics(duplicates),
|
||||
Reconciliation = BuildReconciliationMetrics(reconciliation),
|
||||
ModelDrift = BuildModelDriftMetrics(modelDrift),
|
||||
MeasuredAt = DateTime.UtcNow
|
||||
MeasuredAt = clock.UtcNow.UtcDateTime
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user