Skip to content

Commit

Permalink
Rename IEventObserver and its method (#1414)
Browse files Browse the repository at this point in the history
  • Loading branch information
gunndabad authored Jul 11, 2024
1 parent 87a632c commit 4449f62
Show file tree
Hide file tree
Showing 29 changed files with 78 additions and 78 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TeachingRecordSystem.Core.Events.Processing;

public interface IEventPublisher
{
Task PublishEvent(EventBase @event);
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace TeachingRecordSystem.Core.Events.Processing;

public class NoopEventPublisher : IEventPublisher
{
public Task PublishEvent(EventBase @event) => Task.CompletedTask;
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,16 @@ public class PublishEventsBackgroundService : BackgroundService

private static readonly TimeSpan _pollInterval = TimeSpan.FromMinutes(1);

private readonly IEventObserver _eventObserver;
private readonly IEventPublisher _eventPublisher;
private readonly IDbContextFactory<TrsDbContext> _dbContextFactory;
private readonly ILogger<PublishEventsBackgroundService> _logger;

public PublishEventsBackgroundService(
IEventObserver eventObserver,
IEventPublisher eventPublisher,
IDbContextFactory<TrsDbContext> dbContextFactory,
ILogger<PublishEventsBackgroundService> logger)
{
_eventObserver = eventObserver;
_eventPublisher = eventPublisher;
_dbContextFactory = dbContextFactory;
_logger = logger;
}
Expand Down Expand Up @@ -82,7 +82,7 @@ where published is false
try
{
var eventBase = e.ToEventBase();
await _eventObserver.OnEventSaved(eventBase);
await _eventPublisher.PublishEvent(eventBase);

e.Published = true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ public static IServiceCollection AddEventPublishing(
services.AddSingleton<IHostedService, PublishEventsBackgroundService>();
}

services.AddSingleton<IEventObserver, NoopEventObserver>();
services.AddSingleton<IEventPublisher, NoopEventPublisher>();

return services;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
// Publish events synchronously
PublishEventsDbCommandInterceptor.ConfigureServices(services);

services.AddSingleton<IEventObserver>(_ => new ForwardToTestScopedEventObserver());
services.AddSingleton<IEventPublisher>(_ => new ForwardToTestScopedEventPublisher());
services.AddTestScoped<IClock>(tss => tss.Clock);
services.AddSingleton<TestData>(
sp => ActivatorUtilities.CreateInstance<TestData>(
Expand Down Expand Up @@ -110,11 +110,11 @@ public void OnProvidersExecuting(PageApplicationModelProviderContext context)
}
}

// IEventObserver needs to be a singleton but we want it to resolve to a test-scoped CaptureEventObserver.
// This provides a wrapper that can be registered as a singleon that delegates to the test-scoped IEventObserver instance.
private class ForwardToTestScopedEventObserver : IEventObserver
// IEventPublisher needs to be a singleton but we want it to resolve to a test-scoped CaptureEventPublisher.
// This provides a wrapper that can be registered as a singleon that delegates to the test-scoped IEventPublisher instance.
private class ForwardToTestScopedEventPublisher : IEventPublisher
{
public Task OnEventSaved(EventBase @event) => TestScopedServices.GetCurrent().EventObserver.OnEventSaved(@event);
public Task PublishEvent(EventBase @event) => TestScopedServices.GetCurrent().EventPublisher.PublishEvent(@event);
}

private class ForwardToTestScopedClock : IClock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -276,7 +276,7 @@ await journeyInstance.UpdateStateAsync(state =>
state.SetTrn(true, trn);
});

EventObserver.Clear();
EventPublisher.Clear();

var request = new HttpRequestMessage(HttpMethod.Post, $"/check-answers?{journeyInstance.GetUniqueIdQueryParameter()}");

Expand Down Expand Up @@ -305,7 +305,7 @@ await journeyInstance.UpdateStateAsync(state =>
Assert.Equal(trnToken.Trn, data.TrnTokenTrn);
Assert.Equal(applicationUser.UserId, data.ClientApplicationUserId);

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var supportTaskCreatedEvent = Assert.IsType<SupportTaskCreatedEvent>(e);
Assert.Equal(Clock.UtcNow, supportTaskCreatedEvent.CreatedUtc);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ protected TestBase(HostFixture hostFixture)

public HostFixture HostFixture { get; }

public CaptureEventObserver EventObserver => _testServices.EventObserver;
public CaptureEventPublisher EventPublisher => _testServices.EventPublisher;

public TestableClock Clock => _testServices.Clock;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,14 @@ protected TestBase(HostFixture hostFixture)
var events = synced.OfType<EventBase>();
foreach (var e in events)
{
TestScopedServices.GetCurrent().EventObserver.OnEventSaved(e);
TestScopedServices.GetCurrent().EventPublisher.PublishEvent(e);
}
});
}

public HostFixture HostFixture { get; }

public CaptureEventObserver EventObserver => _testServices.EventObserver;
public CaptureEventPublisher EventPublisher => _testServices.EventPublisher;

public TestableClock Clock => _testServices.Clock;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ public class TestScopedServices
public TestScopedServices()
{
Clock = new();
EventObserver = new();
EventPublisher = new();
}

public static TestScopedServices GetCurrent() =>
Expand All @@ -25,5 +25,5 @@ public static TestScopedServices Reset()

public TestableClock Clock { get; }

public CaptureEventObserver EventObserver { get; }
public CaptureEventPublisher EventPublisher { get; }
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,17 @@ public async Task PublishEvents_PublishesUnpublishEventsAndSetsPublishedFlag()
await dbContext.SaveChangesAsync();
var dbEvent = dbContext.ChangeTracker.Entries<Event>().Last().Entity;

var eventObserver = new TestableEventObserver();
var eventPublisher = new TestableEventPublisher();

var logger = new NullLogger<PublishEventsBackgroundService>();

var service = new PublishEventsBackgroundService(eventObserver, _dbFixture.GetDbContextFactory(), logger);
var service = new PublishEventsBackgroundService(eventPublisher, _dbFixture.GetDbContextFactory(), logger);

// Act
await service.PublishEvents(CancellationToken.None);

// Assert
Assert.Collection(eventObserver.Events, e => e.Equals(@event));
Assert.Collection(eventPublisher.Events, e => e.Equals(@event));

await dbContext.Entry(dbEvent).ReloadAsync();
Assert.True(dbEvent.Published);
Expand All @@ -51,21 +51,21 @@ public async Task PublishEvents_DoesNotPublishAlreadyPublishedEvent()
dbContext.ChangeTracker.Entries<Event>().Last().Entity.Published = true;
await dbContext.SaveChangesAsync();

var eventObserver = new TestableEventObserver();
var eventPublisher = new TestableEventPublisher();

var logger = new NullLogger<PublishEventsBackgroundService>();

var service = new PublishEventsBackgroundService(eventObserver, _dbFixture.GetDbContextFactory(), logger);
var service = new PublishEventsBackgroundService(eventPublisher, _dbFixture.GetDbContextFactory(), logger);

// Act
await service.PublishEvents(CancellationToken.None);

// Assert
Assert.Empty(eventObserver.Events);
Assert.Empty(eventPublisher.Events);
}

