from django.urls import reverse from rest_framework.test import APITestCase, APIClient from rest_framework import status from django.contrib.auth import get_user_model from django.utils import timezone from helpdesk.models import Ticket UserModel = get_user_model() class TicketViewSetFunctionalTest(APITestCase): def setUp(self): # สร้าง Agent User self.agent = UserModel.objects.create_user( username="agent1", email="agent1@example.com", password="password123", is_staff=True ) # สร้าง Customer User self.customer = UserModel.objects.create_user( username="customer1", email="customer1@example.com", password="password123", is_staff=False ) # Client สำหรับ Agent self.client_agent = APIClient() self.client_agent.force_authenticate(user=self.agent) # Client สำหรับ Customer self.client_customer = APIClient() self.client_customer.force_authenticate(user=self.customer) # สร้าง Ticket ตัวอย่าง self.ticket = Ticket.objects.create( creator=self.customer, title="Functional Test Ticket", last_message_at=timezone.now() ) def test_ticket_list_authenticated(self): """GET /tickets/ ต้อง return 200 สำหรับผู้ใช้ล็อกอิน""" url = reverse('helpdesk-tickets-list') # ต้องตรงกับ router name response = self.client_agent.get(url) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertTrue(isinstance(response.data, list)) def test_ticket_list_unauthenticated(self): """GET /tickets/ ต้อง return 401 สำหรับผู้ใช้ไม่ล็อกอิน""" client = APIClient() # client ไม่ล็อกอิน url = reverse('helpdesk-tickets-list') response = client.get(url) self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED)