aboutsummaryrefslogtreecommitdiffstats
path: root/api/tests/test_validators.py
blob: 51f024120ef1fe6e0c206b349699b7497dee7d14 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from django.core.exceptions import ValidationError
from django.test import TestCase

from ..validators import validate_tag_embed


REQUIRED_KEYS = (
    'content', 'fields', 'image', 'title', 'video'
)


class TagEmbedValidatorTests(TestCase):
    def test_rejects_non_mapping(self):
        with self.assertRaises(ValidationError):
            validate_tag_embed('non-empty non-mapping')

    def test_rejects_missing_required_keys(self):
        with self.assertRaises(ValidationError):
            validate_tag_embed({
                'unknown': "key"
            })

    def test_rejects_empty_required_key(self):
        with self.assertRaises(ValidationError):
            validate_tag_embed({
                'title': ''
            })

    def test_rejects_list_as_embed(self):
        with self.assertRaises(ValidationError):
            validate_tag_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
            })

    def test_rejects_too_many_fields(self):
        with self.assertRaises(ValidationError):
            validate_tag_embed({
                'fields': [{} for _ in range(26)]
            })

    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': ""
                }
            })