public void POST_Password_Reset_Email_Is_Sent_When_Valid_Email_Address_Is_Provided()
        {
            // Arrange
            User user = new UserBuilder().WithEmailAddress("*****@*****.**").Build();

            var requestFormValues = new Dictionary <string, StringValues>();

            requestFormValues.Add("GovUk_Text_EmailAddress", "*****@*****.**");

            var controllerBuilder = new ControllerBuilder <PasswordResetController>();
            var controller        = controllerBuilder
                                    .WithRequestFormValues(requestFormValues)
                                    .WithDatabaseObjects(user)
                                    .WithMockUriHelper()
                                    .Build();

            // Act
            controller.PasswordResetPost(new PasswordResetViewModel());

            // Assert
            Assert.AreEqual(1, controllerBuilder.EmailsSent.Count);

            var email = controllerBuilder.EmailsSent.FirstOrDefault();

            Assert.NotNull(email);
            Assert.AreEqual(EmailTemplates.SendResetPasswordVerificationEmail, email.TemplateId);
            Assert.AreEqual(user.EmailAddress, email.EmailAddress);
        }
        public void POST_Verification_Email_Is_Sent_After_Creating_User_Account()
        {
            // Arrange
            var requestFormValues = new Dictionary <string, StringValues>();

            requestFormValues.Add("GovUk_Text_EmailAddress", "*****@*****.**");
            requestFormValues.Add("GovUk_Text_ConfirmEmailAddress", "*****@*****.**");
            requestFormValues.Add("GovUk_Text_FirstName", "Test");
            requestFormValues.Add("GovUk_Text_LastName", "Example");
            requestFormValues.Add("GovUk_Text_JobTitle", "Tester");
            requestFormValues.Add("GovUk_Text_Password", "Pa55word");
            requestFormValues.Add("GovUk_Text_ConfirmPassword", "Pa55word");
            requestFormValues.Add("GovUk_Checkbox_SendUpdates", "true");
            requestFormValues.Add("GovUk_Checkbox_AllowContact", "false");

            var controllerBuilder = new ControllerBuilder <AccountCreationController>();
            var controller        = controllerBuilder
                                    .WithRequestFormValues(requestFormValues)
                                    .WithMockUriHelper()
                                    .Build();

            // Act
            var response = (ViewResult)controller.CreateUserAccountPost(new CreateUserAccountViewModel());

            // Assert
            Assert.AreEqual("ConfirmEmailAddress", response.ViewName);

            Assert.AreEqual(1, controllerBuilder.EmailsSent.Count);
            NotifyEmail emailSent = controllerBuilder.EmailsSent[0];

            Assert.AreEqual("*****@*****.**", emailSent.EmailAddress);
            Assert.AreEqual(EmailTemplates.AccountVerificationEmail, emailSent.TemplateId);
        }
        public void POST_Password_Reset_Email_Is_Not_Sent_When_One_Has_Been_Sent_Within_Last_10_Minutes()
        {
            // Arrange
            User user = new UserBuilder().WithEmailAddress("*****@*****.**").WithPasswordResetCode("code", VirtualDateTime.Now.AddMinutes(-2)).Build();

            var requestFormValues = new Dictionary <string, StringValues>();

            requestFormValues.Add("GovUk_Text_EmailAddress", "*****@*****.**");

            var controllerBuilder = new ControllerBuilder <PasswordResetController>();
            var controller        = controllerBuilder
                                    .WithRequestFormValues(requestFormValues)
                                    .WithDatabaseObjects(user)
                                    .WithMockUriHelper()
                                    .Build();

            // Act
            Assert.Throws <UserRecentlySentPasswordResetEmailWithoutChangingPasswordException>(() => controller.PasswordResetPost(new PasswordResetViewModel()));
        }
        public void POST_Password_Reset_Email_Is_Not_Sent_When_There_Is_No_User_With_Email_Address_Provided()
        {
            // Arrange
            User user = new UserBuilder().WithEmailAddress("*****@*****.**").Build();

            var requestFormValues = new Dictionary <string, StringValues>();

            requestFormValues.Add("GovUk_Text_EmailAddress", "*****@*****.**");

            var controllerBuilder = new ControllerBuilder <PasswordResetController>();
            var controller        = controllerBuilder
                                    .WithRequestFormValues(requestFormValues)
                                    .WithDatabaseObjects(user)
                                    .WithMockUriHelper()
                                    .Build();

            // Act
            controller.PasswordResetPost(new PasswordResetViewModel());

            // Assert
            Assert.IsEmpty(controllerBuilder.EmailsSent);
        }