From fe9795d147bc8585c043e9e73ccd148883979bf9 Mon Sep 17 00:00:00 2001 From: jedi Date: Thu, 28 Dec 2023 21:20:49 +0100 Subject: [PATCH] add migrations for state change --- core/mail/tests/v2/test_mails.py | 34 ++++++++-------- .../0003_alter_issuethread_state.py | 39 +++++++++++++++++++ core/tickets/tests/v2/test_tickets.py | 6 +-- 3 files changed, 59 insertions(+), 20 deletions(-) create mode 100644 core/tickets/migrations/0003_alter_issuethread_state.py diff --git a/core/mail/tests/v2/test_mails.py b/core/mail/tests/v2/test_mails.py index 8f1ba41..927ba28 100644 --- a/core/mail/tests/v2/test_mails.py +++ b/core/mail/tests/v2/test_mails.py @@ -86,24 +86,24 @@ class LMTPHandlerTestCase(TestCase): # TODO replace with less hacky test self.assertEqual(len(Email.objects.all()), 2) self.assertEqual(len(IssueThread.objects.all()), 1) aiosmtplib.send.assert_called_once() - self.assertEqual(Email.objects.all()[0].subject, 'test') - self.assertEqual(Email.objects.all()[0].sender, 'test1@test') - self.assertEqual(Email.objects.all()[0].recipient, 'test2@test') - self.assertEqual(Email.objects.all()[0].body, 'test') - self.assertEqual(Email.objects.all()[0].issue_thread, IssueThread.objects.all()[0]) - self.assertEqual(Email.objects.all()[0].reference, '<1@test>') - self.assertEqual(Email.objects.all()[0].in_reply_to, None) - self.assertEqual(Email.objects.all()[1].subject, 'Message received') - self.assertEqual(Email.objects.all()[1].sender, 'test2@test') - self.assertEqual(Email.objects.all()[1].recipient, 'test1@test') - self.assertEqual(Email.objects.all()[1].body, 'Thank you for your message.') - self.assertEqual(Email.objects.all()[1].issue_thread, IssueThread.objects.all()[0]) + self.assertEqual('test', Email.objects.all()[0].subject) + self.assertEqual('test1@test', Email.objects.all()[0].sender) + self.assertEqual('test2@test', Email.objects.all()[0].recipient) + self.assertEqual('test', Email.objects.all()[0].body) + self.assertEqual(IssueThread.objects.all()[0], Email.objects.all()[0].issue_thread) + self.assertEqual('<1@test>', Email.objects.all()[0].reference) + self.assertEqual(None, Email.objects.all()[0].in_reply_to) + self.assertEqual('Message received', Email.objects.all()[1].subject) + self.assertEqual('test2@test', Email.objects.all()[1].sender) + self.assertEqual('test1@test', Email.objects.all()[1].recipient) + self.assertEqual('Thank you for your message.', Email.objects.all()[1].body) + self.assertEqual(IssueThread.objects.all()[0], Email.objects.all()[1].issue_thread) self.assertTrue(Email.objects.all()[1].reference.startswith("<")) self.assertTrue(Email.objects.all()[1].reference.endswith("@localhost>")) - self.assertEqual(Email.objects.all()[1].in_reply_to, "<1@test>") - self.assertEqual(IssueThread.objects.all()[0].name, 'test') - self.assertEqual(IssueThread.objects.all()[0].state, 'new') - self.assertEqual(IssueThread.objects.all()[0].assigned_to, None) + self.assertEqual("<1@test>", Email.objects.all()[1].in_reply_to) + self.assertEqual('test', IssueThread.objects.all()[0].name) + self.assertEqual('pending_new', IssueThread.objects.all()[0].state) + self.assertEqual(None, IssueThread.objects.all()[0].assigned_to) def test_handle_client_reply(self): issue_thread = IssueThread.objects.create( @@ -149,7 +149,7 @@ class LMTPHandlerTestCase(TestCase): # TODO replace with less hacky test 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, 'new') + self.assertEqual(IssueThread.objects.all()[0].state, 'pending_new') self.assertEqual(IssueThread.objects.all()[0].assigned_to, None) def test_mail_reply(self): diff --git a/core/tickets/migrations/0003_alter_issuethread_state.py b/core/tickets/migrations/0003_alter_issuethread_state.py new file mode 100644 index 0000000..dd2c9bc --- /dev/null +++ b/core/tickets/migrations/0003_alter_issuethread_state.py @@ -0,0 +1,39 @@ +# Generated by Django 4.2.7 on 2023-12-28 20:15 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ('tickets', '0002_alter_issuethread_options_and_more'), + ] + + def convert_state(apps, schema_editor): + IssueThread = apps.get_model('tickets', 'IssueThread') + for issue in IssueThread.objects.all(): + if issue.state == 'new': + issue.state = 'pending_new' + issue.save() + StateChange = apps.get_model('tickets', 'StateChange') + for change in StateChange.objects.all(): + if change.state == 'new': + change.state = 'pending_new' + change.save() + + operations = [ + migrations.AlterField( + model_name='issuethread', + name='state', + field=models.CharField( + choices=[('pending_new', 'New'), ('pending_open', 'Open'), ('pending_shipping', 'Needs to be shipped'), + ('pending_physical_confirmation', 'Needs to be confirmed physically'), + ('pending_return', 'Needs to be returned'), ('waiting_details', 'Waiting for details'), + ('waiting_pre_shipping', 'Waiting for Address/Shipping Info'), + ('closed_returned', 'Closed: Returned'), ('closed_shipped', 'Closed: Shipped'), + ('closed_not_found', 'Closed: Not found'), + ('closed_not_our_problem', 'Closed: Not our problem'), + ('closed_duplicate', 'Closed: Duplicate'), ('closed_timeout', 'Closed: Timeout'), + ('closed_spam', 'Closed: Spam')], default='pending_new', max_length=32, verbose_name='state'), + ), + migrations.RunPython(convert_state), + ] diff --git a/core/tickets/tests/v2/test_tickets.py b/core/tickets/tests/v2/test_tickets.py index 1f1858d..557550f 100644 --- a/core/tickets/tests/v2/test_tickets.py +++ b/core/tickets/tests/v2/test_tickets.py @@ -39,7 +39,7 @@ class IssueApiTest(TestCase): ) state = StateChange.objects.create( issue_thread=issue, - state="new", + state="pending_new", timestamp=now + timedelta(seconds=1), ) mail2 = Email.objects.create( @@ -62,7 +62,7 @@ class IssueApiTest(TestCase): self.assertEqual(len(response.json()), 1) self.assertEqual(response.json()[0]['id'], issue.id) self.assertEqual(response.json()[0]['name'], "test issue") - self.assertEqual(response.json()[0]['state'], "new") + self.assertEqual(response.json()[0]['state'], "pending_new") self.assertEqual(response.json()[0]['assigned_to'], None) self.assertEqual(response.json()[0]['last_activity'], issue.last_activity.strftime('%Y-%m-%dT%H:%M:%S.%fZ')) self.assertEqual(len(response.json()[0]['timeline']), 4) @@ -80,7 +80,7 @@ class IssueApiTest(TestCase): self.assertEqual(response.json()[0]['timeline'][0]['body'], 'test') self.assertEqual(response.json()[0]['timeline'][0]['timestamp'], mail1.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ')) - self.assertEqual(response.json()[0]['timeline'][1]['state'], 'new') + self.assertEqual(response.json()[0]['timeline'][1]['state'], 'pending_new') self.assertEqual(response.json()[0]['timeline'][1]['timestamp'], state.timestamp.strftime('%Y-%m-%dT%H:%M:%S.%fZ')) self.assertEqual(response.json()[0]['timeline'][2]['sender'], 'test')