RemnaWave-bot Update
This commit is contained in:
104
tests/test_support_ticket_service.py
Normal file
104
tests/test_support_ticket_service.py
Normal 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"]
|
||||
Reference in New Issue
Block a user