diff options
| -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, +                },              ]          }) | 
