forked from extern/django-helpdesk
Add test for the add_email_to_ticketcc_if_not_in ticket function
This commit is contained in:
parent
391cc000b8
commit
177ba8f963
@ -813,6 +813,7 @@ class Ticket(models.Model):
|
|||||||
:param str email:
|
:param str email:
|
||||||
:param User user:
|
:param User user:
|
||||||
:param TicketCC ticketcc:
|
:param TicketCC ticketcc:
|
||||||
|
:rtype: TicketCC|None
|
||||||
"""
|
"""
|
||||||
if ticketcc:
|
if ticketcc:
|
||||||
email = ticketcc.display
|
email = ticketcc.display
|
||||||
@ -820,23 +821,28 @@ class Ticket(models.Model):
|
|||||||
if user.email:
|
if user.email:
|
||||||
email = user.email
|
email = user.email
|
||||||
else:
|
else:
|
||||||
|
# Ignore if user has no email address
|
||||||
return
|
return
|
||||||
elif not email:
|
elif not email:
|
||||||
return
|
raise ValueError('You must provide at least one parameter to get the email from')
|
||||||
|
|
||||||
|
# Prepare all emails already into the ticket
|
||||||
|
ticket_emails = [x.display for x in self.ticketcc_set.all()]
|
||||||
|
if self.submitter_email:
|
||||||
|
ticket_emails.append(self.submitter_email)
|
||||||
|
if self.assigned_to and self.assigned_to.email:
|
||||||
|
ticket_emails.append(self.assigned_to.email)
|
||||||
|
|
||||||
# Check that email is not already part of the ticket
|
# Check that email is not already part of the ticket
|
||||||
if (
|
if email not in ticket_emails:
|
||||||
email != self.submitter_email and
|
|
||||||
(self.assigned_to and email != self.assigned_to.email) and
|
|
||||||
email not in [x.display for x in self.ticketcc_set.all()]
|
|
||||||
):
|
|
||||||
if ticketcc:
|
if ticketcc:
|
||||||
ticketcc.ticket = self
|
ticketcc.ticket = self
|
||||||
ticketcc.save(update_fields=['ticket'])
|
ticketcc.save(update_fields=['ticket'])
|
||||||
elif user:
|
elif user:
|
||||||
self.ticketcc_set.create(user=user)
|
ticketcc = self.ticketcc_set.create(user=user)
|
||||||
else:
|
else:
|
||||||
self.ticketcc_set.create(email=email)
|
ticketcc = self.ticketcc_set.create(email=email)
|
||||||
|
return ticketcc
|
||||||
|
|
||||||
|
|
||||||
class FollowUpManager(models.Manager):
|
class FollowUpManager(models.Manager):
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.test import TestCase
|
from django.test import TestCase
|
||||||
from helpdesk.models import Ticket, Queue
|
from helpdesk.models import Ticket, Queue
|
||||||
from django.test.utils import override_settings
|
from django.test.utils import override_settings
|
||||||
|
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
@override_settings(
|
@override_settings(
|
||||||
HELPDESK_VIEW_A_TICKET_PUBLIC=True
|
HELPDESK_VIEW_A_TICKET_PUBLIC=True
|
||||||
)
|
)
|
||||||
@ -50,3 +54,42 @@ class TestTicketLookupPublicEnabled(TestCase):
|
|||||||
# confirm that we can still get to a url which was emailed earlier
|
# confirm that we can still get to a url which was emailed earlier
|
||||||
response = self.client.get(url, params)
|
response = self.client.get(url, params)
|
||||||
self.assertNotContains(response, "Invalid ticket ID")
|
self.assertNotContains(response, "Invalid ticket ID")
|
||||||
|
|
||||||
|
def test_add_email_to_ticketcc_if_not_in(self):
|
||||||
|
staff_email = 'staff@mail.com'
|
||||||
|
staff_user = User.objects.create(username='staff', email=staff_email, is_staff=True)
|
||||||
|
self.ticket.assigned_to = staff_user
|
||||||
|
self.ticket.save()
|
||||||
|
email_1 = 'user1@mail.com'
|
||||||
|
ticketcc_1 = self.ticket.ticketcc_set.create(email=email_1)
|
||||||
|
|
||||||
|
# Add new email to CC
|
||||||
|
email_2 = 'user2@mail.com'
|
||||||
|
ticketcc_2 = self.ticket.add_email_to_ticketcc_if_not_in(email=email_2)
|
||||||
|
self.assertEqual(list(self.ticket.ticketcc_set.all()), [ticketcc_1, ticketcc_2])
|
||||||
|
|
||||||
|
# Add existing email, doesn't change anything
|
||||||
|
self.ticket.add_email_to_ticketcc_if_not_in(email=email_1)
|
||||||
|
self.assertEqual(list(self.ticket.ticketcc_set.all()), [ticketcc_1, ticketcc_2])
|
||||||
|
|
||||||
|
# Add mail from assigned user, doesn't change anything
|
||||||
|
self.ticket.add_email_to_ticketcc_if_not_in(email=staff_email)
|
||||||
|
self.assertEqual(list(self.ticket.ticketcc_set.all()), [ticketcc_1, ticketcc_2])
|
||||||
|
self.ticket.add_email_to_ticketcc_if_not_in(user=staff_user)
|
||||||
|
self.assertEqual(list(self.ticket.ticketcc_set.all()), [ticketcc_1, ticketcc_2])
|
||||||
|
|
||||||
|
# Move a ticketCC from ticket 1 to ticket 2
|
||||||
|
ticket_2 = Ticket.objects.create(queue=self.ticket.queue, title='Ticket 2', submitter_email=email_2)
|
||||||
|
self.assertEqual(ticket_2.ticketcc_set.count(), 0)
|
||||||
|
ticket_2.add_email_to_ticketcc_if_not_in(ticketcc=ticketcc_1)
|
||||||
|
self.assertEqual(ticketcc_1.ticket, ticket_2)
|
||||||
|
self.assertEqual(ticket_2.ticketcc_set.count(), 1)
|
||||||
|
|
||||||
|
# Adding email_2 doesn't change since it is already submitter email
|
||||||
|
ticket_2.add_email_to_ticketcc_if_not_in(email=email_2)
|
||||||
|
self.assertEqual(ticket_2.ticketcc_set.get(), ticketcc_1)
|
||||||
|
ticket_2.add_email_to_ticketcc_if_not_in(ticketcc=ticketcc_2)
|
||||||
|
self.assertEqual(ticket_2.ticketcc_set.get(), ticketcc_1)
|
||||||
|
|
||||||
|
# Finally test function raises a Value error when no parameter is given
|
||||||
|
self.assertRaises(ValueError, ticket_2.add_email_to_ticketcc_if_not_in)
|
||||||
|
Loading…
Reference in New Issue
Block a user