@@ -245,74 +245,118 @@ def test_load_user_metadata_bad(inputs, msg):
245
245
actual_args = load_user_metadata (actual_args )
246
246
247
247
248
- params_user_info = [
249
- # No config file, check username and email are properly loaded and config file in ~ is created and written
248
+ params_user_info_without_conf_file = [
250
249
(
251
250
[
"new_username" ,
"[email protected] " ],
252
- ["input_dir" , "input_dir/diffpyconfig.json" , "diffpyconfig.json" , "diffpyconfig.json" ],
253
251
[
"new_username" ,
"[email protected] " ,
"new_username" ,
"[email protected] " ],
254
252
),
255
- # Config file in cwd, check username and email are properly loaded and config file is unchanged
253
+ ]
254
+
255
+
256
+ @pytest .mark .parametrize ("inputs, expected" , params_user_info_without_conf_file )
257
+ def test_load_user_info_without_conf_file (monkeypatch , inputs , expected , user_filesystem ):
258
+ os .chdir (user_filesystem )
259
+ expected_args_username , expected_args_email , expected_conf_username , expected_conf_email = expected
260
+ mock_prompt_user_info = iter (inputs )
261
+ monkeypatch .setattr ("builtins.input" , lambda _ : next (mock_prompt_user_info ))
262
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.CWD_CONFIG_PATH" , Path .cwd () / "diffpyconfig.json" )
263
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.HOME_CONFIG_PATH" , user_filesystem / "diffpyconfig.json" )
264
+
265
+ cli_inputs = ["2.5" , "data.xy" ]
266
+ actual_args = get_args (cli_inputs )
267
+ actual_args = load_user_info (actual_args )
268
+ assert actual_args .username == expected_args_username
269
+ assert actual_args .email == expected_args_email
270
+ with open (user_filesystem / "diffpyconfig.json" , "r" ) as f :
271
+ config_data = json .load (f )
272
+ assert config_data == {"username" : expected_conf_username , "email" : expected_conf_email }
273
+
274
+
275
+ params_user_info_with_conf_file_in_cwd = [
256
276
(
257
277
["" , "" ],
258
- ["conf_dir" , "conf_dir/diffpyconfig.json" , "diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
259
278
[
"good_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
260
279
),
261
280
(
262
281
["new_username" , "" ],
263
- ["conf_dir" , "conf_dir/diffpyconfig.json" , "diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
264
282
[
"new_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
265
283
),
266
284
(
267
285
268
- ["conf_dir" , "conf_dir/diffpyconfig.json" , "diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
269
286
[
"good_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
270
287
),
271
288
(
272
289
[
"new_username" ,
"[email protected] " ],
273
- ["conf_dir" , "conf_dir/diffpyconfig.json" , "diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
274
290
[
"new_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
275
291
),
276
- # Config file in home dir not in cwd, check username and email are properly loaded and config file is unchanged
292
+ ]
293
+
294
+
295
+ @pytest .mark .parametrize ("inputs, expected" , params_user_info_with_conf_file_in_cwd )
296
+ def test_load_user_info_with_conf_file_cwd (monkeypatch , inputs , expected , user_filesystem ):
297
+ # test it works when config file is in current directory
298
+ # check username and email are correctly loaded and config file is not modified
299
+ expected_args_username , expected_args_email , expected_conf_username , expected_conf_email = expected
300
+
301
+ os .chdir (user_filesystem / "conf_dir" )
302
+ mock_prompt_user_info = iter (inputs )
303
+ monkeypatch .setattr ("builtins.input" , lambda _ : next (mock_prompt_user_info ))
304
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.CWD_CONFIG_PATH" , Path .cwd () / "diffpyconfig.json" )
305
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.HOME_CONFIG_PATH" , user_filesystem / "diffpyconfig.json" )
306
+
307
+ cli_inputs = ["2.5" , "data.xy" ]
308
+ actual_args = get_args (cli_inputs )
309
+ actual_args = load_user_info (actual_args )
310
+ assert actual_args .username == expected_args_username
311
+ assert actual_args .email == expected_args_email
312
+ with open (Path .cwd () / "diffpyconfig.json" , "r" ) as f :
313
+ config_data = json .load (f )
314
+ assert config_data == {"username" : expected_conf_username , "email" : expected_conf_email }
315
+
316
+
317
+ test_load_user_info_with_conf_file_not_cwd = [
277
318
(
278
319
["" , "" ],
279
- ["input_dir" , "input_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
280
320
[
"good_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
281
321
),
282
322
(
283
323
["new_username" , "" ],
284
- ["input_dir" , "input_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
285
324
[
"new_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
286
325
),
287
326
(
288
327
289
- ["input_dir" , "input_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
290
328
[
"good_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
291
329
),
292
330
(
293
331
[
"new_username" ,
"[email protected] " ],
294
- ["input_dir" , "input_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" , "conf_dir/diffpyconfig.json" ],
295
332
[
"new_username" ,
"[email protected] " ,
"good_username" ,
"[email protected] " ],
296
333
),
297
334
]
298
335
299
336
300
- @pytest .mark .parametrize ("inputs, paths, expected" , params_user_info )
301
- def test_load_user_info (monkeypatch , inputs , paths , expected , user_filesystem ):
302
- os .chdir (user_filesystem / paths [0 ])
337
+ @pytest .mark .parametrize ("inputs, expected" , test_load_user_info_with_conf_file_not_cwd )
338
+ def test_load_user_info_with_conf_file_not_cwd (monkeypatch , inputs , expected , user_filesystem ):
339
+ # test it works when config file is in home directory and not in current directory
340
+ # check username and email are correctly loaded and config file is not modified
341
+ user_config_data = {
"username" :
"good_username" ,
"email" :
"[email protected] " }
342
+ with open (user_filesystem / "diffpyconfig.json" , "w" ) as f :
343
+ json .dump (user_config_data , f )
303
344
expected_args_username , expected_args_email , expected_conf_username , expected_conf_email = expected
345
+
346
+ new_dir = user_filesystem / "new_dir"
347
+ new_dir .mkdir (parents = True , exist_ok = True )
348
+ os .chdir (new_dir )
304
349
mock_prompt_user_info = iter (inputs )
305
350
monkeypatch .setattr ("builtins.input" , lambda _ : next (mock_prompt_user_info ))
306
- monkeypatch .setattr ("diffpy.labpdfproc.user_config.CWD_CONFIG_PATH" , user_filesystem / paths [ 1 ] )
307
- monkeypatch .setattr ("diffpy.labpdfproc.user_config.HOME_CONFIG_PATH" , user_filesystem / paths [ 2 ] )
351
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.CWD_CONFIG_PATH" , Path . cwd () / "diffpyconfig.json" )
352
+ monkeypatch .setattr ("diffpy.labpdfproc.user_config.HOME_CONFIG_PATH" , user_filesystem / "diffpyconfig.json" )
308
353
309
354
cli_inputs = ["2.5" , "data.xy" ]
310
355
actual_args = get_args (cli_inputs )
311
356
actual_args = load_user_info (actual_args )
312
-
313
357
assert actual_args .username == expected_args_username
314
358
assert actual_args .email == expected_args_email
315
- with open (user_filesystem / paths [ 3 ] , "r" ) as f :
359
+ with open (user_filesystem / "diffpyconfig.json" , "r" ) as f :
316
360
config_data = json .load (f )
317
361
assert config_data == {"username" : expected_conf_username , "email" : expected_conf_email }
318
362
@@ -334,7 +378,6 @@ def test_load_user_info_bad(monkeypatch, inputs, msg, user_filesystem):
334
378
input_username , input_email = inputs
335
379
mock_prompt_user_info = iter ([input_username , input_email ])
336
380
monkeypatch .setattr ("builtins.input" , lambda _ : next (mock_prompt_user_info ))
337
- monkeypatch .setattr ("diffpy.labpdfproc.user_config.CWD_CONFIG_PATH" , Path .cwd () / "diffpyconfig.json" )
338
381
monkeypatch .setattr ("diffpy.labpdfproc.user_config.HOME_CONFIG_PATH" , user_filesystem / "diffpyconfig.json" )
339
382
340
383
cli_inputs = ["2.5" , "data.xy" ]
0 commit comments