diff options
author | 2023-12-11 16:33:16 +0100 | |
---|---|---|
committer | 2023-12-11 15:33:16 +0000 | |
commit | f64174645de751075a00380c292b2eea96c687c4 (patch) | |
tree | c0d5cc5db41b9bc9c3364dc40a7023cd9e31e508 /pydis_site/apps/api/tests | |
parent | Mention READMEs for app dirs in contributing guide (#1168) (diff) |
Implement editing of offensive message records (#1165)
Allow changing the deletion date of offensive message records in case
the bot encounters an error during deletion attempts.
Fixes #364.
Unblocks python-discord/bot#1013.
Diffstat (limited to 'pydis_site/apps/api/tests')
-rw-r--r-- | pydis_site/apps/api/tests/test_offensive_message.py | 68 |
1 files changed, 47 insertions, 21 deletions
diff --git a/pydis_site/apps/api/tests/test_offensive_message.py b/pydis_site/apps/api/tests/test_offensive_message.py index f45b5a66..d01231f1 100644 --- a/pydis_site/apps/api/tests/test_offensive_message.py +++ b/pydis_site/apps/api/tests/test_offensive_message.py @@ -6,6 +6,17 @@ from .base import AuthenticatedAPITestCase from pydis_site.apps.api.models import OffensiveMessage +def create_offensive_message() -> OffensiveMessage: + """Creates and returns an `OffensiveMessgage` record for tests.""" + delete_at = datetime.datetime.now(tz=datetime.UTC) + datetime.timedelta(days=1) + + return OffensiveMessage.objects.create( + id=602951077675139072, + channel_id=291284109232308226, + delete_date=delete_at, + ) + + class CreationTests(AuthenticatedAPITestCase): def test_accept_valid_data(self): url = reverse('api:bot:offensivemessage-list') @@ -111,13 +122,7 @@ class ListTests(AuthenticatedAPITestCase): class DeletionTests(AuthenticatedAPITestCase): @classmethod def setUpTestData(cls): - delete_at = datetime.datetime.now(tz=datetime.UTC) + datetime.timedelta(days=1) - - cls.valid_offensive_message = OffensiveMessage.objects.create( - id=602951077675139072, - channel_id=291284109232308226, - delete_date=delete_at.isoformat() - ) + cls.valid_offensive_message = create_offensive_message() def test_delete_data(self): url = reverse( @@ -132,24 +137,45 @@ class DeletionTests(AuthenticatedAPITestCase): ) -class NotAllowedMethodsTests(AuthenticatedAPITestCase): +class UpdateOffensiveMessageTestCase(AuthenticatedAPITestCase): @classmethod def setUpTestData(cls): - delete_at = datetime.datetime.now(tz=datetime.UTC) + datetime.timedelta(days=1) + cls.message = create_offensive_message() + cls.in_one_week = datetime.datetime.now(tz=datetime.UTC) + datetime.timedelta(days=7) - cls.valid_offensive_message = OffensiveMessage.objects.create( - id=602951077675139072, - channel_id=291284109232308226, - delete_date=delete_at.isoformat() + def test_updating_message(self): + url = reverse('api:bot:offensivemessage-detail', args=(self.message.id,)) + data = {'delete_date': self.in_one_week.isoformat()} + update_response = self.client.patch(url, data=data) + self.assertEqual(update_response.status_code, 200) + + self.message.refresh_from_db() + self.assertAlmostEqual( + self.message.delete_date, + self.in_one_week, + delta=datetime.timedelta(seconds=1), ) - def test_returns_405_for_patch_and_put_requests(self): - url = reverse( - 'api:bot:offensivemessage-detail', args=(self.valid_offensive_message.id,) + def test_updating_nonexistent_message(self): + url = reverse('api:bot:offensivemessage-detail', args=(self.message.id + 1,)) + data = {'delete_date': self.in_one_week} + + response = self.client.patch(url, data=data) + self.assertEqual(response.status_code, 404) + self.message.refresh_from_db() + self.assertNotAlmostEqual( + self.message.delete_date, + self.in_one_week, + delta=datetime.timedelta(seconds=1), ) - not_allowed_methods = (self.client.patch, self.client.put) - for method in not_allowed_methods: - with self.subTest(method=method): - response = method(url, {}) - self.assertEqual(response.status_code, 405) + +class NotAllowedMethodsTests(AuthenticatedAPITestCase): + @classmethod + def setUpTestData(cls): + cls.message = create_offensive_message() + + def test_returns_405_for_get(self): + url = reverse('api:bot:offensivemessage-detail', args=(self.message.id,)) + response = self.client.get(url) + self.assertEqual(response.status_code, 405) |