/
test_config.py
128 lines (100 loc) · 5.11 KB
/
test_config.py
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
from copy import deepcopy
from django.conf import settings as django_settings
from django.core.exceptions import ImproperlyConfigured
from django.test import override_settings
import pytest
from django_guid.config import Settings
UUID_LENGTH_IS_NOT_INTEGER = 'UUID_LENGTH must be an integer and positive'
UUID_LENGHT_IS_NOT_CORRECT_RANGE_HEX_FORMAT = 'UUID_LENGTH must be between 1-32 when UUID_FORMAT is hex'
UUID_LENGHT_IS_NOT_CORRECT_RANGE_STRING_FORMAT = 'UUID_LENGTH must be between 1-36 when UUID_FORMAT is string'
@override_settings()
def test_no_config(settings):
del settings.DJANGO_GUID
Settings().validate()
def test_invalid_guid():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['VALIDATE_GUID'] = 'string'
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='VALIDATE_GUID must be a boolean'):
Settings().validate()
def test_invalid_header_name():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['GUID_HEADER_NAME'] = True
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='GUID_HEADER_NAME must be a string'):
Settings().validate()
def test_invalid_return_header_setting():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['RETURN_HEADER'] = 'string'
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='RETURN_HEADER must be a boolean'):
Settings().validate()
def test_invalid_expose_header_setting():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['EXPOSE_HEADER'] = 'string'
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='EXPOSE_HEADER must be a boolean'):
Settings().validate()
def test_valid_settings():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['VALIDATE_GUID'] = False
mocked_settings['GUID_HEADER_NAME'] = 'Correlation-ID-TEST'
mocked_settings['RETURN_HEADER'] = False
mocked_settings['EXPOSE_HEADER'] = False
with override_settings(DJANGO_GUID=mocked_settings):
assert not Settings().validate_guid
assert Settings().guid_header_name == 'Correlation-ID-TEST'
assert not Settings().return_header
def test_bad_integrations_type():
for setting in [{}, '', 2, None, -2]:
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['INTEGRATIONS'] = setting
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='INTEGRATIONS must be an array'):
Settings().validate()
def test_not_array_ignore_urls():
for setting in [{}, '', 2, None, -2]:
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['IGNORE_URLS'] = setting
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='IGNORE_URLS must be an array'):
Settings().validate()
def test_not_string_in_igore_urls():
for setting in ['api/v1/test', 'api/v1/othertest', True], [1, 2, 'yup']:
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['IGNORE_URLS'] = setting
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='IGNORE_URLS must be an array of strings'):
Settings().validate()
@pytest.mark.parametrize(
'uuid_length,uuid_format,error_message',
[
(True, 'hex', UUID_LENGTH_IS_NOT_INTEGER),
(False, 'hex', UUID_LENGTH_IS_NOT_INTEGER),
({}, 'hex', UUID_LENGTH_IS_NOT_INTEGER),
(-1, 'hex', UUID_LENGTH_IS_NOT_INTEGER),
(0, 'hex', UUID_LENGTH_IS_NOT_INTEGER),
(33, 'hex', UUID_LENGHT_IS_NOT_CORRECT_RANGE_HEX_FORMAT),
(37, 'string', UUID_LENGHT_IS_NOT_CORRECT_RANGE_STRING_FORMAT),
],
)
def test_uuid_len_fail(uuid_length, uuid_format, error_message):
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['UUID_LENGTH'] = uuid_length
mocked_settings['UUID_FORMAT'] = uuid_format
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match=error_message):
Settings().validate()
@pytest.mark.parametrize('uuid_format', ['bytes', 'urn', 'bytes_le'])
def test_uuid_format_fail(uuid_format):
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['UUID_FORMAT'] = uuid_format
with override_settings(DJANGO_GUID=mocked_settings):
with pytest.raises(ImproperlyConfigured, match='UUID_FORMAT must be either hex or string'):
Settings().validate()
def test_converts_correctly():
mocked_settings = deepcopy(django_settings.DJANGO_GUID)
mocked_settings['IGNORE_URLS'] = ['/no-guid', '/my/api/path/']
with override_settings(DJANGO_GUID=mocked_settings):
assert 'my/api/path' in Settings().ignore_urls
assert 'no-guid' in Settings().ignore_urls