Update admin theme/layout and refresh README details.
Align the project baseline with the latest admin interface styling and layout structure while documenting setup and usage updates in README.
This commit is contained in:
@@ -0,0 +1,32 @@
|
||||
from app.db.seed import run_seed
|
||||
from app.modules.users.repository import get_user_by_email
|
||||
|
||||
|
||||
def test_seed_ensures_admin_is_superuser():
|
||||
admin = get_user_by_email("admin@compton.example")
|
||||
assert admin is not None
|
||||
admin.is_superuser = False
|
||||
from app.modules.users import repository
|
||||
|
||||
repository.update_user(admin)
|
||||
|
||||
run_seed(include_demo_pages=False)
|
||||
|
||||
refreshed = get_user_by_email("admin@compton.example")
|
||||
assert refreshed is not None
|
||||
assert refreshed.is_superuser is True
|
||||
|
||||
|
||||
def test_seed_ensures_ops_is_not_superuser():
|
||||
ops = get_user_by_email("ops@compton.example")
|
||||
assert ops is not None
|
||||
ops.is_superuser = True
|
||||
from app.modules.users import repository
|
||||
|
||||
repository.update_user(ops)
|
||||
|
||||
run_seed(include_demo_pages=False)
|
||||
|
||||
refreshed = get_user_by_email("ops@compton.example")
|
||||
assert refreshed is not None
|
||||
assert refreshed.is_superuser is False
|
||||
@@ -0,0 +1,44 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import UTC, datetime, timedelta
|
||||
|
||||
from app.core.database import session_scope
|
||||
from app.db.token_cleanup import cleanup_expired_tokens
|
||||
from app.modules.auth.models import EmailVerificationToken, PasswordResetToken, RefreshToken
|
||||
from app.modules.users.repository import get_user_by_email
|
||||
|
||||
|
||||
def test_cleanup_expired_tokens_removes_stale_rows():
|
||||
user = get_user_by_email("admin@compton.example")
|
||||
now = datetime.now(UTC)
|
||||
with session_scope() as db:
|
||||
db.add(
|
||||
RefreshToken(
|
||||
user_id=user.id,
|
||||
token_hash="f" * 64,
|
||||
family_id="fam-cleanup-1",
|
||||
expires_at=now - timedelta(days=2),
|
||||
revoked_at=now - timedelta(days=2),
|
||||
)
|
||||
)
|
||||
db.add(
|
||||
PasswordResetToken(
|
||||
user_id=user.id,
|
||||
token_hash="e" * 64,
|
||||
expires_at=now - timedelta(days=1),
|
||||
used_at=None,
|
||||
)
|
||||
)
|
||||
db.add(
|
||||
EmailVerificationToken(
|
||||
user_id=user.id,
|
||||
token_hash="d" * 64,
|
||||
expires_at=now - timedelta(days=1),
|
||||
used_at=None,
|
||||
)
|
||||
)
|
||||
|
||||
result = cleanup_expired_tokens(retention_days=1)
|
||||
assert result["refresh_tokens_deleted"] >= 1
|
||||
assert result["password_reset_tokens_deleted"] >= 1
|
||||
assert result["email_verification_tokens_deleted"] >= 1
|
||||
Reference in New Issue
Block a user