Skip to content

Commit 0161eef

Browse files
committed
refactor: replace SystemClock with TimeProvider
The commit involves replacing all references to SystemClock with TimeProvider in various files. SystemClock was deleted and TimeProvider was used for achieving similar functionality. This change was made to use a more flexible time provider which will be useful for future adjustments.
1 parent 2959be0 commit 0161eef

11 files changed

Lines changed: 17 additions & 52 deletions

File tree

Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Common/TestEngine/Configuration/ConfigurationExtensions.cs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ namespace EvolutionaryArchitecture.Fitnet.IntegrationTests.Common.TestEngine.Con
33
using System.Reflection;
44
using EvolutionaryArchitecture.Fitnet.Common.Events.EventBus;
55
using EvolutionaryArchitecture.Fitnet.Common.Events.EventBus.InMemory;
6-
using EvolutionaryArchitecture.Fitnet.Common.SystemClock;
76
using Microsoft.AspNetCore.Mvc.Testing;
87
using Microsoft.AspNetCore.TestHost;
9-
using SystemClock;
8+
using Microsoft.Extensions.Time.Testing;
109

1110
internal static class ConfigurationExtensions
1211
{
@@ -37,7 +36,7 @@ private static WebApplicationFactory<T> UseSettings<T>(this WebApplicationFactor
3736
internal static WebApplicationFactory<T> SetFakeSystemClock<T>(this WebApplicationFactory<T> webApplicationFactory, DateTimeOffset fakeDateTimeOffset)
3837
where T : class =>
3938
webApplicationFactory.WithWebHostBuilder(webHostBuilder => webHostBuilder.ConfigureTestServices(services =>
40-
services.AddSingleton<ISystemClock>(new FakeSystemClock(fakeDateTimeOffset))));
39+
services.AddSingleton<TimeProvider>(new FakeTimeProvider(fakeDateTimeOffset))));
4140

4241
internal static WebApplicationFactory<T> WithFakeEventBus<T>(this WebApplicationFactory<T> webApplicationFactory, IEventBus eventBusMock)
4342
where T : class =>
@@ -48,5 +47,4 @@ internal static WebApplicationFactory<T> WithFakeConsumers<T>(this WebApplicatio
4847
where T : class =>
4948
webApplicationFactory.WithWebHostBuilder(webHostBuilder => webHostBuilder.ConfigureTestServices(services =>
5049
services.AddInMemoryEventBus(Assembly.GetExecutingAssembly())));
51-
5250
}

Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Common/TestEngine/SystemClock/FakeSystemClock.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

Chapter-1-initial-architecture/Src/Fitnet.IntegrationTests/Fitnet.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
<ItemGroup>
99
<PackageReference Include="Bogus" Version="34.0.2" />
1010
<PackageReference Include="FluentAssertions" Version="6.12.0" />
11+
<PackageReference Include="Microsoft.Extensions.TimeProvider.Testing" Version="8.0.0" />
1112
<PackageReference Include="NSubstitute" Version="5.1.0" />
1213
<PackageReference Include="Verify.Xunit" Version="22.5.0" />
1314
<PackageReference Include="xunit.runner.visualstudio" Version="2.5.3">

Chapter-1-initial-architecture/Src/Fitnet/Common/SystemClock/ISystemClock.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.

Chapter-1-initial-architecture/Src/Fitnet/Common/SystemClock/SystemClock.cs

Lines changed: 0 additions & 6 deletions
This file was deleted.

Chapter-1-initial-architecture/Src/Fitnet/Common/SystemClock/SystemClockModule.cs

Lines changed: 0 additions & 11 deletions
This file was deleted.

Chapter-1-initial-architecture/Src/Fitnet/Contracts/SignContract/SignContractEndpoint.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@ namespace EvolutionaryArchitecture.Fitnet.Contracts.SignContract;
33
using Data.Database;
44
using Events;
55
using EvolutionaryArchitecture.Fitnet.Common.Events.EventBus;
6-
using Common.SystemClock;
76
using Common.Validation.Requests;
87

