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);
                }
            }
コード例 #2
0
    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));
    }
コード例 #5
0
 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."));
     }
 }
コード例 #6
0
    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);
    }
コード例 #7
0
    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);
    }