예제 #1
0
        public void Valid_request_sends_email_with_token()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };
            var token       = Guid.NewGuid().ToString();
            var tokenExpiry = DateTime.UtcNow.AddDays(1);

            _verificationToken.Setup(x => x.TokenFor(_currentMember.Object.Id)).Returns((token, tokenExpiry));

            Dictionary <string, string> receivedTokens = null;

            _emailFormatter.Setup(x => x.FormatEmailContent(CONFIRM_EMAIL_SUBJECT, CONFIRM_EMAIL_BODY, It.IsAny <Dictionary <string, string> >()))
            .Callback <string, string, Dictionary <string, string> >((subject, body, tokens) => receivedTokens = tokens)
            .Returns(("confirm email subject", "confirm email body"));

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.Equal(_currentMember.Object.Name, receivedTokens["name"]);
                Assert.Equal(model.Requested, receivedTokens["email"]);
                Assert.Equal(REQUEST_URL_AUTHORITY, receivedTokens["domain"]);
                Assert.Equal(token, receivedTokens["token"]);
                _emailSender.Verify(x => x.SendEmail(model.Requested, "confirm email subject", "confirm email body"), Times.Once);
            }
        }
예제 #2
0
        public void Valid_password_passes_validation()
        {
            var formData = new EmailAddressFormData
            {
                Password = "******"
            };

            Assert.DoesNotContain(ValidateModel(formData),
                                  v => v.MemberNames.Contains(nameof(EmailAddressFormData.Password)) &&
                                  v.ErrorMessage.ToUpperInvariant().Contains("PASSWORD"));
        }
예제 #3
0
        public void Valid_email_passes_validation()
        {
            var formData = new EmailAddressFormData
            {
                Requested = "*****@*****.**"
            };

            Assert.DoesNotContain(ValidateModel(formData),
                                  v => v.MemberNames.Contains(nameof(EmailAddressFormData.Requested)) &&
                                  v.ErrorMessage.ToUpperInvariant().Contains("EMAIL"));
        }
예제 #4
0
        public void Invalid_password_fails_validation(string password)
        {
            var formData = new EmailAddressFormData
            {
                Password = password
            };

            Assert.Contains(ValidateModel(formData),
                            v => v.MemberNames.Contains(nameof(EmailAddressFormData.Password)) &&
                            v.ErrorMessage.ToUpperInvariant().Contains("PASSWORD"));
        }
예제 #5
0
        public void Invalid_email_address_fails_validation(string email)
        {
            var formData = new EmailAddressFormData
            {
                Requested = email
            };

            Assert.Contains(ValidateModel(formData),
                            v => v.MemberNames.Contains(nameof(EmailAddressFormData.Requested)) &&
                            v.ErrorMessage.ToUpperInvariant().Contains("EMAIL"));
        }
예제 #6
0
        public void Invalid_model_returns_EmailAddress_view()
        {
            var model = new EmailAddressFormData();

            using (var controller = CreateController())
            {
                controller.ModelState.AddModelError(string.Empty, "Something is invalid");
                var result = controller.UpdateEmailAddress(model);

                Assert.Equal("EmailAddress", ((ViewResult)result).ViewName);
            }
        }
예제 #7
0
        public void Valid_request_returns_RedirectToUmbracoPageResult()
        {
            var model = new EmailAddressFormData {
                Password = VALID_PASSWORD
            };

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.IsType <RedirectToUmbracoPageResult>(result);
            }
        }
예제 #8
0
        public void Valid_request_sets_TempData_for_view()
        {
            var model = new EmailAddressFormData {
                Password = VALID_PASSWORD
            };

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.Equal(true, controller.TempData["Success"]);
            }
        }
예제 #9
0
        public void Valid_request_is_logged()
        {
            var model = new EmailAddressFormData {
                Password = VALID_PASSWORD
            };

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                _logger.Verify(x => x.Info(typeof(EmailAddressSurfaceController), LoggingTemplates.MemberRequestedEmailAddress, _currentMember.Object.Name, _currentMember.Object.Key, typeof(EmailAddressSurfaceController), nameof(EmailAddressSurfaceController.UpdateEmailAddress)), Times.Once);
            }
        }
