Beispiel #1
0
        public async Task HandleAsync(AccountCreatedIntegrationEvent integrationEvent, CancellationToken cancellationToken = default)
        {
            try
            {
                var user = User.Builder()
                           .SetId(integrationEvent.AccountId)
                           .SetEmail(integrationEvent.Email)
                           .SetServiceActive(DefaultUserSettings.ServiceActive)
                           .SetAnnouncementPreferenceLimit(DefaultUserSettings.AnnouncementPreferenceLimit)
                           .SetAnnouncementSendingFrequency(DefaultUserSettings.AnnouncementSendingFrequency)
                           .SetPicture(integrationEvent.Picture)
                           .Build();

                user.AddCreatedEvent(integrationEvent.CorrelationId);

                await _communicationBus.DispatchDomainEventsAsync(user, cancellationToken);

                await _userRepository.AddAsync(user);

                var userCreationCompletedIntegrationEvent = new UserCreationCompletedIntegrationEvent(integrationEvent.CorrelationId, user.Id);
                await _integrationEventBus.PublishIntegrationEventAsync(userCreationCompletedIntegrationEvent);
            }
            catch (Exception e)
            {
                _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaUsers, integrationEvent,
                                                 "userId={userId}, message={message}, stackTrace={stackTrace}", integrationEvent.AccountId, e.Message, e.StackTrace);
                var userCreationCompletedIntegrationEventFailure = new UserCreationCompletedIntegrationEventFailure(
                    integrationEvent.CorrelationId, IntegrationEventErrorCodeEnumeration.UnexpectedError.DisplayName,
                    IntegrationEventErrorMessage.UnexpectedError, integrationEvent.AccountId);
                await _integrationEventBus.PublishIntegrationEventAsync(userCreationCompletedIntegrationEventFailure);
            }
        }
Beispiel #2
0
        public async Task HandleAsync_Should_Complete_Account_Creation_With_Failure_When_UserCreationCompletedIntegrationEventFailure_Is_Received()
        {
            var userCreationCompletedIntegrationEventFailure = new UserCreationCompletedIntegrationEventFailure(Guid.NewGuid(),
                                                                                                                DateTimeOffset.UtcNow, "AnyCode", "AnyReason", Guid.NewGuid());
            var account = Account.Builder()
                          .SetId(userCreationCompletedIntegrationEventFailure.UserId)
                          .SetEmail("*****@*****.**")
                          .SetConfirmed(false)
                          .SetPasswordHash("PasswordHash")
                          .SetSecurityStamp(Guid.NewGuid())
                          .SetCreated(DateTimeOffset.UtcNow)
                          .SetRoles(new List <Guid> {
                Guid.NewGuid()
            })
                          .Build();
            var getAccountResult = GetResult <Account> .Ok(account);

            var          message    = $"Could not finish {nameof(Account)} creation process.";
            const string logMessage = "accountId={accountId}, message={message}, reason={reason}, code={code}";
            var          logParams  = new object[]
            {
                userCreationCompletedIntegrationEventFailure.UserId,
                message,
                userCreationCompletedIntegrationEventFailure.Reason,
                userCreationCompletedIntegrationEventFailure.Code
            };

            _loggerMock.Setup(x => x.LogIntegrationEventError(It.IsAny <ServiceComponentEnumeration>(),
                                                              It.IsAny <IIntegrationEvent>(), It.IsAny <string>(), It.IsAny <object[]>()))
            .Verifiable();
            _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            _accountGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ReturnsAsync(getAccountResult);
            _accountDataConsistencyServiceMock.Setup(x => x.DeleteAccountWithRelatedPersistedGrants(It.IsAny <Account>()))
            .Returns(Task.CompletedTask);


            Func <Task> result = async() => await _userCreatedIntegrationEventHandlerFailure.HandleAsync(userCreationCompletedIntegrationEventFailure);

            await result.Should().NotThrowAsync <Exception>();

            _loggerMock.Verify(x => x.LogIntegrationEventError(
                                   It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                                   It.Is <IIntegrationEvent>(ie => ie == userCreationCompletedIntegrationEventFailure),
                                   It.Is <string>(m => m.Equals(logMessage)), It.Is <object[]>(p => !p.Except(logParams).Any())));
            _integrationEventBusMock.Verify(x => x.PublishIntegrationEventAsync(It.Is <IIntegrationEvent>(ie =>
                                                                                                          IsPublishedIntegrationEventCorrect((AccountCreationCompletedIntegrationEventFailure)ie,
                                                                                                                                             userCreationCompletedIntegrationEventFailure.CorrelationId, userCreationCompletedIntegrationEventFailure.UserId,
                                                                                                                                             userCreationCompletedIntegrationEventFailure.Code, userCreationCompletedIntegrationEventFailure.Reason))));
        }
Beispiel #3
0
        public async Task HandleAsync_Should_Complete_Account_Creation_With_Failure_When_UserCreationCompletedIntegrationEventFailure_Is_Received_And_Getting_Or_Deleting_Account_Throws_Any_Exception()
        {
            var userCreationCompletedIntegrationEventFailure = new UserCreationCompletedIntegrationEventFailure(Guid.NewGuid(),
                                                                                                                DateTimeOffset.UtcNow, "AnyCode", "AnyReason", Guid.NewGuid());
            var          message    = $"Could not finish {nameof(Account)} creation process.";
            const string logMessage = "accountId={accountId}, message={message}, reason={reason}, code={code}";
            var          logParams  = new object[]
            {
                userCreationCompletedIntegrationEventFailure.UserId,
                message,
                userCreationCompletedIntegrationEventFailure.Reason,
                userCreationCompletedIntegrationEventFailure.Code
            };
            var          exception            = new Exception("Exception occured.");
            const string getAccountLogMessage = "accountId={accountId}, message={message}, stackTrace={stackTrace}";

            _loggerMock.Setup(x => x.LogIntegrationEventError(It.IsAny <ServiceComponentEnumeration>(),
                                                              It.IsAny <IIntegrationEvent>(), It.IsAny <string>(), It.IsAny <object[]>()))
            .Verifiable();
            _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            _accountGetterServiceMock.Setup(x => x.GetByIdAsync(It.IsAny <Guid>())).ThrowsAsync(exception);


            Func <Task> result = async() => await _userCreatedIntegrationEventHandlerFailure.HandleAsync(userCreationCompletedIntegrationEventFailure);

            await result.Should().NotThrowAsync <Exception>();

            _loggerMock.Verify(x => x.LogIntegrationEventError(
                                   It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                                   It.Is <IIntegrationEvent>(ie => ie == userCreationCompletedIntegrationEventFailure),
                                   It.Is <string>(m => m.Equals(logMessage)), It.Is <object[]>(p => !p.Except(logParams).Any())));
            _integrationEventBusMock.Verify(x => x.PublishIntegrationEventAsync(It.Is <IIntegrationEvent>(ie =>
                                                                                                          IsPublishedIntegrationEventCorrect((AccountCreationCompletedIntegrationEventFailure)ie,
                                                                                                                                             userCreationCompletedIntegrationEventFailure.CorrelationId, userCreationCompletedIntegrationEventFailure.UserId,
                                                                                                                                             userCreationCompletedIntegrationEventFailure.Code, userCreationCompletedIntegrationEventFailure.Reason))));
            _loggerMock.Verify(
                x => x.LogIntegrationEventError(
                    It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                    It.Is <IIntegrationEvent>(ie => ie == userCreationCompletedIntegrationEventFailure),
                    It.Is <string>(m => m.Equals(getAccountLogMessage)),
                    It.IsAny <object[]>()));
        }