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); } }
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)))); }
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[]>())); }