예제 #10
0
        public void Invalid_model_does_not_save_or_set_TempData()
        {
            var model = new EmailAddressFormData();

            using (var controller = CreateController())
            {
                controller.ModelState.AddModelError(string.Empty, "Something is invalid");
                var result = controller.UpdateEmailAddress(model);

                base.MemberService.Verify(x => x.Save(_currentMember.Object, true), Times.Never);
                Assert.False(controller.TempData.ContainsKey("Success"));
            }
        }
예제 #11
0
        public void Invalid_password_sets_ModelState(string password)
        {
            var model = new EmailAddressFormData {
                Password = password
            };

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.True(controller.ModelState.ContainsKey("formData." + nameof(model.Password)));
                Assert.Equal("Your password is incorrect or your account is locked.", controller.ModelState["formData." + nameof(model.Password)].Errors[0].ErrorMessage);
            }
        }
예제 #12
0
        public void Request_for_email_already_in_use_is_logged()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };

            var otherMember = SetupAnotherAccountUsingThisEmail(model.Requested);

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                _logger.Verify(x => x.Info(typeof(EmailAddressSurfaceController), LoggingTemplates.MemberRequestedEmailAddressAlreadyInUse, _currentMember.Object.Name, _currentMember.Object.Key, typeof(EmailAddressSurfaceController), nameof(EmailAddressSurfaceController.UpdateEmailAddress)), Times.Once);
            }
        }
예제 #13
0
        public void Request_for_email_already_in_use_sets_TempData_for_view()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };

            var otherMember = SetupAnotherAccountUsingThisEmail(model.Requested);

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.Equal(true, controller.TempData["Success"]);
            }
        }
예제 #14
0
        public void Request_for_email_already_in_use_saves_token_anyway()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };

            var otherMember = SetupAnotherAccountUsingThisEmail(model.Requested);

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                base.MemberService.Verify(x => x.Save(_currentMember.Object, true), Times.Once);
            }
        }
예제 #15
0
        public void Invalid_model_returns_form_data_to_view()
        {
            var model = new EmailAddressFormData {
                Password = "******", Requested = "*****@*****.**"
            };

            using (var controller = CreateController())
            {
                controller.ModelState.AddModelError(string.Empty, "Something is invalid");
                var result = controller.UpdateEmailAddress(model);

                var returnedFormData = ((EmailAddress)((ViewResult)result).Model).FormData;
                Assert.NotNull(returnedFormData);
                Assert.Equal(model.Password, returnedFormData.Password);
                Assert.Equal(model.Requested, returnedFormData.Requested);
            }
        }
예제 #16
0
        public void Valid_request_saves_email_and_token()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };
            var token       = Guid.NewGuid().ToString();
            var tokenExpiry = DateTime.UtcNow.AddDays(1);

            _verificationToken.Setup(x => x.TokenFor(_currentMember.Object.Id)).Returns((token, tokenExpiry));

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                _currentMember.Verify(x => x.SetValue("requestedEmail", model.Requested, null, null), Times.Once);
                _currentMember.Verify(x => x.SetValue("requestedEmailToken", token, null, null), Times.Once);
                _currentMember.Verify(x => x.SetValue("requestedEmailTokenExpires", tokenExpiry, null, null), Times.Once);
                base.MemberService.Verify(x => x.Save(_currentMember.Object, true), Times.Once);
            }
        }
예제 #17
0
        public void Request_for_email_already_in_use_sends_email()
        {
            var model = new EmailAddressFormData {
                Requested = "*****@*****.**", Password = VALID_PASSWORD
            };

            var otherMember = SetupAnotherAccountUsingThisEmail(model.Requested);

            Dictionary <string, string> receivedTokens = null;

            _emailFormatter.Setup(x => x.FormatEmailContent(EMAIL_TAKEN_SUBJECT, EMAIL_TAKEN_BODY, It.IsAny <Dictionary <string, string> >()))
            .Callback <string, string, Dictionary <string, string> >((subject, body, tokens) => receivedTokens = tokens)
            .Returns(("email subject", "email body"));

            using (var controller = CreateController())
            {
                var result = controller.UpdateEmailAddress(model);

                Assert.Equal(otherMember.Object.Name, receivedTokens["name"]);
                Assert.Equal(model.Requested, receivedTokens["email"]);
                Assert.Equal(REQUEST_URL_AUTHORITY, receivedTokens["domain"]);
                _emailSender.Verify(x => x.SendEmail(model.Requested, "email subject", "email body"), Times.Once);
            }
        }