diff options
Diffstat (limited to 'tests/test_main.py')
-rw-r--r-- | tests/test_main.py | 107 |
1 files changed, 43 insertions, 64 deletions
diff --git a/tests/test_main.py b/tests/test_main.py index 55b1382..1864c06 100644 --- a/tests/test_main.py +++ b/tests/test_main.py | |||
@@ -103,7 +103,6 @@ class MainTest(WebMockTestCase): | |||
103 | mock.patch("main.parse_config") as main_parse_config: | 103 | mock.patch("main.parse_config") as main_parse_config: |
104 | with self.subTest(debug=False): | 104 | with self.subTest(debug=False): |
105 | main_parse_args.return_value = self.market_args() | 105 | main_parse_args.return_value = self.market_args() |
106 | main_parse_config.return_value = ["pg_config", "redis_config"] | ||
107 | main_fetch_markets.return_value = [(1, {"key": "market_config"}, 3)] | 106 | main_fetch_markets.return_value = [(1, {"key": "market_config"}, 3)] |
108 | m = main.get_user_market("config_path.ini", 1) | 107 | m = main.get_user_market("config_path.ini", 1) |
109 | 108 | ||
@@ -114,7 +113,6 @@ class MainTest(WebMockTestCase): | |||
114 | main_parse_args.reset_mock() | 113 | main_parse_args.reset_mock() |
115 | with self.subTest(debug=True): | 114 | with self.subTest(debug=True): |
116 | main_parse_args.return_value = self.market_args(debug=True) | 115 | main_parse_args.return_value = self.market_args(debug=True) |
117 | main_parse_config.return_value = ["pg_config", "redis_config"] | ||
118 | main_fetch_markets.return_value = [(1, {"key": "market_config"}, 3)] | 116 | main_fetch_markets.return_value = [(1, {"key": "market_config"}, 3)] |
119 | m = main.get_user_market("config_path.ini", 1, debug=True) | 117 | m = main.get_user_market("config_path.ini", 1, debug=True) |
120 | 118 | ||
@@ -135,16 +133,16 @@ class MainTest(WebMockTestCase): | |||
135 | args_mock.after = "after" | 133 | args_mock.after = "after" |
136 | self.assertEqual("", stdout_mock.getvalue()) | 134 | self.assertEqual("", stdout_mock.getvalue()) |
137 | 135 | ||
138 | main.process("config", 3, 1, args_mock, "pg_config", "redis_config") | 136 | main.process("config", 3, 1, args_mock) |
139 | 137 | ||
140 | market_mock.from_config.assert_has_calls([ | 138 | market_mock.from_config.assert_has_calls([ |
141 | mock.call("config", args_mock, pg_config="pg_config", redis_config="redis_config", market_id=3, user_id=1), | 139 | mock.call("config", args_mock, market_id=3, user_id=1), |
142 | mock.call().process("action", before="before", after="after"), | 140 | mock.call().process("action", before="before", after="after"), |
143 | ]) | 141 | ]) |
144 | 142 | ||
145 | with self.subTest(exception=True): | 143 | with self.subTest(exception=True): |
146 | market_mock.from_config.side_effect = Exception("boo") | 144 | market_mock.from_config.side_effect = Exception("boo") |
147 | main.process(3, "config", 1, args_mock, "pg_config", "redis_config") | 145 | main.process(3, "config", 1, args_mock) |
148 | self.assertEqual("Exception: boo\n", stdout_mock.getvalue()) | 146 | self.assertEqual("Exception: boo\n", stdout_mock.getvalue()) |
149 | 147 | ||
150 | def test_main(self): | 148 | def test_main(self): |
@@ -159,20 +157,18 @@ class MainTest(WebMockTestCase): | |||
159 | args_mock.user = "user" | 157 | args_mock.user = "user" |
160 | parse_args.return_value = args_mock | 158 | parse_args.return_value = args_mock |
161 | 159 | ||
162 | parse_config.return_value = ["pg_config", "redis_config"] | ||
163 | |||
164 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] | 160 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] |
165 | 161 | ||
166 | main.main(["Foo", "Bar"]) | 162 | main.main(["Foo", "Bar"]) |
167 | 163 | ||
168 | parse_args.assert_called_with(["Foo", "Bar"]) | 164 | parse_args.assert_called_with(["Foo", "Bar"]) |
169 | parse_config.assert_called_with(args_mock) | 165 | parse_config.assert_called_with(args_mock) |
170 | fetch_markets.assert_called_with("pg_config", "user") | 166 | fetch_markets.assert_called_with("user") |
171 | 167 | ||
172 | self.assertEqual(2, process.call_count) | 168 | self.assertEqual(2, process.call_count) |
173 | process.assert_has_calls([ | 169 | process.assert_has_calls([ |
174 | mock.call("config1", 3, 1, args_mock, "pg_config", "redis_config"), | 170 | mock.call("config1", 3, 1, args_mock), |
175 | mock.call("config2", 1, 2, args_mock, "pg_config", "redis_config"), | 171 | mock.call("config2", 1, 2, args_mock), |
176 | ]) | 172 | ]) |
177 | with self.subTest(parallel=True): | 173 | with self.subTest(parallel=True): |
178 | with mock.patch("main.parse_args") as parse_args,\ | 174 | with mock.patch("main.parse_args") as parse_args,\ |
@@ -187,24 +183,22 @@ class MainTest(WebMockTestCase): | |||
187 | args_mock.user = "user" | 183 | args_mock.user = "user" |
188 | parse_args.return_value = args_mock | 184 | parse_args.return_value = args_mock |
189 | 185 | ||
190 | parse_config.return_value = ["pg_config", "redis_config"] | ||
191 | |||
192 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] | 186 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] |
193 | 187 | ||
194 | main.main(["Foo", "Bar"]) | 188 | main.main(["Foo", "Bar"]) |
195 | 189 | ||
196 | parse_args.assert_called_with(["Foo", "Bar"]) | 190 | parse_args.assert_called_with(["Foo", "Bar"]) |
197 | parse_config.assert_called_with(args_mock) | 191 | parse_config.assert_called_with(args_mock) |
198 | fetch_markets.assert_called_with("pg_config", "user") | 192 | fetch_markets.assert_called_with("user") |
199 | 193 | ||
200 | stop.assert_called_once_with() | 194 | stop.assert_called_once_with() |
201 | start.assert_called_once_with() | 195 | start.assert_called_once_with() |
202 | self.assertEqual(2, process.call_count) | 196 | self.assertEqual(2, process.call_count) |
203 | process.assert_has_calls([ | 197 | process.assert_has_calls([ |
204 | mock.call.__bool__(), | 198 | mock.call.__bool__(), |
205 | mock.call("config1", 3, 1, args_mock, "pg_config", "redis_config"), | 199 | mock.call("config1", 3, 1, args_mock), |
206 | mock.call.__bool__(), | 200 | mock.call.__bool__(), |
207 | mock.call("config2", 1, 2, args_mock, "pg_config", "redis_config"), | 201 | mock.call("config2", 1, 2, args_mock), |
208 | ]) | 202 | ]) |
209 | with self.subTest(quiet=True): | 203 | with self.subTest(quiet=True): |
210 | with mock.patch("main.parse_args") as parse_args,\ | 204 | with mock.patch("main.parse_args") as parse_args,\ |
@@ -219,8 +213,6 @@ class MainTest(WebMockTestCase): | |||
219 | args_mock.user = "user" | 213 | args_mock.user = "user" |
220 | parse_args.return_value = args_mock | 214 | parse_args.return_value = args_mock |
221 | 215 | ||
222 | parse_config.return_value = ["pg_config", "redis_config"] | ||
223 | |||
224 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] | 216 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] |
225 | 217 | ||
226 | main.main(["Foo", "Bar"]) | 218 | main.main(["Foo", "Bar"]) |
@@ -240,8 +232,6 @@ class MainTest(WebMockTestCase): | |||
240 | args_mock.user = "user" | 232 | args_mock.user = "user" |
241 | parse_args.return_value = args_mock | 233 | parse_args.return_value = args_mock |
242 | 234 | ||
243 | parse_config.return_value = ["pg_config", "redis_config"] | ||
244 | |||
245 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] | 235 | fetch_markets.return_value = [[3, "config1", 1], [1, "config2", 2]] |
246 | 236 | ||
247 | main.main(["Foo", "Bar"]) | 237 | main.main(["Foo", "Bar"]) |
@@ -252,63 +242,57 @@ class MainTest(WebMockTestCase): | |||
252 | @mock.patch.object(main.sys, "exit") | 242 | @mock.patch.object(main.sys, "exit") |
253 | @mock.patch("main.os") | 243 | @mock.patch("main.os") |
254 | def test_parse_config(self, os, exit): | 244 | def test_parse_config(self, os, exit): |
255 | with self.subTest(report_path=None): | 245 | with self.subTest(report_path=None),\ |
246 | mock.patch.object(main.dbs, "connect_psql") as psql,\ | ||
247 | mock.patch.object(main.dbs, "connect_redis") as redis: | ||
256 | args = main.configargparse.Namespace(**{ | 248 | args = main.configargparse.Namespace(**{ |
257 | "db_host": "host", | 249 | "db_host": "host", |
258 | "db_port": "port", | ||
259 | "db_user": "user", | ||
260 | "db_password": "password", | ||
261 | "db_database": "database", | ||
262 | "redis_host": "rhost", | 250 | "redis_host": "rhost", |
263 | "redis_port": "rport", | ||
264 | "redis_database": "rdb", | ||
265 | "report_path": None, | 251 | "report_path": None, |
266 | }) | 252 | }) |
267 | 253 | ||
268 | db_config, redis_config = main.parse_config(args) | 254 | main.parse_config(args) |
269 | self.assertEqual({ "host": "host", "port": "port", "user": | 255 | psql.assert_called_once_with(args) |
270 | "user", "password": "password", "database": "database" | 256 | redis.assert_called_once_with(args) |
271 | }, db_config) | 257 | |
272 | self.assertEqual({ "host": "rhost", "port": "rport", "db": | 258 | with self.subTest(report_path=None, db=None),\ |
273 | "rdb"}, redis_config) | 259 | mock.patch.object(main.dbs, "connect_psql") as psql,\ |
260 | mock.patch.object(main.dbs, "connect_redis") as redis: | ||
261 | args = main.configargparse.Namespace(**{ | ||
262 | "db_host": None, | ||
263 | "redis_host": "rhost", | ||
264 | "report_path": None, | ||
265 | }) | ||
274 | 266 | ||
275 | with self.assertRaises(AttributeError): | 267 | main.parse_config(args) |
276 | args.db_password | 268 | psql.assert_not_called() |
277 | with self.assertRaises(AttributeError): | 269 | redis.assert_called_once_with(args) |
278 | args.redis_host | ||
279 | 270 | ||
280 | with self.subTest(redis_host="socket"): | 271 | with self.subTest(report_path=None, redis=None),\ |
272 | mock.patch.object(main.dbs, "connect_psql") as psql,\ | ||
273 | mock.patch.object(main.dbs, "connect_redis") as redis: | ||
281 | args = main.configargparse.Namespace(**{ | 274 | args = main.configargparse.Namespace(**{ |
282 | "db_host": "host", | 275 | "db_host": "host", |
283 | "db_port": "port", | 276 | "redis_host": None, |
284 | "db_user": "user", | ||
285 | "db_password": "password", | ||
286 | "db_database": "database", | ||
287 | "redis_host": "/run/foo", | ||
288 | "redis_port": "rport", | ||
289 | "redis_database": "rdb", | ||
290 | "report_path": None, | 277 | "report_path": None, |
291 | }) | 278 | }) |
292 | 279 | ||
293 | db_config, redis_config = main.parse_config(args) | 280 | main.parse_config(args) |
294 | self.assertEqual({ "unix_socket_path": "/run/foo", "db": "rdb"}, redis_config) | 281 | redis.assert_not_called() |
282 | psql.assert_called_once_with(args) | ||
295 | 283 | ||
296 | with self.subTest(report_path="present"): | 284 | with self.subTest(report_path="present"),\ |
285 | mock.patch.object(main.dbs, "connect_psql") as psql,\ | ||
286 | mock.patch.object(main.dbs, "connect_redis") as redis: | ||
297 | args = main.configargparse.Namespace(**{ | 287 | args = main.configargparse.Namespace(**{ |
298 | "db_host": "host", | 288 | "db_host": "host", |
299 | "db_port": "port", | ||
300 | "db_user": "user", | ||
301 | "db_password": "password", | ||
302 | "db_database": "database", | ||
303 | "redis_host": "rhost", | 289 | "redis_host": "rhost", |
304 | "redis_port": "rport", | ||
305 | "redis_database": "rdb", | ||
306 | "report_path": "report_path", | 290 | "report_path": "report_path", |
307 | }) | 291 | }) |
308 | 292 | ||
309 | os.path.exists.return_value = False | 293 | os.path.exists.return_value = False |
310 | 294 | ||
311 | result = main.parse_config(args) | 295 | main.parse_config(args) |
312 | 296 | ||
313 | os.path.exists.assert_called_once_with("report_path") | 297 | os.path.exists.assert_called_once_with("report_path") |
314 | os.makedirs.assert_called_once_with("report_path") | 298 | os.makedirs.assert_called_once_with("report_path") |
@@ -331,29 +315,24 @@ class MainTest(WebMockTestCase): | |||
331 | mock.patch('sys.stderr', new_callable=StringIO) as stdout_mock: | 315 | mock.patch('sys.stderr', new_callable=StringIO) as stdout_mock: |
332 | args = main.parse_args(["--config", "foo.bar"]) | 316 | args = main.parse_args(["--config", "foo.bar"]) |
333 | 317 | ||
334 | @mock.patch.object(main, "psycopg2") | 318 | @mock.patch.object(main.dbs, "psql") |
335 | def test_fetch_markets(self, psycopg2): | 319 | def test_fetch_markets(self, psql): |
336 | connect_mock = mock.Mock() | ||
337 | cursor_mock = mock.MagicMock() | 320 | cursor_mock = mock.MagicMock() |
338 | cursor_mock.__iter__.return_value = ["row_1", "row_2"] | 321 | cursor_mock.__iter__.return_value = ["row_1", "row_2"] |
339 | 322 | ||
340 | connect_mock.cursor.return_value = cursor_mock | 323 | psql.cursor.return_value = cursor_mock |
341 | psycopg2.connect.return_value = connect_mock | ||
342 | 324 | ||
343 | with self.subTest(user=None): | 325 | with self.subTest(user=None): |
344 | rows = list(main.fetch_markets({"foo": "bar"}, None)) | 326 | rows = list(main.fetch_markets(None)) |
345 | 327 | ||
346 | psycopg2.connect.assert_called_once_with(foo="bar") | ||
347 | cursor_mock.execute.assert_called_once_with("SELECT id,config,user_id FROM market_configs") | 328 | cursor_mock.execute.assert_called_once_with("SELECT id,config,user_id FROM market_configs") |
348 | 329 | ||
349 | self.assertEqual(["row_1", "row_2"], rows) | 330 | self.assertEqual(["row_1", "row_2"], rows) |
350 | 331 | ||
351 | psycopg2.connect.reset_mock() | ||
352 | cursor_mock.execute.reset_mock() | 332 | cursor_mock.execute.reset_mock() |
353 | with self.subTest(user=1): | 333 | with self.subTest(user=1): |
354 | rows = list(main.fetch_markets({"foo": "bar"}, 1)) | 334 | rows = list(main.fetch_markets(1)) |
355 | 335 | ||
356 | psycopg2.connect.assert_called_once_with(foo="bar") | ||
357 | cursor_mock.execute.assert_called_once_with("SELECT id,config,user_id FROM market_configs WHERE user_id = %s", 1) | 336 | cursor_mock.execute.assert_called_once_with("SELECT id,config,user_id FROM market_configs WHERE user_id = %s", 1) |
358 | 337 | ||
359 | self.assertEqual(["row_1", "row_2"], rows) | 338 | self.assertEqual(["row_1", "row_2"], rows) |