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 UpdateActorCommand_NewActor_InsertsActor() { // 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 command = new UpdateActorCommand(actorId, externalId); // Act await mediator.Send(command).ConfigureAwait(false); // Assert var actorRepository = scope.GetInstance <IActorRepository>(); var actualUsingId = await actorRepository.GetActorAsync(new ActorId(actorId)).ConfigureAwait(false); Assert.NotNull(actualUsingId); var actualUsingExternalId = await actorRepository.GetActorAsync(new ExternalActorId(externalId)).ConfigureAwait(false); Assert.NotNull(actualUsingExternalId); }
public async Task Validate_ValidExternalActorId_ValidatesProperty() { // Arrange const string propertyName = nameof(UpdateActorCommand.ExternalActorId); var target = new UpdateActorCommandRuleSet(); var command = new UpdateActorCommand(_validUuid, 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 Validate_InvalidActorId_ValidatesProperty() { // Arrange const string propertyName = nameof(UpdateActorCommand.ActorId); var target = new UpdateActorCommandRuleSet(); var command = new UpdateActorCommand(Guid.Empty, _validUuid); // Act var result = await target.ValidateAsync(command).ConfigureAwait(false); // Assert Assert.False(result.IsValid); Assert.Contains(propertyName, result.Errors.Select(x => x.PropertyName)); }
public async Task <IActionResult> Update(UpdateActorCommand command) { try { return(Ok(await Mediator.Send(command))); } catch (ValidationException e) { return(BadRequest(e.Message)); } catch (ArgumentNullException) { return(BadRequest("No entities with this primary key were found in the database.")); } }
public async Task UpdateActorCommand_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 UpdateActorCommand(Guid.Empty, Guid.Empty); // Act + Assert await Assert .ThrowsAsync <ValidationException>(() => mediator.Send(command)) .ConfigureAwait(false); }
public async Task UpdateActorCommandHandle_WithActor_SavesActor() { // Arrange var repository = new Mock <IActorRepository>(); var target = new ActorUpdatedHandler(repository.Object, new Mock <ILogger>().Object); var actorId = Guid.NewGuid(); var externalId = Guid.NewGuid(); var updateActorCommand = new UpdateActorCommand(actorId, externalId); // Act await target.Handle(updateActorCommand, CancellationToken.None).ConfigureAwait(false); // Assert repository.Verify( r => r.AddOrUpdateAsync(It.Is <Actor>(actor => actor.Id.Value == actorId.ToString() && actor.ExternalId.Value == externalId)), Times.Once); }