Files
django-helpdesk/tests/test_ticket_respond_layout.py
2026-09-26 13:08:29 -10:00

104 lines
3.8 KiB
Python

from django.contrib.auth import get_user_model
from django.test import TestCase
from django.urls import reverse
from helpdesk.forms import UserSettingsForm
from helpdesk.models import FollowUp, Queue, Ticket, UserSettings
User = get_user_model()
class TicketRespondLayoutTests(TestCase):
def setUp(self):
self.user = User.objects.create_user(
username="staff", password="pass", is_staff=True
)
self.queue = Queue.objects.create(title="Queue", slug="q")
self.ticket = Ticket.objects.create(
title="Printer on fire",
submitter_email="submitter@example.com",
queue=self.queue,
)
FollowUp.objects.create(
ticket=self.ticket, title="First followup", comment="Hello"
)
self.url = reverse("helpdesk:view", kwargs={"ticket_id": self.ticket.id})
self.client.force_login(self.user)
def set_layout(self, layout):
self.user.usersettings_helpdesk.ticket_respond_layout = layout
self.user.usersettings_helpdesk.save()
def get_page(self):
return self.client.get(self.url).content.decode()
def test_default_layout_is_tabs(self):
self.assertEqual(
self.user.usersettings_helpdesk.ticket_respond_layout,
UserSettings.RESPOND_LAYOUT_TABS,
)
page = self.get_page()
self.assertIn('id="respond-tab-pane"', page)
self.assertIn('id="followup-tab-pane"', page)
self.assertNotIn('id="respond-card"', page)
def test_bottom_layout_places_respond_after_followups(self):
self.set_layout(UserSettings.RESPOND_LAYOUT_BOTTOM)
page = self.get_page()
self.assertNotIn('id="ticketTab"', page)
self.assertLess(
page.index('id="followup-list"'), page.index('id="respond-card"')
)
def test_top_layout_places_respond_before_followups(self):
self.set_layout(UserSettings.RESPOND_LAYOUT_TOP)
page = self.get_page()
self.assertNotIn('id="ticketTab"', page)
self.assertLess(
page.index('id="respond-card"'), page.index('id="followup-list"')
)
def test_respond_form_shown_without_followups(self):
FollowUp.objects.all().delete()
for layout in (
UserSettings.RESPOND_LAYOUT_BOTTOM,
UserSettings.RESPOND_LAYOUT_TOP,
):
with self.subTest(layout=layout):
self.set_layout(layout)
page = self.get_page()
self.assertIn('id="respond-card"', page)
self.assertNotIn('id="followup-card"', page)
def test_missing_user_settings_falls_back_to_tabs(self):
UserSettings.objects.filter(user=self.user).delete()
page = self.get_page()
self.assertIn('id="respond-tab-pane"', page)
def test_unknown_layout_falls_back_to_tabs(self):
"""if a typo in setting ticket_respond_layout fallback to tabs"""
self.set_layout("TYPO")
page = self.get_page()
self.assertIn('id="respond-tab-pane"', page)
self.assertIn('id="followup-tab-pane"', page)
def test_user_settings_form_saves_layout(self):
settings = self.user.usersettings_helpdesk
form = UserSettingsForm(
{
"login_view_ticketlist": True,
"email_on_ticket_change": True,
"email_on_ticket_assign": True,
"tickets_per_page": 25,
"use_email_as_submitter": True,
"ticket_respond_layout": UserSettings.RESPOND_LAYOUT_TOP,
},
instance=settings,
)
self.assertTrue(form.is_valid(), form.errors)
form.save()
settings.refresh_from_db()
self.assertEqual(
settings.ticket_respond_layout, UserSettings.RESPOND_LAYOUT_TOP
)