public void Register_Post_Success_Redirected_To_Dashboard()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);

            var model = new RegisterUserModel()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };

            auth.Setup(a => a.ValidateCaptcha()).Returns(true);
            auth.Setup(a => a.RegisterNewUser("*****@*****.**", "password")).Returns(true);
            auth.Setup(a => a.Authenticate("*****@*****.**", "password")).Returns(true);

            //act
            var result = controller.Register(model) as RedirectResult;

            //assert (result)
            result.Url.Should().Be("~/user/[email protected]");
        }
        public void Register_Post_Fail_Already_Registered()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);
            var model = new RegisterUserModel()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };

            auth.Setup(a => a.ValidateCaptcha()).Returns(true);
            auth.Setup(a => a.RegisterNewUser("*****@*****.**", "password")).Returns(false);

            //act
            controller.Register(model);
            var result = controller.Register(model) as ViewResult;

            //assert
            Assert.That(model, Is.EqualTo(result.ViewData.Model));
            Assert.That(controller.ModelState[""].Errors[0].ErrorMessage, Is.EqualTo("Sorry, user with such email already exist. Please register with different email."));
        }
        public void Smoke()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);

            //act/assert
            Assert.That(controller, Is.Not.Null);
        }
        public void Index_Get_ReturnsView()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);

            //act
            var result = controller.Index();

            //post
            Assert.That(result, Is.Not.Null);
        }
        public void RegisterMobile_Post_RedirectedToSuccess()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);

            // act
            var model = new RegisterUserModel()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };

            auth.Setup(a => a.ValidateCaptcha()).Returns(true);
            auth.Setup(a => a.RegisterNewUser("*****@*****.**", "password")).Returns(true);
            auth.Setup(a => a.Authenticate("*****@*****.**", "password")).Returns(true);

            var result = controller.RegisterMobile(model) as RedirectResult;

            // assert
            Assert.That(result.Url, Is.EqualTo("~/registration/success"));
        }
        public void Mobile_Get_ReturnsView()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);

            // act
            var view = controller.Mobile();

            // assert
            Assert.That(view, Is.Not.Null);
        }
        public void Register_NewUserRegistered_EmailSent()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);
            var user = new RegisterUserModel
            {
                Email = "*****@*****.**",
                Password = "******"
            };

            auth.Setup(a => a.ValidateCaptcha()).Returns(true);
            auth.Setup(a => a.RegisterNewUser("*****@*****.**", "111111")).Returns(true);

            //act
            var result = controller.Register(user) as RedirectResult;

            //post
            notification.Verify(n => n.NotifyUserOnRegistration("*****@*****.**", "111111"));
        }
        public void Register_Post_Fail_Unknown_Reason()
        {
            // arrange
            var auth = new Mock<IAuthenticationService>();
            var notification = new Mock<INotificationService>();
            var redirect = new RedirectService();
            var controller = new RegistrationController(auth.Object, notification.Object, redirect);
            var model = new RegisterUserModel()
            {
                Email = "*****@*****.**",
                Password = "******",
                ConfirmPassword = "******"
            };

            auth.Setup(a => a.ValidateCaptcha()).Returns(true);
            auth.Setup(a => a.RegisterNewUser("*****@*****.**", "password")).Throws(new Exception());

            //act / post
            var result = controller.Register(model) as ViewResult;
        }
        private static RegistrationController GetMockAccountController(object viewModel)
        {
            var client = A.Fake<IIwsClient>();
            A.CallTo(() => client.SendAsync(A<GetCountries>._)).Returns(new List<CountryData>
            {
                new CountryData
                {
                    Id = new Guid("4345FB05-F7DF-4E16-939C-C09FCA5C7D7B"),
                    Name = "United Kingdom"
                },
                new CountryData
                {
                    Id = new Guid("29B0D09E-BA77-49FB-AF95-4171408C07C9"),
                    Name = "Germany"
                }
            });

            var oauth = A.Fake<IOAuthClient>();

            var registrationController = new RegistrationController(() => oauth, client, null);
            // Mimic the behaviour of the model binder which is responsible for Validating the Model
            var validationContext = new ValidationContext(viewModel, null, null);
            var validationResults = new List<ValidationResult>();
            Validator.TryValidateObject(viewModel, validationContext, validationResults, true);
            foreach (var validationResult in validationResults)
            {
                registrationController.ModelState.AddModelError(validationResult.MemberNames.First(), validationResult.ErrorMessage);
            }

            return registrationController;
        }