54 lines
1.8 KiB
Python
54 lines
1.8 KiB
Python
"""Tests for notification config service."""
|
|
import pytest
|
|
from sqlalchemy import select
|
|
|
|
from app.domains.notifications.models import AuditLog
|
|
from app.domains.notifications.service import (
|
|
emit_notification,
|
|
upsert_notification_config,
|
|
get_notification_configs,
|
|
)
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_upsert_creates_config(db, admin_user):
|
|
"""Kann Notification-Config anlegen."""
|
|
await upsert_notification_config(db, admin_user.id, "render_complete", "in_app", True)
|
|
configs = await get_notification_configs(db, admin_user.id)
|
|
assert len(configs) >= 1
|
|
render_cfg = next((c for c in configs if c.event_type == "render_complete"), None)
|
|
assert render_cfg is not None
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_upsert_updates_existing(db, admin_user):
|
|
"""Update überschreibt bestehende Config."""
|
|
await upsert_notification_config(db, admin_user.id, "order_submitted", "in_app", True)
|
|
await upsert_notification_config(db, admin_user.id, "order_submitted", "in_app", False)
|
|
configs = await get_notification_configs(db, admin_user.id)
|
|
cfg = next((c for c in configs if c.event_type == "order_submitted"), None)
|
|
assert cfg is not None
|
|
assert cfg.enabled is False
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_emit_notification_persists_naive_utc_timestamp(db, admin_user):
|
|
"""Notification writes must match the legacy naive Postgres timestamp columns."""
|
|
await emit_notification(
|
|
db,
|
|
actor_user_id=admin_user.id,
|
|
target_user_id=admin_user.id,
|
|
action="order.submitted",
|
|
entity_type="order",
|
|
entity_id="order-123",
|
|
details={"order_number": "SA-2026-00001"},
|
|
)
|
|
|
|
row = (
|
|
await db.execute(
|
|
select(AuditLog).where(AuditLog.action == "order.submitted")
|
|
)
|
|
).scalar_one()
|
|
|
|
assert row.timestamp.tzinfo is None
|