feat: add support tickets and imrpove web app loading

This commit is contained in:
3252a8
2026-05-20 16:38:24 +03:00
parent 3b846f0d44
commit d8a1da1f13
78 changed files with 8990 additions and 168 deletions
+102
View File
@@ -0,0 +1,102 @@
from datetime import datetime, timedelta, timezone
from types import SimpleNamespace
from bot.services.support_service import (
SupportService,
TicketForbidden,
_support_admin_notification_decision,
)
def test_support_traffic_snapshot_calculates_percent_and_left_bytes():
snapshot = SupportService._traffic_snapshot(25, 100)
assert snapshot["percent"] == 25
assert snapshot["left_bytes"] == 75
def test_ticket_forbidden_error_code_is_stable():
exc = TicketForbidden("ticket_forbidden")
assert str(exc) == "ticket_forbidden"
def test_regular_limit_treats_unlimited_override_as_zero_limit():
sub = SimpleNamespace(regular_unlimited_override=True, traffic_limit_bytes=100)
assert SupportService._regular_limit(sub) == 0
def test_support_admin_notification_decision_sends_first_unread():
now = datetime(2026, 5, 20, tzinfo=timezone.utc)
ticket = SimpleNamespace(
unread_admin_count=1,
admin_last_notified_at=now,
admin_last_emailed_at=now,
)
settings = SimpleNamespace(
SUPPORT_ADMIN_NOTIFICATION_COOLDOWN_SECONDS=300,
SUPPORT_ADMIN_EMAIL_COOLDOWN_SECONDS=1800,
SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED=True,
)
decision = _support_admin_notification_decision(ticket, settings, now=now)
assert decision.send_telegram is True
assert decision.send_email is True
def test_support_admin_notification_decision_defaults_email_disabled():
now = datetime(2026, 5, 20, tzinfo=timezone.utc)
ticket = SimpleNamespace(
unread_admin_count=1,
admin_last_notified_at=None,
admin_last_emailed_at=None,
)
settings = SimpleNamespace(
SUPPORT_ADMIN_NOTIFICATION_COOLDOWN_SECONDS=300,
SUPPORT_ADMIN_EMAIL_COOLDOWN_SECONDS=1800,
)
decision = _support_admin_notification_decision(ticket, settings, now=now)
assert decision.send_telegram is True
assert decision.send_email is False
def test_support_admin_notification_decision_suppresses_fast_followups():
now = datetime(2026, 5, 20, tzinfo=timezone.utc)
ticket = SimpleNamespace(
unread_admin_count=4,
admin_last_notified_at=now - timedelta(seconds=60),
admin_last_emailed_at=now - timedelta(seconds=60),
)
settings = SimpleNamespace(
SUPPORT_ADMIN_NOTIFICATION_COOLDOWN_SECONDS=300,
SUPPORT_ADMIN_EMAIL_COOLDOWN_SECONDS=1800,
SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED=True,
)
decision = _support_admin_notification_decision(ticket, settings, now=now)
assert decision.send_telegram is False
assert decision.send_email is False
def test_support_admin_notification_decision_uses_separate_email_cooldown():
now = datetime(2026, 5, 20, tzinfo=timezone.utc)
ticket = SimpleNamespace(
unread_admin_count=4,
admin_last_notified_at=now - timedelta(seconds=301),
admin_last_emailed_at=now - timedelta(seconds=301),
)
settings = SimpleNamespace(
SUPPORT_ADMIN_NOTIFICATION_COOLDOWN_SECONDS=300,
SUPPORT_ADMIN_EMAIL_COOLDOWN_SECONDS=1800,
SUPPORT_ADMIN_EMAIL_NOTIFICATIONS_ENABLED=True,
)
decision = _support_admin_notification_decision(ticket, settings, now=now)
assert decision.send_telegram is True
assert decision.send_email is False