RemnaWave-bot Update

This commit is contained in:
2026-05-06 15:41:56 +03:00
parent ce7a1f70b2
commit 2cc2f12a21
22 changed files with 3087 additions and 129 deletions

View File

@@ -0,0 +1,104 @@
from app.services.support_ticket_service import (
ANSWERED_SUPPORT_TICKET_STATUS,
CLOSED_SUPPORT_TICKET_STATUS,
OPEN_SUPPORT_TICKET_STATUS,
SupportTicketService,
)
async def test_support_ticket_lifecycle(session_factory) -> None:
service = SupportTicketService(session_factory=session_factory)
ticket = await service.create_ticket(
public_id="ABCD1234",
telegram_id=1001,
username="tester",
display_name="Test User",
user_message="Need help",
support_chat_id=-1001234567890,
support_thread_id=12,
support_message_id=345,
)
assert ticket.status == OPEN_SUPPORT_TICKET_STATUS
assert await service.get_open_tickets_count() == 1
answered_ticket = await service.mark_answered(ticket_id=ticket.id)
assert answered_ticket is not None
assert answered_ticket.status == ANSWERED_SUPPORT_TICKET_STATUS
assert await service.get_open_tickets_count() == 1
noted_ticket = await service.append_note(
ticket_id=ticket.id,
note_text="First note",
status=OPEN_SUPPORT_TICKET_STATUS,
)
assert noted_ticket is not None
assert noted_ticket.support_note == "First note"
assert noted_ticket.status == OPEN_SUPPORT_TICKET_STATUS
appended_ticket = await service.append_note(ticket_id=ticket.id, note_text="Second note")
assert appended_ticket is not None
assert appended_ticket.support_note == "First note\n\nSecond note"
closed_ticket = await service.close_ticket(
ticket_id=ticket.id,
closed_by_telegram_id=9999,
)
assert closed_ticket is not None
assert closed_ticket.status == CLOSED_SUPPORT_TICKET_STATUS
assert closed_ticket.closed_by_telegram_id == 9999
assert closed_ticket.closed_at is not None
assert await service.get_open_tickets_count() == 0
still_closed_ticket = await service.mark_answered(ticket_id=ticket.id)
assert still_closed_ticket is not None
assert still_closed_ticket.status == CLOSED_SUPPORT_TICKET_STATUS
async def test_get_ticket_by_support_message_returns_ticket(session_factory) -> None:
service = SupportTicketService(session_factory=session_factory)
created_ticket = await service.create_ticket(
public_id="EFGH5678",
telegram_id=2002,
username=None,
display_name="Another User",
user_message="Another issue",
support_chat_id=-1009876543210,
support_thread_id=None,
support_message_id=777,
)
loaded_ticket = await service.get_ticket_by_support_message(
support_chat_id=-1009876543210,
support_message_id=777,
)
assert loaded_ticket is not None
assert loaded_ticket.id == created_ticket.id
assert loaded_ticket.public_id == "EFGH5678"
async def test_get_admin_tickets_page_returns_latest_first(session_factory) -> None:
service = SupportTicketService(session_factory=session_factory)
for index in range(3):
await service.create_ticket(
public_id=f"TICKET{index}",
telegram_id=3000 + index,
username=f"user{index}",
display_name=f"User {index}",
user_message=f"Message {index}",
support_chat_id=-100500,
support_thread_id=None,
support_message_id=900 + index,
)
first_page = await service.get_admin_tickets_page(page=1, page_size=2)
second_page = await service.get_admin_tickets_page(page=2, page_size=2)
assert first_page.total_items == 3
assert first_page.total_pages == 2
assert [item.public_id for item in first_page.items] == ["TICKET2", "TICKET1"]
assert [item.public_id for item in second_page.items] == ["TICKET0"]