django-helpdesk/helpdesk/tests/test_public_actions.py
2025-03-22 15:29:19 -10:00

94 lines
3.0 KiB
Python

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()