From 45dfba505e04eec968a3be701e868753b8e4a849 Mon Sep 17 00:00:00 2001 From: bast Date: Sun, 30 May 2021 16:00:24 -0700 Subject: Fix bot/infractions after and before filter check being inverted The check was backwards, enforcing that no results must ever be returned Relevant tests have been added that actually fetch an infraction with the right times so that I'm sure it's not still broken --- pydis_site/apps/api/tests/test_infractions.py | 19 ++++++++++++++++--- pydis_site/apps/api/viewsets/bot/infraction.py | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/pydis_site/apps/api/tests/test_infractions.py b/pydis_site/apps/api/tests/test_infractions.py index f2641492..d717ab48 100644 --- a/pydis_site/apps/api/tests/test_infractions.py +++ b/pydis_site/apps/api/tests/test_infractions.py @@ -177,15 +177,28 @@ class InfractionTests(APISubdomainTestCase): self.assertEqual(response.status_code, 400) self.assertEqual(list(response.json())[0], "expires_before") - def test_after_before_before_invalid(self): + def test_after_before_before(self): url = reverse('bot:infraction-list', host='api') - target_time = datetime.datetime.utcnow() + datetime.timedelta(hours=5) - target_time_late = datetime.datetime.utcnow() + datetime.timedelta(hours=9) + target_time = datetime.datetime.utcnow() + datetime.timedelta(hours=4) + target_time_late = datetime.datetime.utcnow() + datetime.timedelta(hours=6) response = self.client.get( f'{url}?expires_before={target_time_late.isoformat()}' f'&expires_after={target_time.isoformat()}' ) + self.assertEqual(response.status_code, 200) + self.assertEqual(len(response.json()), 1) + self.assertEqual(response.json()[0]["id"], self.superstar_expires_soon.id) + + def test_after_after_before_invalid(self): + url = reverse('bot:infraction-list', host='api') + target_time = datetime.datetime.utcnow() + datetime.timedelta(hours=5) + target_time_late = datetime.datetime.utcnow() + datetime.timedelta(hours=9) + response = self.client.get( + f'{url}?expires_before={target_time.isoformat()}' + f'&expires_after={target_time_late.isoformat()}' + ) + self.assertEqual(response.status_code, 400) errors = list(response.json()) self.assertIn("expires_before", errors) diff --git a/pydis_site/apps/api/viewsets/bot/infraction.py b/pydis_site/apps/api/viewsets/bot/infraction.py index 00dd05b8..0baab6fd 100644 --- a/pydis_site/apps/api/viewsets/bot/infraction.py +++ b/pydis_site/apps/api/viewsets/bot/infraction.py @@ -195,7 +195,7 @@ class InfractionViewSet( raise ValidationError({'expires_before': ['failed to convert to datetime']}) if 'expires_at__lte' in additional_filters and 'expires_at__gte' in additional_filters: - if additional_filters['expires_at__gte'] < additional_filters['expires_at__lte']: + if additional_filters['expires_at__gte'] > additional_filters['expires_at__lte']: raise ValidationError({ 'expires_before': ['cannot be after expires_after'], 'expires_after': ['cannot be before expires_before'], -- cgit v1.2.3