Skip to content

Commit 2ef1aee

Browse files
CP-9044/api-key-as-environment-variable: Added tests to cover file and environment set api keys
1 parent b6fcc9d commit 2ef1aee

File tree

2 files changed

+54
-20
lines changed

2 files changed

+54
-20
lines changed

nasdaqdatalink/api_config.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,11 @@ def default_config_filename():
3838
return os.path.expanduser(config_file)
3939

4040

41-
def default_config_file_exists():
42-
config_filename = default_config_filename()
43-
return os.path.isfile(config_filename)
41+
def config_file_exists(filename=None):
42+
if filename is None:
43+
filename = default_config_filename()
44+
45+
return os.path.isfile(filename)
4446

4547

4648
def save_key(apikey, filename=None):
@@ -85,5 +87,5 @@ def read_key_from_environment_variable():
8587
def read_key(filename=None):
8688
if api_key_environment_variable_exists():
8789
read_key_from_environment_variable()
88-
elif default_config_file_exists():
90+
elif config_file_exists(filename):
8991
read_key_from_file(filename)

test/test_api_config.py

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,37 +8,69 @@
88
os.path.dirname(os.path.realpath(__file__)), ".nasdaq-config", "testkeyfile"
99
)
1010

11-
12-
class ApiConfigTest(TestCase):
13-
@mock.patch.dict(os.environ, {"NASDAQ_DATA_LINK_API_KEY": "setinenv"})
14-
def test_read_key_when_environment_variable_set(self):
15-
ApiConfig.api_key = None
16-
read_key()
17-
self.assertEqual(ApiConfig.api_key, "setinenv")
18-
del os.environ['NASDAQ_DATA_LINK_API_KEY']
11+
TEST_DEFAULT_FILE = os.path.join(
12+
os.path.dirname(os.path.realpath(__file__)), ".nasdaq-config", "defaultkeyfile"
13+
)
1914

2015

21-
def test_read_key_when_environment_variable_not_set(self):
16+
class ApiConfigTest(TestCase):
17+
def setUp(self):
2218
if not os.path.exists(os.path.dirname(TEST_KEY_FILE)):
2319
try:
2420
os.makedirs(os.path.dirname(TEST_KEY_FILE))
2521
except OSError as exc: # Guard against race condition
2622
if exc.errno != errno.EEXIST:
2723
raise
2824

29-
ApiConfig.api_key = None
30-
save_key("keyforfile", TEST_KEY_FILE)
31-
read_key(TEST_KEY_FILE)
32-
self.assertEqual(ApiConfig.api_key, 'keyforfile')
25+
def tearDown(self):
26+
if NASDAQ_DATA_LINK_API_KEY in os.environ:
27+
del os.environ['NASDAQ_DATA_LINK_API_KEY']
28+
3329
if os.path.exists(TEST_KEY_FILE):
3430
os.remove(TEST_KEY_FILE)
3531

32+
if os.path.exists(TEST_DEFAULT_FILE):
33+
os.remove(TEST_DEFAULT_FILE)
3634

3735

38-
def test_read_key_when_file_not_set(self):
39-
if os.path.exists(TEST_KEY_FILE):
40-
os.remove(TEST_KEY_FILE)
36+
def test_read_key_when_environment_variable_set(self):
37+
os.environ['NASDAQ_DATA_LINK_API_KEY'] = 'setinenv'
38+
ApiConfig.api_key = None
39+
read_key()
40+
self.assertEqual(ApiConfig.api_key, "setinenv")
41+
4142

43+
def test_read_key_environment_variable_takes_precedence(self):
44+
os.environ['NASDAQ_DATA_LINK_API_KEY'] = 'setinenvprecedence'
45+
save_key("keyforfilenot", TEST_KEY_FILE)
4246
ApiConfig.api_key = None
4347
read_key()
48+
self.assertEqual(ApiConfig.api_key, "setinenvprecedence")
49+
50+
51+
def test_read_key_when_environment_variable_not_set(self):
52+
save_key("keyforfile", TEST_KEY_FILE)
53+
ApiConfig.api_key = None # Set None, we are not testing save_key
54+
read_key(TEST_KEY_FILE)
55+
self.assertEqual(ApiConfig.api_key, 'keyforfile')
56+
57+
58+
def test_read_key_when_files_not_set(self):
59+
ApiConfig.api_key = None
60+
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
61+
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
62+
read_key()
63+
64+
mock_default_config_filename.assert_called_once
4465
self.assertEqual(ApiConfig.api_key, None)
66+
67+
68+
def test_read_key_when_default_file_set(self):
69+
save_key("keyfordefaultfile", TEST_DEFAULT_FILE)
70+
ApiConfig.api_key = None # Set None, we are not testing save_key
71+
72+
with mock.patch("nasdaqdatalink.api_config.default_config_filename") as mock_default_config_filename:
73+
mock_default_config_filename.return_value = TEST_DEFAULT_FILE
74+
read_key()
75+
76+
self.assertEqual(ApiConfig.api_key, 'keyfordefaultfile')

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy