public async Task Handle(UserRegisteredNotificationEvent notification, CancellationToken cancellationToken) { // Get the user by his email var user = _userService.GetUser(notification.UserEmail); if (user == null) { throw new EntityNotFoundException($"The user with given email: {notification.UserEmail} does not exist in data store"); } // Prepare activation uri var activationUriFormat = _configuration.GetSection("AppSettings:AccountActivationUriFormat").Value; var activationUri = Uri.EscapeUriString(activationUriFormat.Replace("{token}", user.ActivationToken)); // Prepare notification with activation uri var templateData = new UserRegisteredNotificationTemplateData(activationUri, user.Username); await _notificationService.SendAsync(user.Email, templateData); }
public async Task Handle_WhenCalled_AttemptToSendProperNotificationExpected() { // ARRANGE var userEmail = "*****@*****.**"; var configuration = Substitute.For <IConfiguration>(); var configurationSection = Substitute.For <IConfigurationSection>(); configurationSection.Value = "http://localhost:4200/AccountActivate/{token}"; configuration.GetSection("AppSettings:AccountActivationUriFormat").Returns(configurationSection); var userService = Substitute.For <IUserService>(); var user = new UserForDetailedDto { Email = userEmail, ActivationToken = "activation_token" }; userService.GetUser(default(string)).ReturnsForAnyArgs(user); var notificationService = Substitute.For <INotificationService>(); INotificationTemplateData actualNotificationTemplateData = null; string actualRecipient = string.Empty; notificationService.When(x => x.SendAsync(Arg.Any <string>(), Arg.Any <INotificationTemplateData>())).Do(x => { actualRecipient = x.ArgAt <string>(0); actualNotificationTemplateData = x.ArgAt <INotificationTemplateData>(1); }); var expectedNotificationTemplateData = new UserRegisteredNotificationTemplateData($"http://localhost:4200/AccountActivate/{user.ActivationToken}", user.Username); var sut = new UserRegisteredNotificationHandler(notificationService, userService, configuration); var userRegisteredNotificationEvent = new UserRegisteredNotificationEvent(userEmail); // ACT await sut.Handle(userRegisteredNotificationEvent, new CancellationToken()); // ASSERT actualRecipient.Should().BeEquivalentTo(userEmail); actualNotificationTemplateData.Should().BeEquivalentTo(expectedNotificationTemplateData); }