[Fact]
public async Task PublishEvents_EventObserverThrows_DoesNotThrow()
public async Task PublishEvents_EventPublisherThrows_DoesNotThrow()
{
// Arrange
using var dbContext = _dbFixture.GetDbContext();
Expand All @@ -74,13 +74,13 @@ public async Task PublishEvents_EventObserverThrows_DoesNotThrow()
await dbContext.SaveChangesAsync();
var dbEvent = dbContext.ChangeTracker.Entries<Event>().Last().Entity;

var eventObserver = new Mock<IEventObserver>();
var eventPublisher = new Mock<IEventPublisher>();
var publishException = new Exception("Bang!");
eventObserver.Setup(mock => mock.OnEventSaved(It.IsAny<EventBase>())).ThrowsAsync(publishException);
eventPublisher.Setup(mock => mock.PublishEvent(It.IsAny<EventBase>())).ThrowsAsync(publishException);

var logger = new Mock<ILogger<PublishEventsBackgroundService>>();

var service = new PublishEventsBackgroundService(eventObserver.Object, _dbFixture.GetDbContextFactory(), logger.Object);
var service = new PublishEventsBackgroundService(eventPublisher.Object, _dbFixture.GetDbContextFactory(), logger.Object);

// Act
await service.PublishEvents(CancellationToken.None);
Expand All @@ -96,13 +96,13 @@ public async Task PublishEvents_EventObserverThrows_DoesNotThrow()
RaisedBy = SystemUser.SystemUserId
};

