public async Task Handle(ResetPasswordRequestNotificationEvent 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 reset password uri var resetPasswordUriFormat = _configuration.GetSection("AppSettings:ResetPasswordUriFormat").Value; var resetPasswordUri = Uri.EscapeUriString(resetPasswordUriFormat.Replace("{token}", user.ResetPasswordToken)); // Prepare notification with reset password uri var templateData = new ResetPasswordNotificationTemplateData(resetPasswordUri, 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://server.com/ResetPassword/{token}"; configuration.GetSection("AppSettings:ResetPasswordUriFormat").Returns(configurationSection); var userService = Substitute.For <IUserService>(); var user = new UserForDetailedDto { Email = userEmail, ResetPasswordToken = "reset_password_token", Username = "******" }; 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 ResetPasswordNotificationTemplateData("http://server.com/ResetPassword/reset_password_token", user.Username); var sut = new ResetPasswordRequestNotificationHandler(notificationService, userService, configuration); var resetPasswordRequestNotificationEvent = new ResetPasswordRequestNotificationEvent(userEmail); // ACT await sut.Handle(resetPasswordRequestNotificationEvent, new CancellationToken()); // ASSERT actualRecipient.Should().BeEquivalentTo(userEmail); actualNotificationTemplateData.Should().BeEquivalentTo(expectedNotificationTemplateData); }