public async Task RunAsync( [ServiceBusTrigger( "%" + Settings.MarketParticipantTopicNameKey + "%", "%" + Settings.MarketParticipantSubscriptionNameKey + "%", Connection = Settings.MarketParticipantConnectionStringKey)] byte[] message) { _logger.LogInformation("Begins processing MarketParticipantSyncFunction."); var integrationEvent = _sharedIntegrationEventParser.Parse(message); if (integrationEvent is ActorUpdatedIntegrationEvent actorUpdated) { if (actorUpdated.Status is ActorStatus.Active or ActorStatus.Passive && actorUpdated.ExternalActorId.HasValue) { var command = new UpdateActorCommand( actorUpdated.ActorId, actorUpdated.ExternalActorId.Value); await _mediator.Send(command).ConfigureAwait(false); } else { var command = new DeleteActorCommand(actorUpdated.ActorId); await _mediator.Send(command).ConfigureAwait(false); } }
public async Task DeleteActorCommand_HasActor_DeletesActor() { // Arrange await using var host = await OperationsIntegrationHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var actorId = Guid.NewGuid(); var externalId = Guid.NewGuid(); var initialCommand = new UpdateActorCommand(actorId, externalId); await mediator.Send(initialCommand).ConfigureAwait(false); var command = new DeleteActorCommand(actorId); // Act await mediator.Send(command).ConfigureAwait(false); // Assert var actorRepository = scope.GetInstance <IActorRepository>(); var actualUsingId = await actorRepository.GetActorAsync(new ActorId(actorId)).ConfigureAwait(false); Assert.Null(actualUsingId); var actualUsingExternalId = await actorRepository.GetActorAsync(new ExternalActorId(externalId)).ConfigureAwait(false); Assert.Null(actualUsingExternalId); }
public async Task Validate_ValidActorId_ValidatesProperty() { // Arrange const string propertyName = nameof(DeleteActorCommand.ActorId); var target = new DeleteActorCommandRuleSet(); var command = new DeleteActorCommand(Guid.NewGuid()); // Act var result = await target.ValidateAsync(command).ConfigureAwait(false); // Assert Assert.True(result.IsValid); Assert.DoesNotContain(propertyName, result.Errors.Select(x => x.PropertyName)); }
public async Task DeleteActorCommand_NoActor_DoesNothing() { // Arrange await using var host = await OperationsIntegrationHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var actorId = Guid.NewGuid(); var command = new DeleteActorCommand(actorId); // Act + Assert await mediator.Send(command).ConfigureAwait(false); }
public async Task DeleteActorCommandHandle_WithoutActor_DoesNothing() { // Arrange var repository = new Mock <IActorRepository>(); var target = new ActorUpdatedHandler(repository.Object, new Mock <ILogger>().Object); var actorId = new ActorId(Guid.NewGuid()); repository .Setup(r => r.GetActorAsync(It.Is <ActorId>(id => id == actorId))) .ReturnsAsync((Actor?)null); var deleteActorCommand = new DeleteActorCommand(Guid.Parse(actorId.Value)); // Act + Assert await target.Handle(deleteActorCommand, CancellationToken.None).ConfigureAwait(false); }
public async Task DeleteActorCommand_InvalidCommand_ThrowsException() { // Arrange await using var host = await OperationsIntegrationHost .InitializeAsync() .ConfigureAwait(false); await using var scope = host.BeginScope(); var mediator = scope.GetInstance <IMediator>(); var command = new DeleteActorCommand(Guid.Empty); // Act + Assert await Assert .ThrowsAsync <ValidationException>(() => mediator.Send(command)) .ConfigureAwait(false); }
public async Task <Unit> Handle(DeleteActorCommand request, CancellationToken cancellationToken) { ArgumentNullException.ThrowIfNull(request, nameof(request)); _logger.LogInformation("Delete actor with ActorId: {ActorId}.", request.ActorId); var actorId = new ActorId(request.ActorId); var actor = await _actorRepository.GetActorAsync(actorId).ConfigureAwait(false); if (actor != null) { await _actorRepository.DeleteAsync(actor).ConfigureAwait(false); } return(Unit.Value); }
public async Task DeleteActorCommandHandle_WithActor_DeletesActor() { // Arrange var repository = new Mock <IActorRepository>(); var target = new ActorUpdatedHandler(repository.Object, new Mock <ILogger>().Object); var actorId = new ActorId(Guid.NewGuid()); var externalId = new ExternalActorId(Guid.NewGuid()); var actor = new Actor(actorId, externalId); repository .Setup(r => r.GetActorAsync(It.Is <ActorId>(id => id == actorId))) .ReturnsAsync(actor); var deleteActorCommand = new DeleteActorCommand(Guid.Parse(actorId.Value)); // Act await target.Handle(deleteActorCommand, CancellationToken.None).ConfigureAwait(false); // Assert repository.Verify(r => r.DeleteAsync(actor), Times.Once); }