public void Register_ModelStateNotValid_UserNotCreated()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var membershipService = new Mock<IMembershipService>(MockBehavior.Strict).Object;
            var roleService = new Mock<IRoleService>().Object;
            var authenticationProvider = new Mock<IAuthenticationProvider>(MockBehavior.Strict).Object;

            var controller = new AccountController(unitOfWork,
                                                   membershipService,
                                                   roleService,
                                                   new ProfileService(unitOfWork),
                                                   authenticationProvider);
            controller.ModelState.AddModelError("", "");

            // Act
            var result = (ViewResult) controller.Register(new RegisterViewModel());

            // Assert
            result.ViewName.Should().Be("");
        }
        public void Register_Simple_UserCreated()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var membershipServiceMock = MembershipServiceMock(user, MembershipCreateStatus.Success);
            var roleService = new Mock<IRoleService>().Object;
            var authenticationProvider = new Mock<IAuthenticationProvider>().Object;

            var controller = new AccountController(unitOfWork,
                                                   membershipServiceMock.Object,
                                                   roleService,
                                                   new ProfileService(unitOfWork),
                                                   authenticationProvider);
            var viewModel = new RegisterViewModel
            {
                UserName = "******",
                Email = "[email protected]",
                Password = "******",
                ConfirmPassword = "******",
                PhoneNumber = "000000"
            };

            // Act
            controller.Register(viewModel);

            // Assert
            MembershipCreateStatus status;
            membershipServiceMock.Verify(x => x.CreateUser(viewModel.UserName,
                                                           viewModel.Password,
                                                           viewModel.Email,
                                                           null,
                                                           null,
                                                           true,
                                                           out status),
                                         Times.Once());
        }
        public void Register_UserCreationFailed_UserProfileNotCreated()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var membershipServiceMock = MembershipServiceMock(user, MembershipCreateStatus.ProviderError);
            var roleService = new Mock<IRoleService>().Object;
            var authenticationProvider = new Mock<IAuthenticationProvider>().Object;

            var controller = new AccountController(unitOfWork,
                                                   membershipServiceMock.Object,
                                                   roleService,
                                                   new ProfileService(unitOfWork),
                                                   authenticationProvider);

            // Act
            controller.Register(new RegisterViewModel());

            // Assert
            var userProfiles = unitOfWork.GetRepository<UserProfile>().Get();
            userProfiles.Should().BeEmpty();
            controller.ModelState.IsValid.Should().BeFalse();
        }
        public void Register_UserCreationSucceded_UserRoleAssignedToUser()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var membershipServiceMock = MembershipServiceMock(user, MembershipCreateStatus.Success);
            var roleService = new Mock<IRoleService>();
            var authenticationProvider = new Mock<IAuthenticationProvider>().Object;

            var controller = new AccountController(unitOfWork,
                                                   membershipServiceMock.Object,
                                                   roleService.Object,
                                                   new ProfileService(unitOfWork),
                                                   authenticationProvider);

            // Act
            controller.Register(new RegisterViewModel());

            // Assert
            roleService.Verify(rs => rs.AddUsersToRoles(new[] { user.UserName }, new[] { "user" }));
        }
        public void Register_UserCreationSucceded_UserProfileCreated()
        {
            // Arrange
            var unitOfWork = new UnitOfWorkMock();
            var user = new User();
            var roleService = new Mock<IRoleService>().Object;
            var membershipServiceMock = MembershipServiceMock(user, MembershipCreateStatus.Success);
            var authenticationProvider = new Mock<IAuthenticationProvider>().Object;

            var controller = new AccountController(unitOfWork,
                                                   membershipServiceMock.Object,
                                                   roleService,
                                                   new ProfileService(unitOfWork),
                                                   authenticationProvider);
            var viewModel = new RegisterViewModel
                            {
                                PhoneNumber = "000000"
                            };

            // Act
            controller.Register(viewModel);

            // Assert
            var userProfile = unitOfWork.GetRepository<UserProfile>().Get().Single();
            userProfile.User.Should().Be(user);
            userProfile.PhoneNumber.Should().Be(viewModel.PhoneNumber);
        }