help-desk/backend/helpdesk/tests/test_services.py
2025-12-01 05:43:37 +07:00

60 lines
1.9 KiB
Python

from django.test import TestCase
from unittest.mock import MagicMock
from django.utils import timezone
from helpdesk.services.ticket_service import TicketService
from helpdesk.models import TicketStatus, Ticket
from django.contrib.auth import get_user_model
UserModel = get_user_model()
class TicketServiceStatusTest(TestCase):
def setUp(self):
self.mock_repo = MagicMock()
self.service = TicketService(ticket_repo=self.mock_repo)
# Mock Ticket Object
self.mock_ticket = Ticket(
id=1,
title="Test Ticket",
status=TicketStatus.OPEN,
last_message_at=timezone.now(),
last_message_content="Initial message",
is_read=True,
)
self.mock_repo.get_ticket_by_id.return_value = self.mock_ticket
def test_allow_status_change_from_open_to_inprogress(self):
new_status = TicketStatus.IN_PROGRESS
# Mock update_ticket return value
updated_ticket = Ticket(
id=1,
title="Test Ticket",
status=new_status,
last_message_at=timezone.now(),
last_message_content="Initial message",
is_read=True,
)
self.mock_repo.update_ticket.return_value = updated_ticket
# ACT
result = self.service.update_ticket_status(1, new_status)
# ASSERT
self.assertEqual(result.status, new_status)
self.mock_repo.update_ticket.assert_called_once()
def test_prevent_status_change_from_closed_to_open(self):
self.mock_ticket.status = TicketStatus.CLOSED
with self.assertRaises(ValueError) as ctx:
self.service.update_ticket_status(
ticket_id=1,
new_status=TicketStatus.OPEN
)
self.assertIn("Cannot transition from CLOSED to OPEN", str(ctx.exception))
self.mock_repo.update_ticket.assert_not_called()