98
internal static class SignContractEndpoint
109
{
1110
internal static void MapSignContract(this IEndpointRouteBuilder app) => app.MapPatch(ContractsApiPaths.Sign,
1211
async (Guid id, SignContractRequest request,
13-
ContractsPersistence persistence, IEventBus bus, ISystemClock systemClock,
12+
ContractsPersistence persistence, IEventBus bus,
13+
TimeProvider timeProvider,
1414
CancellationToken cancellationToken) =>
1515
{
1616
var contract =
@@ -21,7 +21,8 @@ internal static void MapSignContract(this IEndpointRouteBuilder app) => app.MapP
2121
return Results.NotFound();
2222
}
2323

24-
contract.Sign(request.SignedAt, systemClock.Now);
24+
var dateNow = timeProvider.GetUtcNow();
25+
contract.Sign(request.SignedAt, dateNow);
2526
await persistence.SaveChangesAsync(cancellationToken);
2627

2728
var @event = ContractSignedEvent.Create(contract.Id, contract.CustomerId, contract.SignedAt!.Value,

Chapter-1-initial-architecture/Src/Fitnet/Offers/Prepare/PassExpiredEventHandler.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,16 @@ namespace EvolutionaryArchitecture.Fitnet.Offers.Prepare;
55
using Passes.MarkPassAsExpired.Events;
66
using Common.Events;
77
using Common.Events.EventBus;
8-
using Common.SystemClock;
98

109
internal sealed class PassExpiredEventHandler(
1110
IEventBus eventBus,
1211
OffersPersistence persistence,
13-
ISystemClock systemClock) : IIntegrationEventHandler<PassExpiredEvent>
12+
TimeProvider timeProvider) : IIntegrationEventHandler<PassExpiredEvent>
1413
{
1514
public async Task Handle(PassExpiredEvent @event, CancellationToken cancellationToken)
1615
{
17-
var offer = Offer.PrepareStandardPassExtension(@event.CustomerId, systemClock.Now);
16+
var nowDate = timeProvider.GetUtcNow();
17+
var offer = Offer.PrepareStandardPassExtension(@event.CustomerId, nowDate);
1818
persistence.Offers.Add(offer);
1919
await persistence.SaveChangesAsync(cancellationToken);
2020

Chapter-1-initial-architecture/Src/Fitnet/Passes/MarkPassAsExpired/MarkPassAsExpiredEndpoint.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ namespace EvolutionaryArchitecture.Fitnet.Passes.MarkPassAsExpired;
33
using Data.Database;
44
using Events;
55
using EvolutionaryArchitecture.Fitnet.Common.Events.EventBus;
6-
using Common.SystemClock;
76

87
internal static class MarkPassAsExpiredEndpoint
98
{
@@ -12,7 +11,7 @@ internal static void MapMarkPassAsExpired(this IEndpointRouteBuilder app) => app
1211
async (
1312
Guid id,
1413
PassesPersistence persistence,
15-
ISystemClock systemClock,
14+
TimeProvider timeProvider,
1615
IEventBus eventBus,
1716
CancellationToken cancellationToken) =>
1817
{
@@ -22,7 +21,8 @@ internal static void MapMarkPassAsExpired(this IEndpointRouteBuilder app) => app
2221
return Results.NotFound();
2322
}
2423

25-
pass.MarkAsExpired(systemClock.Now);
24+
var nowDate = timeProvider.GetUtcNow();
25+
pass.MarkAsExpired(nowDate);
2626
await persistence.SaveChangesAsync(cancellationToken);
2727
await eventBus.PublishAsync(PassExpiredEvent.Create(pass.Id, pass.CustomerId), cancellationToken);
2828

Chapter-1-initial-architecture/Src/Fitnet/Program.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
using EvolutionaryArchitecture.Fitnet.Common.ErrorHandling;
22
using EvolutionaryArchitecture.Fitnet.Common.Events.EventBus;
3-
using EvolutionaryArchitecture.Fitnet.Common.SystemClock;
43
using EvolutionaryArchitecture.Fitnet.Common.Validation.Requests;
54
using EvolutionaryArchitecture.Fitnet.Contracts;
65
using EvolutionaryArchitecture.Fitnet.Offers;
@@ -12,9 +11,9 @@
1211
builder.Services.AddControllers();
1312
builder.Services.AddEndpointsApiExplorer();
1413
builder.Services.AddSwaggerGen();
15-
builder.Services.AddSystemClock();
1614
builder.Services.AddEventBus();
1715
builder.Services.AddRequestsValidations();
16+
builder.Services.AddSingleton(TimeProvider.System);
1817

1918
builder.Services.AddPasses(builder.Configuration);
2019
builder.Services.AddContracts(builder.Configuration);
@@ -52,7 +51,5 @@
5251
namespace EvolutionaryArchitecture.Fitnet
5352
{
5453
[UsedImplicitly]
55-
public sealed class Program
56-
{
57-
}
54+
public sealed class Program;
5855
}

0 commit comments

Comments
 (0)