"""Test session model.""" from unittest.mock import MagicMock from grass import api, config from grass.connectors import redis from grass.connectors.redis import redis_client from grass.models import session def test_session_create(): """Test the creation of a session in the best conditions.""" token = '983784cx' data, status = session.create(10, 50, token) assert status == 200 assert data.get('token') == token assert data.get('token_duration') == config.SESSION_DURATION def test_session_create_failure(monkeypatch): """Test when the creation of the token fails.""" monkeypatch.setattr(redis.redis_client, 'set', MagicMock(return_value=False)) token = '983784cx' data, status = session.create(10, 50, token) assert status == 400 assert 'errors' in data def test_key_creation(): """Test the creation of a key for a specific token.""" key = '9827088x' assert session.get_key(key) == 'session:%(key)s' % dict(key=key) def test_get_existing_token(): """Test the get of an existing token.""" token = '983784cd' actual_roles = ['foo', 'bar'] session.create(10, 50, token, actual_roles) data, status = session.get_token(token) assert status == 200 assert data.get('user_id') == '50' assert data.get('client_id') == '10' assert data.get('roles') == actual_roles def test_get_inexistant_token(): """Test the get of an inexisting/expired token.""" data, status = session.get_token('random') assert status == 404 assert 'errors' in data def test_store_auth_on_logout(monkeypatch): """Test store auth token.""" token = 'Bearer token' ttl = 134 monkeypatch.setattr(redis_client, 'set', MagicMock()) session.store_auth_on_logout(token, ttl) redis_client.set.assert_called_with('logged-out-jwt-' + token, '', ttl) def test_jwt_not_cached(monkeypatch): """Test the existance of jwt token.""" token = 'Bearer token' request_referer = 'https://your.domain.com/' monkeypatch.setattr(redis_client, 'exists', MagicMock(return_value=True)) monkeypatch.setattr(api.logger, 'info', MagicMock()) session.is_jwt_cached(token, request_referer) redis_client.exists.assert_called_with('logged-out-jwt-' + token) api.logger.info.assert_called_with( f'JWT is not invalid, this JWT belongs to a logged out user. ' f'token: {token} ' f'referer={request_referer}' ) def test_is_jwt_cached(monkeypatch): """Test the existance of jwt token.""" token = 'Bearer token' referer = 'https://your.domain.com/' monkeypatch.setattr(redis_client, 'exists', MagicMock(return_value=False)) session.is_jwt_cached(token, referer) redis_client.exists.assert_called_with('logged-out-jwt-' + token)