public void Smoke()
        {
            // arrange
            var users = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(users.Object, forms.Object, hash);

            // act / post
            Assert.That(service, Is.Not.Null);
        }
        public void FailedAuthentication_WrongPassword()
        {
            // arrange
            var users = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(users.Object, forms.Object, hash);

            users.Setup(u => u.Users).Returns(new List<User> { new User { Email = "*****@*****.**", PasswordHash = hash.CreateMD5Hash("111"), Id = 1, Temp = false } }.AsQueryable());
            forms.Setup(f => f.SetAuthCookie("", false)).Throws(new Exception("SetAuthCookie must not be called for failed authentication"));

            // act
            var auth = service.Authenticate("*****@*****.**", "1111");

            // post
            Assert.That(auth, Is.False);
        }
        public void SuccessAuthentication()
        {
            // arrange
            var users = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(users.Object, forms.Object, hash);

            users.Setup(u => u.Users).Returns(new List<User> { new User { Email = "*****@*****.**", PasswordHash = hash.CreateMD5Hash("111"), Id = 1, Temp = false } }.AsQueryable());

            // act
            var auth = service.Authenticate("*****@*****.**", "111");

            // post
            Assert.That(auth, Is.True);
            forms.Verify(f => f.SetAuthCookie("*****@*****.**", false));
        }
        public void GetUserId()
        {
            // arrange
            var users = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(users.Object, forms.Object, hash);

            users.Setup(u => u.Users).Returns(new List<User> { new User { Email = "*****@*****.**", PasswordHash = hash.CreateMD5Hash("111"), Id = 1, Temp = false } }.AsQueryable());

            // act
            var id = service.GetUserIdByEmail("*****@*****.**");

            // assert
            Assert.That(id, Is.EqualTo(1));
        }
        public void CreateNewUser_ApiToken_Created()
        {
            // arrange
            var usersRepository = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(usersRepository.Object, forms.Object, hash);

            var users = new List<User>();
            usersRepository.Setup(u => u.Users).Returns(users.AsQueryable());
            usersRepository.Setup(u => u.Save(It.IsAny<User>())).Callback((User u) => users.Add(u));

            // act
            service.RegisterNewUser("*****@*****.**", "mypass");

            // assert
            Assert.That(users.Count, Is.GreaterThan(0));
            var found = users.Find((u) => u.Email == "*****@*****.**");
            Assert.That(found.ApiToken.Length, Is.EqualTo(32));

        }
        public void CreateNewUser_Returns_False_If_User_Exists()
        {
            // arrange
            var usersRepository = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(usersRepository.Object, forms.Object, hash);

            var users = new List<User>();
            usersRepository.Setup(u => u.Users).Returns(users.AsQueryable());
            usersRepository.Setup(u => u.Save(It.IsAny<User>())).Callback((User u) => users.Add(u));

            // act
            service.RegisterNewUser("*****@*****.**", "mypass");
            var result = service.RegisterNewUser("*****@*****.**", "mypass");

            // assert
            Assert.That(result, Is.False);
        }
        public void CreateNewUser_User_Immediately_Auhtenticated()
        {
            //arrange
            var usersRepository = new Mock<IUsersRepository>();
            var forms = new Mock<IFormsAuthentication>();
            var hash = new HashService();
            var service = new AuthenticationService(usersRepository.Object, forms.Object, hash);

            var users = new List<User>();
            usersRepository.Setup(u => u.Users).Returns(users.AsQueryable());
            usersRepository.Setup(u => u.Save(It.IsAny<User>())).Callback((User u) => users.Add(u));

            // act
            service.RegisterNewUser("*****@*****.**", "mypass");

            // assert
            Assert.That(users.Count, Is.GreaterThan(0));
            forms.Verify(f => f.SetAuthCookie("*****@*****.**", false));
        }