aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site')
-rw-r--r--pydis_site/apps/api/models/bot/tag.py5
-rw-r--r--pydis_site/apps/api/tests/test_validators.py39
2 files changed, 42 insertions, 2 deletions
diff --git a/pydis_site/apps/api/models/bot/tag.py b/pydis_site/apps/api/models/bot/tag.py
index 0dc4830c..fc0db4e4 100644
--- a/pydis_site/apps/api/models/bot/tag.py
+++ b/pydis_site/apps/api/models/bot/tag.py
@@ -23,10 +23,15 @@ def validate_tag_embed_fields(fields):
'inline': (is_bool_validator,),
}
+ required_fields = ('name', 'value')
+
for field in fields:
if not isinstance(field, Mapping):
raise ValidationError("Embed fields must be a mapping.")
+ if not all(required_field in field for required_field in required_fields):
+ raise ValidationError("Embed fields must contain both a 'name' and a 'value' field.")
+
for field_name, value in field.items():
if field_name not in field_validators:
raise ValidationError(f"Unknown embed field field: {field_name!r}.")
diff --git a/pydis_site/apps/api/tests/test_validators.py b/pydis_site/apps/api/tests/test_validators.py
index ffa2f61e..4222f0c0 100644
--- a/pydis_site/apps/api/tests/test_validators.py
+++ b/pydis_site/apps/api/tests/test_validators.py
@@ -119,18 +119,53 @@ class TagEmbedValidatorTests(TestCase):
'value': "LOOK AT ME"
},
{
+ 'name': "Totally valid",
+ 'value': "LOOK AT ME",
'oh': "what is this key?"
}
]
})
+ def test_rejects_missing_required_field_field(self):
+ with self.assertRaises(ValidationError):
+ validate_tag_embed({
+ 'fields': [
+ {
+ 'name': "Totally valid",
+ 'inline': True,
+ }
+ ]
+ })
+
+ def test_rejects_invalid_inline_field_field(self):
+ with self.assertRaises(ValidationError):
+ validate_tag_embed({
+ 'fields': [
+ {
+ 'name': "Totally valid",
+ 'value': "LOOK AT ME",
+ 'inline': "Totally not a boolean",
+ }
+ ]
+ })
+
def test_allows_valid_fields(self):
validate_tag_embed({
'fields': [
{
'name': "valid",
- 'value': "field"
- }
+ 'value': "field",
+ },
+ {
+ 'name': "valid",
+ 'value': "field",
+ 'inline': False,
+ },
+ {
+ 'name': "valid",
+ 'value': "field",
+ 'inline': True,
+ },
]
})