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 | |
| parent | Add the `Tag` model. (diff) | |
Add embed validation.
Diffstat (limited to 'api/tests')
| -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': "" +                } +            })  |