4
4
from unittest import TestCase , mock
5
5
from nasdaqdatalink .api_config import *
6
6
7
+ TEST_BASE_PATH = os .path .join (
8
+ os .path .dirname (os .path .realpath (__file__ )), ".nasdaq-config"
9
+ )
10
+
7
11
TEST_KEY_FILE = os .path .join (
8
- os . path . dirname ( os . path . realpath ( __file__ )), ".nasdaq-config" , "testkeyfile"
12
+ TEST_BASE_PATH , "testkeyfile"
9
13
)
10
14
11
15
TEST_DEFAULT_FILE = os .path .join (
12
- os . path . dirname ( os . path . realpath ( __file__ )), ".nasdaq-config" , "defaultkeyfile"
16
+ TEST_BASE_PATH , "defaultkeyfile"
13
17
)
14
18
19
+ TEST_DEFAULT_FILE_CONTENTS = 'keyfordefaultfile'
20
+
15
21
16
22
class ApiConfigTest (TestCase ):
17
23
def setUp (self ):
@@ -32,6 +38,8 @@ def tearDown(self):
32
38
if os .path .exists (TEST_DEFAULT_FILE ):
33
39
os .remove (TEST_DEFAULT_FILE )
34
40
41
+ os .removedirs (TEST_BASE_PATH )
42
+
35
43
36
44
def test_read_key_when_environment_variable_set (self ):
37
45
os .environ ['NASDAQ_DATA_LINK_API_KEY' ] = 'setinenv'
@@ -55,11 +63,25 @@ def test_read_key_when_environment_variable_not_set(self):
55
63
self .assertEqual (ApiConfig .api_key , 'keyforfile' )
56
64
57
65
66
+ def test_read_key_empty_file (self ):
67
+ with mock .patch ("nasdaqdatalink.api_config.default_config_filename" ) as mock_default_config_filename :
68
+ mock_default_config_filename .return_value = TEST_DEFAULT_FILE
69
+ save_key ("" )
70
+ with self .assertRaises (ValueError ):
71
+ read_key ()
72
+
73
+
74
+ def test_read_key_when_env_key_empty (self ):
75
+ os .environ ['NASDAQ_DATA_LINK_API_KEY' ] = ''
76
+ with self .assertRaises (ValueError ):
77
+ read_key ()
78
+
79
+
58
80
def test_read_key_when_files_not_set (self ):
59
81
ApiConfig .api_key = None
60
82
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 ()
83
+ mock_default_config_filename .return_value = TEST_DEFAULT_FILE
84
+ read_key ()
63
85
64
86
mock_default_config_filename .assert_called_once
65
87
self .assertEqual (ApiConfig .api_key , None )
@@ -70,7 +92,43 @@ def test_read_key_when_default_file_set(self):
70
92
ApiConfig .api_key = None # Set None, we are not testing save_key
71
93
72
94
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 ()
95
+ mock_default_config_filename .return_value = TEST_DEFAULT_FILE
96
+ read_key ()
75
97
76
98
self .assertEqual (ApiConfig .api_key , 'keyfordefaultfile' )
99
+
100
+
101
+ def _read_key_from_file_helper (self , given , expected ):
102
+ save_key (given , TEST_DEFAULT_FILE )
103
+ ApiConfig .api_key = None # Set None, we are not testing save_key
104
+
105
+ with mock .patch ("nasdaqdatalink.api_config.default_config_filename" ) as mock_default_config_filename :
106
+ mock_default_config_filename .return_value = TEST_DEFAULT_FILE
107
+ read_key ()
108
+
109
+ self .assertEqual (ApiConfig .api_key , expected )
110
+
111
+
112
+ def test_read_key_from_file_with_newline (self ):
113
+ given = f"{ TEST_DEFAULT_FILE_CONTENTS } \n "
114
+ self ._read_key_from_file_helper (given , TEST_DEFAULT_FILE_CONTENTS )
115
+
116
+
117
+ def test_read_key_from_file_with_leading_newline (self ):
118
+ given = f"\n { TEST_DEFAULT_FILE_CONTENTS } \n "
119
+ self ._read_key_from_file_helper (given , TEST_DEFAULT_FILE_CONTENTS )
120
+
121
+
122
+ def test_read_key_from_file_with_space (self ):
123
+ given = f" { TEST_DEFAULT_FILE_CONTENTS } "
124
+ self ._read_key_from_file_helper (given , TEST_DEFAULT_FILE_CONTENTS )
125
+
126
+
127
+ def test_read_key_from_file_with_tab (self ):
128
+ given = f"\t { TEST_DEFAULT_FILE_CONTENTS } \t "
129
+ self ._read_key_from_file_helper (given , TEST_DEFAULT_FILE_CONTENTS )
130
+
131
+
132
+ def test_read_key_from_file_with_multi_newline (self ):
133
+ given = "keyfordefaultfile\n \n anotherkey\n "
134
+ self ._read_key_from_file_helper (given , TEST_DEFAULT_FILE_CONTENTS )
0 commit comments