public static async Task PublishUserEmailChangedIntegrationEventAsync(this IServiceBusPublisher publisher, User user)
        {
            var integrationEvent = new UserEmailChangedIntegrationEvent
            {
                UserId = user.Id.ToString(),
                Email  = new EmailDto
                {
                    Address  = user.Email,
                    Verified = user.EmailConfirmed
                }
            };

            await publisher.PublishAsync(integrationEvent);
        }
예제 #2
0
        public async Task HandleAsync_WhenUserEmailChangedIntegrationEventIsValid_ShouldBeCompletedTask()
        {
            // Arrange
            var userId     = new UserId();
            var user       = new User(userId, "*****@*****.**");
            var mockLogger = new MockLogger <UserEmailChangedIntegrationEventHandler>();

            TestMock.UserService.Setup(userService => userService.UserExistsAsync(It.IsAny <UserId>())).ReturnsAsync(true).Verifiable();

            TestMock.UserService.Setup(userService => userService.FindUserAsync(It.IsAny <UserId>())).ReturnsAsync(user).Verifiable();

            TestMock.UserService.Setup(userService => userService.UpdateUserAsync(It.IsAny <User>(), It.IsAny <string>()))
            .ReturnsAsync(new DomainValidationResult <User>())
            .Verifiable();

            TestMock.UserService.Setup(userService => userService.SendEmailAsync(It.IsAny <UserId>(), It.IsAny <string>(), It.IsAny <object>()))
            .Returns(Task.CompletedTask)
            .Verifiable();

            var handler = new UserEmailChangedIntegrationEventHandler(TestMock.UserService.Object, mockLogger.Object, TestMock.SendgridOptions.Object);

            var integrationEvent = new UserEmailChangedIntegrationEvent
            {
                Email = new EmailDto
                {
                    Address  = "*****@*****.**",
                    Verified = true
                },
                UserId = userId
            };

            // Act
            await handler.HandleAsync(integrationEvent);

            // Assert
            TestMock.UserService.Verify(userService => userService.UserExistsAsync(It.IsAny <UserId>()), Times.Once);
            TestMock.UserService.Verify(userService => userService.FindUserAsync(It.IsAny <UserId>()), Times.Once);
            TestMock.UserService.Verify(userService => userService.UpdateUserAsync(It.IsAny <User>(), It.IsAny <string>()), Times.Once);
            TestMock.UserService.Verify(userService => userService.SendEmailAsync(It.IsAny <UserId>(), It.IsAny <string>(), It.IsAny <object>()), Times.Once);
            mockLogger.Verify(Times.Never());
        }