mirror of
https://github.com/Xevion/linkpulse.git
synced 2025-12-12 12:12:03 -06:00
Add test_session, add randomizers, move test_app, user/session fixtures
This commit is contained in:
0
backend/linkpulse/tests/__init__.py
Normal file
0
backend/linkpulse/tests/__init__.py
Normal file
15
backend/linkpulse/tests/random.py
Normal file
15
backend/linkpulse/tests/random.py
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
import random
|
||||||
|
import string
|
||||||
|
import time
|
||||||
|
|
||||||
|
|
||||||
|
def epoch() -> int:
|
||||||
|
return int(time.time())
|
||||||
|
|
||||||
|
|
||||||
|
def random_string(length: int = 10) -> str:
|
||||||
|
return "".join(random.choices(string.ascii_lowercase + string.digits, k=length))
|
||||||
|
|
||||||
|
|
||||||
|
def random_email() -> str:
|
||||||
|
return random_string() + str(epoch()) + "@example.com"
|
||||||
51
backend/linkpulse/tests/test_session.py
Normal file
51
backend/linkpulse/tests/test_session.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
from datetime import timedelta
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
import structlog
|
||||||
|
from linkpulse.models import Session
|
||||||
|
from linkpulse.tests.random import random_string
|
||||||
|
from linkpulse.tests.test_user import user
|
||||||
|
from linkpulse.utilities import utc_now
|
||||||
|
|
||||||
|
logger = structlog.get_logger()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def db():
|
||||||
|
return Session._meta.database
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def session(user):
|
||||||
|
return Session.create(
|
||||||
|
user=user, token=random_string(32), expiry=utc_now() + timedelta(hours=1)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def expired_session(session):
|
||||||
|
session.expiry = utc_now() - timedelta(hours=1)
|
||||||
|
return session
|
||||||
|
|
||||||
|
|
||||||
|
def test_session_create(session):
|
||||||
|
assert Session.get_or_none(Session.token == session.token) is not None
|
||||||
|
|
||||||
|
|
||||||
|
def test_auto_revoke(db, expired_session):
|
||||||
|
# Expired, but still exists
|
||||||
|
assert Session.get_or_none(Session.token == expired_session.token) is not None
|
||||||
|
# Test revoke=False
|
||||||
|
assert expired_session.is_expired(revoke=False) is True
|
||||||
|
# Test revoke=True
|
||||||
|
assert expired_session.is_expired(revoke=True) is True
|
||||||
|
# Expired, and no longer exists
|
||||||
|
assert Session.get_or_none(Session.token == expired_session.token) is None
|
||||||
|
|
||||||
|
|
||||||
|
def test_expiry_valid(session):
|
||||||
|
assert session.is_expired() is False
|
||||||
|
|
||||||
|
|
||||||
|
def test_expiry_invalid(expired_session):
|
||||||
|
assert expired_session.is_expired() is True
|
||||||
10
backend/linkpulse/tests/test_user.py
Normal file
10
backend/linkpulse/tests/test_user.py
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import pytest
|
||||||
|
from linkpulse.models import User
|
||||||
|
from linkpulse.tests.random import epoch, random_email, random_string
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def user():
|
||||||
|
return User.create(
|
||||||
|
email=random_email(), password_hash=str(epoch()) + random_string(64)
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user