public void should_login_token()
        {
            var secureSession = new SecureSession<Token>(null, new MemoryTokenStore<Token>());
            var token = new Token(Guid.Empty, null, false);

            secureSession.Login(token);

            secureSession.IsLoggedIn().ShouldBeTrue();
            secureSession.GetCurrentToken().ShouldEqual(token);
        }
        public void should_not_log_in_an_invalid_user()
        {
            var authenticationService = Substitute.For<IAuthenticationService<Token>>();
            var secureSession = new SecureSession<Token>(authenticationService, new MemoryTokenStore<Token>());

            authenticationService.Authenticate(Arg.Any<string>(), Arg.Any<string>()).
                                  ReturnsForAnyArgs(x => { throw new AuthenticationService.AccessDeniedException(); });

            Assert.Throws<AuthenticationService.AccessDeniedException>(() => secureSession.Login("username", "password"));

            secureSession.IsLoggedIn().ShouldBeFalse();
            secureSession.GetCurrentToken().ShouldBeNull();
        }
        public void should_logout_user()
        {
            var authenticationService = Substitute.For<IAuthenticationService<Token>>();
            var secureSession = new SecureSession<Token>(authenticationService, new MemoryTokenStore<Token>());

            authenticationService.Authenticate(Arg.Any<string>(), Arg.Any<string>()).
                                  ReturnsForAnyArgs(new Token(Guid.Empty, null, false));

            secureSession.Login("username", "password");
            secureSession.Logout();

            secureSession.IsLoggedIn().ShouldBeFalse();
            secureSession.GetCurrentToken().ShouldBeNull();
        }
        public void should_login_valid_user()
        {
            var authenticationService = Substitute.For<IAuthenticationService<Token>>();
            var secureSession = new SecureSession<Token>(authenticationService, new MemoryTokenStore<Token>());
            var userId = Guid.NewGuid();

            authenticationService.Authenticate(Arg.Any<string>(), Arg.Any<string>()).
                                  ReturnsForAnyArgs(new Token(userId, "username", true));

            secureSession.Login("username", "password");

            secureSession.IsLoggedIn().ShouldBeTrue();
            var token = secureSession.GetCurrentToken();
            token.ShouldNotBeNull();
            token.UserId.ShouldEqual(userId);
            token.Username.ToString().ShouldEqual("username");
            token.IsAdministrator.ShouldBeTrue();
        }