aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/api/migrations/0043_infraction_hidden_warnings_to_notes.py23
-rw-r--r--pydis_site/apps/api/serializers.py5
-rw-r--r--pydis_site/apps/api/tests/test_infractions.py48
3 files changed, 61 insertions, 15 deletions
diff --git a/pydis_site/apps/api/migrations/0043_infraction_hidden_warnings_to_notes.py b/pydis_site/apps/api/migrations/0043_infraction_hidden_warnings_to_notes.py
new file mode 100644
index 00000000..7c751f5d
--- /dev/null
+++ b/pydis_site/apps/api/migrations/0043_infraction_hidden_warnings_to_notes.py
@@ -0,0 +1,23 @@
+# Generated by Django 2.2.5 on 2019-09-25 08:41
+
+from django.db import migrations
+
+
+def migrate_hidden_warnings_to_notes(apps, schema_editor):
+ """Migrates hidden warnings to note."""
+ Infraction = apps.get_model('api', 'Infraction')
+
+ for infraction in Infraction.objects.filter(type="warning", hidden=True):
+ infraction.type = "note"
+ infraction.save()
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('api', '0042_infraction_add_default_ordering'),
+ ]
+
+ operations = [
+ migrations.RunPython(migrate_hidden_warnings_to_notes),
+ ]
diff --git a/pydis_site/apps/api/serializers.py b/pydis_site/apps/api/serializers.py
index 5466b06b..326e20e1 100644
--- a/pydis_site/apps/api/serializers.py
+++ b/pydis_site/apps/api/serializers.py
@@ -115,9 +115,12 @@ class InfractionSerializer(ModelSerializer):
raise ValidationError({'expires_at': [f'{infr_type} infractions cannot expire.']})
hidden = attrs.get('hidden')
- if hidden and infr_type in ('superstar',):
+ if hidden and infr_type in ('superstar', 'warning'):
raise ValidationError({'hidden': [f'{infr_type} infractions cannot be hidden.']})
+ if not hidden and infr_type in ('note', ):
+ raise ValidationError({'hidden': [f'{infr_type} infractions must be hidden.']})
+
return attrs
diff --git a/pydis_site/apps/api/tests/test_infractions.py b/pydis_site/apps/api/tests/test_infractions.py
index 0092d355..c58c32e2 100644
--- a/pydis_site/apps/api/tests/test_infractions.py
+++ b/pydis_site/apps/api/tests/test_infractions.py
@@ -257,32 +257,52 @@ class CreationTests(APISubdomainTestCase):
def test_returns_400_for_expiring_non_expirable_type(self):
url = reverse('bot:infraction-list', host='api')
- data = {
- 'user': self.user.id,
- 'actor': self.user.id,
- 'type': 'kick',
- 'expires_at': '5018-11-20T15:52:00+00:00'
- }
- response = self.client.post(url, data=data)
- self.assertEqual(response.status_code, 400)
- self.assertEqual(response.json(), {
- 'expires_at': [f'{data["type"]} infractions cannot expire.']
- })
+ for infraction_type in ('kick', 'warning'):
+ data = {
+ 'user': self.user.id,
+ 'actor': self.user.id,
+ 'type': infraction_type,
+ 'expires_at': '5018-11-20T15:52:00+00:00'
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'expires_at': [f'{data["type"]} infractions cannot expire.']
+ })
def test_returns_400_for_hidden_non_hideable_type(self):
url = reverse('bot:infraction-list', host='api')
+
+ for infraction_type in ('superstar', 'warning'):
+ data = {
+ 'user': self.user.id,
+ 'actor': self.user.id,
+ 'type': infraction_type,
+ 'hidden': True
+ }
+
+ response = self.client.post(url, data=data)
+ self.assertEqual(response.status_code, 400)
+ self.assertEqual(response.json(), {
+ 'hidden': [f'{data["type"]} infractions cannot be hidden.']
+ })
+
+ def test_returns_400_for_non_hidden_required_hidden_type(self):
+ url = reverse('bot:infraction-list', host='api')
+
data = {
'user': self.user.id,
'actor': self.user.id,
- 'type': 'superstar',
- 'hidden': True
+ 'type': 'note',
+ 'hidden': False,
}
response = self.client.post(url, data=data)
self.assertEqual(response.status_code, 400)
self.assertEqual(response.json(), {
- 'hidden': [f'{data["type"]} infractions cannot be hidden.']
+ 'hidden': [f'{data["type"]} infractions must be hidden.']
})