diff options
author | 2019-08-22 20:38:51 +0200 | |
---|---|---|
committer | 2019-08-23 15:40:53 +0200 | |
commit | 8066a3360b23508d3fb2da3d37d2c63f2630faff (patch) | |
tree | 83479317a1c455d9ef0bc15990dfad8620ec20f2 | |
parent | Adding missing 'inline' parameter to embed fields attribute validator (diff) |
Adding required fields validator and tests to embed fields
-rw-r--r-- | pydis_site/apps/api/models/bot/tag.py | 5 | ||||
-rw-r--r-- | pydis_site/apps/api/tests/test_validators.py | 39 |
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, + }, ] }) |