-
Notifications
You must be signed in to change notification settings - Fork 93
Expand file tree
/
Copy pathtest_api_config.py
More file actions
160 lines (111 loc) · 5.48 KB
/
test_api_config.py
File metadata and controls
160 lines (111 loc) · 5.48 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
# flake8: noqa
import os
from unittest import TestCase, mock
from nasdaqdatalink.api_config import *
TEST_BASE_PATH = os.path.join(
os.path.dirname(os.path.realpath(__file__)), ".nasdaq-config"
)
TEST_KEY_FILE = os.path.join(
TEST_BASE_PATH, "testkeyfile"
)
TEST_DEFAULT_FILE = os.path.join(
TEST_BASE_PATH, "defaultkeyfile"
)
TEST_DEFAULT_FILE_CONTENTS = 'keyfordefaultfile'
class ApiConfigTest(TestCase):
def setUp(self):
if not os.path.exists(os.path.dirname(TEST_KEY_FILE)):
try:
os.makedirs(os.path.dirname(TEST_KEY_FILE))
except OSError as exc: # Guard against race condition
if exc.errno != errno.EEXIST:
raise
def tearDown(self):
if NASDAQ_DATA_LINK_API_KEY in os.environ:
del os.environ['NASDAQ_DATA_LINK_API_KEY']
if NASDAQ_DATA_LINK_BASE_DOMAIN in os.environ:
del os.environ['NASDAQ_DATA_LINK_BASE_DOMAIN']
# reset the global state in ApiConfig
ApiConfig.api_base = '{}data.nasdaq.com/api/v3'.format(ApiConfig.api_protocol)
if os.path.exists(TEST_KEY_FILE):
os.remove(TEST_KEY_FILE)
if os.path.exists(TEST_DEFAULT_FILE):
os.remove(TEST_DEFAULT_FILE)
os.removedirs(TEST_BASE_PATH)
def test_read_key_when_environment_variable_set(self):
os.environ['NASDAQ_DATA_LINK_API_KEY'] = 'setinenv'
ApiConfig.api_key = None
read_key()
self.assertEqual(ApiConfig.api_key, "setinenv")
def test_read_key_environment_variable_takes_precedence(self):
os.environ['NASDAQ_DATA_LINK_API_KEY'] = 'setinenvprecedence'
save_key("keyforfilenot", TEST_KEY_FILE)
ApiConfig.api_key = None
read_key()
self.assertEqual(ApiConfig.api_key, "setinenvprecedence")
def test_read_key_when_environment_variable_not_set(self):
save_key("keyforfile", TEST_KEY_FILE)
ApiConfig.api_key = None # Set None, we are not testing save_key
read_key(TEST_KEY_FILE)
self.assertEqual(ApiConfig.api_key, 'keyforfile')
def test_read_key_empty_file(self):
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
save_key("")
with self.assertRaises(ValueError):
read_key()
def test_read_key_when_env_key_empty(self):
os.environ['NASDAQ_DATA_LINK_API_KEY'] = ''
with self.assertRaises(ValueError):
read_key()
def test_read_key_when_files_not_set(self):
ApiConfig.api_key = None
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
read_key()
mock_default_config_filename.assert_called_once
self.assertEqual(ApiConfig.api_key, None)
def test_read_key_when_default_file_set(self):
save_key("keyfordefaultfile", TEST_DEFAULT_FILE)
ApiConfig.api_key = None # Set None, we are not testing save_key
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
read_key()
self.assertEqual(ApiConfig.api_key, 'keyfordefaultfile')
def _read_key_from_file_helper(self, given, expected):
save_key(given, TEST_DEFAULT_FILE)
ApiConfig.api_key = None # Set None, we are not testing save_key
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
read_key()
self.assertEqual(ApiConfig.api_key, expected)
def test_read_key_from_file_with_newline(self):
given = f"{TEST_DEFAULT_FILE_CONTENTS}\n"
self._read_key_from_file_helper(given, TEST_DEFAULT_FILE_CONTENTS)
def test_read_key_from_file_with_leading_newline(self):
given = f"\n{TEST_DEFAULT_FILE_CONTENTS}\n"
self._read_key_from_file_helper(given, TEST_DEFAULT_FILE_CONTENTS)
def test_read_key_from_file_with_space(self):
given = f" {TEST_DEFAULT_FILE_CONTENTS} "
self._read_key_from_file_helper(given, TEST_DEFAULT_FILE_CONTENTS)
def test_read_key_from_file_with_tab(self):
given = f"\t{TEST_DEFAULT_FILE_CONTENTS}\t"
self._read_key_from_file_helper(given, TEST_DEFAULT_FILE_CONTENTS)
def test_read_key_from_file_with_multi_newline(self):
given = "keyfordefaultfile\n\nanotherkey\n"
self._read_key_from_file_helper(given, TEST_DEFAULT_FILE_CONTENTS)
def test_read_config_when_environment_variable_set(self):
os.environ['NASDAQ_DATA_LINK_BASE_DOMAIN'] = 'testdatalinkdomain.com'
ApiConfig.api_base = None
read_config()
self.assertEqual(ApiConfig.api_base, '{}testdatalinkdomain.com/api/v3'.format(ApiConfig.api_protocol))
def test_read_config_when_environment_variable_not_set(self):
ApiConfig.api_base = 'prevapibase'
read_config()
self.assertEqual(ApiConfig.api_base, 'prevapibase')
def test_read_config_when_env_key_empty(self):
os.environ['NASDAQ_DATA_LINK_BASE_DOMAIN'] = ''
ApiConfig.api_base = 'prevapibase'
with self.assertRaises(ValueError):
read_config()
self.assertEqual(ApiConfig.api_base, 'prevapibase')