Files
duty-teller/tests/test_calendar_token_repository.py
Nikolay Tatarinov e25eb7be2f
Some checks failed
CI / lint-and-test (push) Failing after 11s
chore: update development dependencies and improve test coverage
- Upgraded `pytest-asyncio` to version 1.0 to ensure compatibility with the latest features and improvements.
- Increased the coverage threshold in pytest configuration to 80%, enhancing the quality assurance process.
- Added a new `conftest.py` file to manage shared fixtures and improve test organization.
- Introduced multiple new test files to cover various components, ensuring comprehensive test coverage across the application.
- Updated the `.coverage` file to reflect the latest coverage metrics.
2026-02-20 17:33:04 +03:00

69 lines
2.2 KiB
Python

"""Unit tests for calendar subscription token repository functions."""
import pytest
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from duty_teller.db.models import Base
from duty_teller.db.repository import (
create_calendar_token,
get_user_by_calendar_token,
get_or_create_user_by_full_name,
)
@pytest.fixture
def session():
"""In-memory SQLite session with all tables (including calendar_subscription_tokens)."""
engine = create_engine(
"sqlite:///:memory:", connect_args={"check_same_thread": False}
)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine, autocommit=False, autoflush=False)
s = Session()
try:
yield s
finally:
s.close()
engine.dispose()
@pytest.fixture
def user_a(session):
"""Create one user."""
u = get_or_create_user_by_full_name(session, "User A")
return u
def test_create_calendar_token_returns_token_string(session, user_a):
"""create_calendar_token returns a non-empty URL-safe string."""
token = create_calendar_token(session, user_a.id)
assert isinstance(token, str)
assert len(token) > 0
assert " " not in token
def test_get_user_by_calendar_token_valid_returns_user(session, user_a):
"""Valid token returns the correct user."""
token = create_calendar_token(session, user_a.id)
user = get_user_by_calendar_token(session, token)
assert user is not None
assert user.id == user_a.id
assert user.full_name == "User A"
def test_get_user_by_calendar_token_invalid_returns_none(session, user_a):
"""Invalid or unknown token returns None."""
create_calendar_token(session, user_a.id)
assert get_user_by_calendar_token(session, "wrong-token") is None
assert get_user_by_calendar_token(session, "") is None
def test_create_calendar_token_one_active_per_user(session, user_a):
"""Creating a new token removes the previous one for the same user."""
token1 = create_calendar_token(session, user_a.id)
token2 = create_calendar_token(session, user_a.id)
assert token1 != token2
assert get_user_by_calendar_token(session, token1) is None
assert get_user_by_calendar_token(session, token2).id == user_a.id