atst/tests/utils/test_session_limiter.py
2020-03-04 11:51:15 -05:00

52 lines
1.3 KiB
Python

import pytest
from redis import Redis
from unittest.mock import Mock
from uuid import uuid4
from atat.utils.session_limiter import SessionLimiter
from tests.factories import UserFactory
from atat.models.user import User
@pytest.fixture
def mock_redis():
return Mock(spec=Redis)
@pytest.fixture
def mock_session():
mock = Mock(spec=["sid"])
mock.sid = uuid4()
return mock
def test_session_limiter_deletes_users_old_session(mock_redis, mock_session):
last_session_id = uuid4()
current_session_id = uuid4()
mock_session.sid = current_session_id
session_limiter = SessionLimiter(
{"LIMIT_CONCURRENT_SESSIONS": True}, mock_session, mock_redis
)
user = UserFactory.create(last_session_id=last_session_id)
session_limiter.on_login(user)
mock_redis.delete.assert_called_with("session:{}".format(last_session_id))
def test_session_limiter_updates_users_last_sesion_id(mock_redis, mock_session, db):
last_session_id = uuid4()
current_session_id = uuid4()
mock_session.sid = current_session_id
session_limiter = SessionLimiter(
{"LIMIT_CONCURRENT_SESSIONS": True}, mock_session, mock_redis
)
user = UserFactory.create(last_session_id=last_session_id)
session_limiter.on_login(user)
user = db.session.query(User).get(user.id)
assert user.last_session_id == current_session_id