67 lines
2.3 KiB
Python
67 lines
2.3 KiB
Python
from django.test import TestCase
|
|
from django.contrib.auth import get_user_model
|
|
from unittest.mock import patch
|
|
|
|
from helpdesk.models import Ticket
|
|
from helpdesk.services.ticket_service import TicketService
|
|
from helpdesk.repositories.ticket_repository import TicketRepository
|
|
from unittest import skip
|
|
|
|
UserModel = get_user_model()
|
|
|
|
class AssignmentNotificationIntegrationTest(TestCase):
|
|
|
|
def setUp(self):
|
|
# 1. Setup Users (Agents)
|
|
self.agent_1 = UserModel.objects.create_user(
|
|
username='agent_one',
|
|
email='agent1@test.com',
|
|
password='p',
|
|
is_staff=True
|
|
)
|
|
self.agent_2 = UserModel.objects.create_user(
|
|
username='agent_two',
|
|
email='agent2@test.com',
|
|
password='p',
|
|
is_staff=True
|
|
)
|
|
|
|
# 2. Setup Ticket
|
|
self.ticket = Ticket.objects.create(
|
|
creator=self.agent_1,
|
|
title="Ticket for Assignment Test"
|
|
)
|
|
|
|
# 3. Setup Repository
|
|
self.repo = TicketRepository()
|
|
|
|
@patch("helpdesk.services.ticket_service.NotificationService") # mock class
|
|
def test_assignment_triggers_notification_call(self, MockNotificationService):
|
|
"""
|
|
Integration Test: ตรวจสอบว่า assign_ticket_to_user() เรียก
|
|
NotificationService.send_assignment_notification()
|
|
"""
|
|
# Mock instance ของ NotificationService
|
|
mock_notification_instance = MockNotificationService.return_value
|
|
|
|
# Inject mock instance เข้าไปใน TicketService
|
|
ticket_service = TicketService(
|
|
ticket_repo=self.repo,
|
|
notification_service=mock_notification_instance
|
|
)
|
|
|
|
# ACT: มอบหมาย ticket
|
|
updated_ticket = ticket_service.assign_ticket_to_user(
|
|
ticket_id=self.ticket.id,
|
|
assignee_id=self.agent_2.id
|
|
)
|
|
|
|
# ASSERT 1: ตรวจสอบว่า Ticket ถูกมอบหมาย
|
|
self.assertEqual(updated_ticket.assigned_to, self.agent_2)
|
|
|
|
# ASSERT 2: ตรวจสอบว่า NotificationService ถูกเรียก
|
|
mock_notification_instance.send_assignment_notification.assert_called_once_with(
|
|
ticket_id=self.ticket.id,
|
|
user_id=self.agent_2.id
|
|
)
|