diff options
author | 2018-09-23 13:30:56 +0200 | |
---|---|---|
committer | 2018-09-23 13:30:56 +0200 | |
commit | 5fd256e5e6e4a30ca979f9bd4edc8daf55034699 (patch) | |
tree | 440440cf6de3cc957caaaf53ae94df1d0c1551dc /api/tests/test_validators.py | |
parent | Add the `Tag` model. (diff) |
Add embed validation.
Diffstat (limited to 'api/tests/test_validators.py')
-rw-r--r-- | api/tests/test_validators.py | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/api/tests/test_validators.py b/api/tests/test_validators.py new file mode 100644 index 00000000..ce197dec --- /dev/null +++ b/api/tests/test_validators.py @@ -0,0 +1,143 @@ +from django.core.exceptions import ValidationError +from hypothesis import given, settings +from hypothesis.extra.django import TestCase +from hypothesis.strategies import dictionaries, just, lists, one_of, randoms, text + +from ..validators import validate_tag_embed + + +REQUIRED_KEYS = ( + 'content', 'fields', 'image', 'title', 'video' +) + + +class TagEmbedValidatorTests(TestCase): + @given( + dictionaries( + text().filter(lambda key: key not in REQUIRED_KEYS), + text() + ) + ) + def test_rejects_missing_required_keys(self, embed): + with self.assertRaises(ValidationError): + validate_tag_embed(embed) + + def test_rejects_empty_required_key(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': '' + }) + + @given(lists(randoms())) + def test_rejects_list_as_embed(self, embed): + with self.assertRaises(ValidationError): + validate_tag_embed(embed) + + def test_rejects_required_keys_and_unknown_keys(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "the duck walked up to the lemonade stand", + 'and': "he said to the man running the stand" + }) + + def test_rejects_too_long_title(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': 'a' * 257 + }) + + @given( + dictionaries( + just('fields'), + one_of( + lists(randoms(), min_size=25), + text(min_size=25) + ) + ) + ) + @settings(max_examples=10) + def test_rejects_too_many_fields(self, embed): + with self.assertRaises(ValidationError): + validate_tag_embed(embed) + + def test_rejects_too_long_description(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'description': 'd' * 2049 + }) + + def test_rejects_fields_as_list_of_non_mappings(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'fields': ['abc'] + }) + + def test_rejects_fields_with_unknown_fields(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'fields': [ + { + 'what': "is this field" + } + ] + }) + + def test_rejects_fields_with_too_long_name(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'fields': [ + { + 'name': "a" * 257 + } + ] + }) + + def test_rejects_footer_as_non_mapping(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'footer': [] + }) + + def test_rejects_footer_with_unknown_fields(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'footer': { + 'duck': "quack" + } + }) + + def test_rejects_footer_with_empty_text(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'footer': { + 'text': "" + } + }) + + def test_rejects_author_as_non_mapping(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'author': [] + }) + + def test_rejects_author_with_unknown_field(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'author': { + 'field': "that is unknown" + } + }) + + def test_rejects_author_with_empty_name(self): + with self.assertRaises(ValidationError): + validate_tag_embed({ + 'title': "whatever", + 'author': { + 'name': "" + } + }) |