private class TestableEventObserver : IEventObserver
private class TestableEventPublisher : IEventPublisher
{
private readonly List<EventBase> _events = new();

public IReadOnlyCollection<EventBase> Events => _events.AsReadOnly();

public Task OnEventSaved(EventBase @event)
public Task PublishEvent(EventBase @event)
{
_events.Add(@event);
return Task.CompletedTask;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ protected override void ConfigureWebHost(IWebHostBuilder builder)
services.AddSingleton<CurrentUserProvider>();
services.AddStartupTask<TestUsers.CreateUsersStartupTask>();

services.AddSingleton<IEventObserver>(_ => new ForwardToTestScopedEventObserver());
services.AddSingleton<IEventPublisher>(_ => new ForwardToTestScopedEventPublisher());
services.AddTestScoped<IClock>(tss => tss.Clock);
services.AddTestScoped<IDataverseAdapter>(tss => tss.DataverseAdapterMock.Object);
services.AddTestScoped<IAadUserService>(tss => tss.AzureActiveDirectoryUserServiceMock.Object);
Expand Down Expand Up @@ -106,11 +106,11 @@ public void OnProvidersExecuting(PageApplicationModelProviderContext context)
}
}

// IEventObserver needs to be a singleton but we want it to resolve to a test-scoped CaptureEventObserver.
// This provides a wrapper that can be registered as a singleon that delegates to the test-scoped IEventObserver instance.
private class ForwardToTestScopedEventObserver : IEventObserver
// IEventPublisher needs to be a singleton but we want it to resolve to a test-scoped CaptureEventPublisher.
// This provides a wrapper that can be registered as a singleon that delegates to the test-scoped IEventPublisher instance.
private class ForwardToTestScopedEventPublisher : IEventPublisher
{
public Task OnEventSaved(EventBase @event) => TestScopedServices.GetCurrent().EventObserver.OnEventSaved(@event);
public Task PublishEvent(EventBase @event) => TestScopedServices.GetCurrent().EventPublisher.PublishEvent(@event);
}

private class ForwardToTestScopedClock : IClock
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ public async Task Post_ValidRequest_CreatesApiKeyCreatesEventAndRedirectsToAppli
}
};

EventObserver.Clear();
EventPublisher.Clear();

// Act
var response = await HttpClient.SendAsync(request);
Expand All @@ -203,7 +203,7 @@ public async Task Post_ValidRequest_CreatesApiKeyCreatesEventAndRedirectsToAppli
return apiKey;
});

