from django.test import TestCase from django.test.client import Client from django.urls import reverse from helpdesk.models import Queue, Ticket class PublicActionsTestCase(TestCase): """ Tests for public actions: - View a ticket - Add a followup - Close resolved case """ def setUp(self): """ Create a queue & ticket we can use for later tests. """ self.queue = Queue.objects.create( title="Queue 1", slug="q", allow_public_submission=True, new_ticket_cc="new.public@example.com", updated_ticket_cc="update.public@example.com", ) self.ticket = Ticket.objects.create( title="Test Ticket", queue=self.queue, submitter_email="test.submitter@example.com", description="This is a test ticket.", ) self.client = Client() def test_public_view_ticket(self): # Without key, we get 403 response = self.client.get( "%s?ticket=%s&email=%s" % ( reverse("helpdesk:public_view"), self.ticket.ticket_for_url, "test.submitter@example.com", ) ) self.assertEqual(response.status_code, 403) self.assertTemplateNotUsed(response, "helpdesk/public_view_form.html") # With a key it works response = self.client.get( "%s?ticket=%s&email=%s&key=%s" % ( reverse("helpdesk:public_view"), self.ticket.ticket_for_url, "test.submitter@example.com", self.ticket.secret_key, ) ) self.assertEqual(response.status_code, 200) self.assertTemplateUsed(response, "helpdesk/public_view_ticket.html") def test_public_close(self): old_status = self.ticket.status old_resolution = self.ticket.resolution resolution_text = "Resolved by test script" ticket = Ticket.objects.get(id=self.ticket.id) ticket.status = Ticket.RESOLVED_STATUS ticket.resolution = resolution_text ticket.save() current_followups = ticket.followup_set.all().count() response = self.client.get( "%s?ticket=%s&email=%s&close&key=%s" % ( reverse("helpdesk:public_view"), ticket.ticket_for_url, "test.submitter@example.com", ticket.secret_key, ) ) ticket = Ticket.objects.get(id=self.ticket.id) self.assertEqual(response.status_code, 302) self.assertTemplateNotUsed(response, "helpdesk/public_view_form.html") self.assertEqual(ticket.status, Ticket.CLOSED_STATUS) self.assertEqual(ticket.resolution, resolution_text) self.assertEqual(current_followups + 1, ticket.followup_set.all().count()) ticket.resolution = old_resolution ticket.status = old_status ticket.save()