set state to 'open' when receiving reply on a ticket that is not in state 'new'
This commit is contained in:
parent
734af10525
commit
9aeb6a319f
2 changed files with 58 additions and 0 deletions
|
@ -180,12 +180,18 @@ def receive_email(envelope, log=None):
|
||||||
|
|
||||||
reply = None
|
reply = None
|
||||||
if new:
|
if new:
|
||||||
|
# auto reply if new issue
|
||||||
references = collect_references(active_issue_thread)
|
references = collect_references(active_issue_thread)
|
||||||
|
|
||||||
reply_email = Email.objects.create(
|
reply_email = Email.objects.create(
|
||||||
sender=recipient, recipient=sender, body="Thank you for your message.", subject="Message received",
|
sender=recipient, recipient=sender, body="Thank you for your message.", subject="Message received",
|
||||||
in_reply_to=header_message_id, event=target_event, issue_thread=active_issue_thread)
|
in_reply_to=header_message_id, event=target_event, issue_thread=active_issue_thread)
|
||||||
reply = make_reply(reply_email, references)
|
reply = make_reply(reply_email, references)
|
||||||
|
else:
|
||||||
|
#change state if not new
|
||||||
|
if active_issue_thread.state != 'pending_new':
|
||||||
|
active_issue_thread.state = 'pending_open'
|
||||||
|
active_issue_thread.save()
|
||||||
|
|
||||||
return email, new, reply
|
return email, new, reply
|
||||||
|
|
||||||
|
|
|
@ -215,6 +215,58 @@ class LMTPHandlerTestCase(TestCase): # TODO replace with less hacky test
|
||||||
self.assertEqual(IssueThread.objects.all()[0].state, 'pending_new')
|
self.assertEqual(IssueThread.objects.all()[0].state, 'pending_new')
|
||||||
self.assertEqual(IssueThread.objects.all()[0].assigned_to, None)
|
self.assertEqual(IssueThread.objects.all()[0].assigned_to, None)
|
||||||
|
|
||||||
|
def test_handle_client_reply_2(self):
|
||||||
|
issue_thread = IssueThread.objects.create(
|
||||||
|
name="test",
|
||||||
|
)
|
||||||
|
mail1 = Email.objects.create(
|
||||||
|
subject='test subject',
|
||||||
|
body='test',
|
||||||
|
sender='test1@test',
|
||||||
|
recipient='test2@test',
|
||||||
|
issue_thread=issue_thread,
|
||||||
|
)
|
||||||
|
mail1_reply = Email.objects.create(
|
||||||
|
subject='Message received',
|
||||||
|
body='Thank you for your message.',
|
||||||
|
sender='test2@test',
|
||||||
|
recipient='test1@test',
|
||||||
|
in_reply_to=mail1.reference,
|
||||||
|
issue_thread=issue_thread,
|
||||||
|
)
|
||||||
|
StateChange.objects.create(
|
||||||
|
issue_thread=issue_thread,
|
||||||
|
state='waiting_details',
|
||||||
|
)
|
||||||
|
self.assertEqual(IssueThread.objects.all()[0].state, 'waiting_details')
|
||||||
|
from aiosmtpd.smtp import Envelope
|
||||||
|
from asgiref.sync import async_to_sync
|
||||||
|
import aiosmtplib
|
||||||
|
aiosmtplib.send = make_mocked_coro()
|
||||||
|
handler = LMTPHandler()
|
||||||
|
server = mock.Mock()
|
||||||
|
session = mock.Mock()
|
||||||
|
envelope = Envelope()
|
||||||
|
envelope.mail_from = 'test1@test'
|
||||||
|
envelope.rcpt_tos = ['test2@test']
|
||||||
|
envelope.content = (f'Subject: Re: test\nFrom: test3@test\nTo: test4@test\nMessage-ID: <3@test>\n'
|
||||||
|
f'In-Reply-To: {mail1_reply.reference}'.encode('utf-8') + b'\n\ntest')
|
||||||
|
result = async_to_sync(handler.handle_DATA)(server, session, envelope)
|
||||||
|
self.assertEqual(result, '250 Message accepted for delivery')
|
||||||
|
self.assertEqual(len(Email.objects.all()), 3)
|
||||||
|
self.assertEqual(len(IssueThread.objects.all()), 1)
|
||||||
|
aiosmtplib.send.assert_not_called()
|
||||||
|
self.assertEqual(Email.objects.all()[2].subject, 'Re: test')
|
||||||
|
self.assertEqual(Email.objects.all()[2].sender, 'test1@test')
|
||||||
|
self.assertEqual(Email.objects.all()[2].recipient, 'test2@test')
|
||||||
|
self.assertEqual(Email.objects.all()[2].body, 'test')
|
||||||
|
self.assertEqual(Email.objects.all()[2].issue_thread, issue_thread)
|
||||||
|
self.assertEqual(Email.objects.all()[2].reference, '<3@test>')
|
||||||
|
self.assertEqual(Email.objects.all()[2].in_reply_to, mail1_reply.reference)
|
||||||
|
self.assertEqual(IssueThread.objects.all()[0].name, 'test')
|
||||||
|
self.assertEqual(IssueThread.objects.all()[0].state, 'pending_open')
|
||||||
|
self.assertEqual(IssueThread.objects.all()[0].assigned_to, None)
|
||||||
|
|
||||||
def test_mail_reply(self):
|
def test_mail_reply(self):
|
||||||
issue_thread = IssueThread.objects.create(
|
issue_thread = IssueThread.objects.create(
|
||||||
name="test",
|
name="test",
|
||||||
|
|
Loading…
Reference in a new issue