EventObserver.AssertEventsSaved(
EventPublisher.AssertEventsSaved(
e =>
{
var apiKeyCreatedEvent = Assert.IsType<ApiKeyCreatedEvent>(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,7 @@ public async Task PostExpire_ValidRequest_SetsExpiresOnApiKeyCreatesEventAndRedi

var request = new HttpRequestMessage(HttpMethod.Post, $"/api-keys/{apiKey.ApiKeyId}/Expire");

EventObserver.Clear();
EventPublisher.Clear();

// Act
var response = await HttpClient.SendAsync(request);
Expand All @@ -160,7 +160,7 @@ await WithDbContext(async dbContext =>
Assert.Equal(Clock.UtcNow, apiKey.Expires);
});

EventObserver.AssertEventsSaved(
EventPublisher.AssertEventsSaved(
e =>
{
var apiKeyUpdatedEvent = Assert.IsType<ApiKeyUpdatedEvent>(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ public async Task Post_ValidRequest_CreatesApplicationUserCreatesEventAndRedirec

Assert.Equal($"/application-users/{applicationUser.UserId}", response.Headers.Location?.OriginalString);

EventObserver.AssertEventsSaved(
EventPublisher.AssertEventsSaved(
e =>
{
var applicationUserCreatedEvent = Assert.IsType<ApplicationUserCreatedEvent>(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,7 +248,7 @@ public async Task Post_ValidRequest_UpdatesNameAndRolesAndOneLoginSettingsAndCre
}
};

EventObserver.Clear();
EventPublisher.Clear();

// Act
var response = await HttpClient.SendAsync(request);
Expand All @@ -263,7 +263,7 @@ await WithDbContext(async dbContext =>
Assert.True(new HashSet<string>(applicationUser.ApiRoles ?? []).SetEquals(new HashSet<string>(newRoles)));
});

EventObserver.AssertEventsSaved(
EventPublisher.AssertEventsSaved(
e =>
{
var applicationUserUpdatedEvent = Assert.IsType<ApplicationUserUpdatedEvent>(e);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ await WithDbContext(async dbContext =>
qualificationId = qualification.QualificationId;
});

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var expectedMqCreatedEvent = new MandatoryQualificationCreatedEvent()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public async Task Post_Confirm_DeletesMqCreatesEventCompletesJourneyAndRedirects
.WithStartDate(startDate)
.WithStatus(status, endDate)));

EventObserver.Clear();
EventPublisher.Clear();

var qualificationId = person.MandatoryQualifications!.Single().QualificationId;

Expand Down Expand Up @@ -170,7 +170,7 @@ public async Task Post_Confirm_DeletesMqCreatesEventCompletesJourneyAndRedirects
var redirectDoc = await redirectResponse.GetDocument();
AssertEx.HtmlDocumentHasFlashSuccess(redirectDoc, "Mandatory qualification deleted");

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var expectedMqDeletedEvent = new MandatoryQualificationDeletedEvent()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,7 @@ public async Task Post_Confirm_UpdatesMqCreatesEventAndCompletesJourneyRedirects
var qualification = person.MandatoryQualifications.First();
var qualificationId = qualification.QualificationId;

EventObserver.Clear();
EventPublisher.Clear();

var journeyInstance = await CreateJourneyInstance(
qualificationId,
Expand Down Expand Up @@ -153,7 +153,7 @@ await WithDbContext(async dbContext =>
Assert.Equal(newProvider.MandatoryQualificationProviderId, qualification.ProviderId);
});

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var expectedMqUpdatedEvent = new MandatoryQualificationUpdatedEvent()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public async Task Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirects
var changeReason = MqChangeSpecialismReasonOption.ChangeOfSpecialism;
var changeReasonDetail = "Some reason";

EventObserver.Clear();
EventPublisher.Clear();

var journeyInstance = await CreateJourneyInstance(
qualificationId,
Expand Down Expand Up @@ -157,7 +157,7 @@ await WithDbContext(async dbContext =>
Assert.Equal(newMqSpecialism, qualification.Specialism);
});

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var expectedMqUpdatedEvent = new MandatoryQualificationUpdatedEvent()
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ public async Task Post_Confirm_UpdatesMqCreatesEventCompletesJourneyAndRedirects
var changeReason = MqChangeStartDateReasonOption.IncorrectStartDate;
var changeReasonDetail = "Some reason";

EventObserver.Clear();
EventPublisher.Clear();

var journeyInstance = await CreateJourneyInstance(
qualificationId,
Expand Down Expand Up @@ -157,7 +157,7 @@ await WithDbContext(async dbContext =>
Assert.Equal(newStartDate, qualification.StartDate);
});

EventObserver.AssertEventsSaved(e =>
EventPublisher.AssertEventsSaved(e =>
{
var expectedMqUpdatedEvent = new MandatoryQualificationUpdatedEvent()
{
Expand Down
Loading

0 comments on commit 4449f62

Please sign in to comment.