public void FailedAuthenticationTest()
        {
            // Given
            // create mocks
            var mockAuthenticationService = MockRepository.GenerateStub<IAuthenticationService>();
            var authenticationResultStub = new AuthenticationResult { AccessToken = null, IsValid = true, Message = Resources.Content.AuthenticationResult_Failed };
            mockAuthenticationService.Stub(x => x.Authenticate("admin", "failing-password")).Return(authenticationResultStub);

            // insert mock in the IoC container
            var bootstrapper = new Bootstrapper();
            var browser = new Browser(bootstrapper);
            bootstrapper.Container.EjectAllInstancesOf<IAuthenticationService>();
            bootstrapper.Container.Inject<IAuthenticationService>(mockAuthenticationService);

            var bodyDyn = new { username = "******", password = "******" };

            // When
            var result = TestHelper.JsonBodyPost(RouterPattern.Security.Authenticate, bodyDyn, bootstrapper, browser);

            // Then
            mockAuthenticationService.AssertWasCalled(x => x.Authenticate("admin", "failing-password"));

            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            var authenticationResult = JsonConvert.DeserializeObject<AuthenticationResult>(result.Body.AsString());

            Assert.AreEqual(true, authenticationResult.IsValid);
            Assert.AreEqual(null, authenticationResult.AccessToken);
            Assert.AreEqual(Resources.Content.AuthenticationResult_Failed, authenticationResult.Message);
        }
        public void ReAuthenticationTest()
        {
            var mockAuthenticationService = MockRepository.GenerateStub<IAuthenticationService>();
            var mockAuthenticationService2 = MockRepository.GenerateStub<IAuthenticationService>();
            var authenticationResultStub = new AuthenticationResult { AccessToken = "access-token", IsValid = true, Message = Resources.Content.AuthenticationResult_Success, IssuedAt = new DateTime(2014, 10, 21, 14, 55, 43) };
            var authenticationResultStub2 = new AuthenticationResult { AccessToken = "access-token", IsValid = true, Message = Resources.Content.AuthenticationResult_ExistingToken, IssuedAt = new DateTime(2014, 10, 21, 14, 55, 43) };
            mockAuthenticationService.Stub(x => x.Authenticate("admin", "success-password")).Return(authenticationResultStub);
            mockAuthenticationService2.Stub(x => x.Authenticate("admin", "success-password")).Return(authenticationResultStub2);

            // insert mock in the IoC container
            var bootstrapper = new Bootstrapper();
            var browser = new Browser(bootstrapper);
            bootstrapper.Container.EjectAllInstancesOf<IAuthenticationService>();
            bootstrapper.Container.Inject<IAuthenticationService>(mockAuthenticationService);

            var bodyDyn = new { username = "******", password = "******" };

            // When
            var result = TestHelper.JsonBodyPost(RouterPattern.Security.Authenticate, bodyDyn, bootstrapper, browser);

            // Then
            mockAuthenticationService.AssertWasCalled(x => x.Authenticate("admin", "success-password"));
            
            Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
            var authenticationResult = JsonConvert.DeserializeObject<AuthenticationResult>(result.Body.AsString());

            Assert.AreEqual(true, authenticationResult.IsValid);
            Assert.AreEqual("access-token", authenticationResult.AccessToken);
            Assert.AreEqual(Resources.Content.AuthenticationResult_Success, authenticationResult.Message);
            Assert.AreEqual(new DateTime(2014, 10, 21, 14, 55, 43), authenticationResult.IssuedAt);

            bootstrapper.Container.EjectAllInstancesOf<IAuthenticationService>();
            bootstrapper.Container.Inject<IAuthenticationService>(mockAuthenticationService2);

            var bodyDyn2 = new { username = "******", password = "******" };

            // When
            var result2 = TestHelper.JsonBodyPost(RouterPattern.Security.Authenticate, bodyDyn2, bootstrapper, browser);

            // Then
            mockAuthenticationService2.AssertWasCalled(x => x.Authenticate("admin", "success-password"));
                        
            Assert.AreEqual(HttpStatusCode.OK, result2.StatusCode);
            var authenticationResult2 = JsonConvert.DeserializeObject<AuthenticationResult>(result2.Body.AsString());

            Assert.AreEqual(true, authenticationResult2.IsValid);
            Assert.AreEqual("access-token", authenticationResult2.AccessToken);
            Assert.AreEqual(Resources.Content.AuthenticationResult_ExistingToken, authenticationResult2.Message);
            Assert.AreEqual(new DateTime(2014, 10, 21, 14, 55, 43), authenticationResult2.IssuedAt);
        }