@@ -372,6 +372,105 @@ def test_should_send_request_and_print_proper_message_when_error_code_returned_w
372
372
assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
373
373
374
374
375
+ class TestStartHyperparameters (object ):
376
+ URL = "https://services.paperspace.io/experiments/v1/hyperopt/e0ucpl6adyfgg/start/"
377
+ COMMAND = [
378
+ "hyperparameters" , "start" ,
379
+ "--id" , "e0ucpl6adyfgg" ,
380
+ ]
381
+
382
+ EXPECTED_HEADERS = paperspace .client .default_headers .copy ()
383
+ EXPECTED_HEADERS_WITH_CHANGED_API_KEY = paperspace .client .default_headers .copy ()
384
+ EXPECTED_HEADERS_WITH_CHANGED_API_KEY ["X-API-Key" ] = "some_key"
385
+ EXPECTED_RESPONSE = {"message" : "success" }
386
+ EXPECTED_STDOUT = "Hyperparameter tuning started\n "
387
+
388
+ EXPECTED_RESPONSE_JSON_WITH_ERROR = {"error" : "Could not find cluster meeting requirements" }
389
+ EXPECTED_STDOUT_WHEN_ERROR_RECEIVED = "Could not find cluster meeting requirements\n "
390
+
391
+ COMMAND_WITH_API_KEY_PARAMETER_USED = [
392
+ "hyperparameters" , "start" ,
393
+ "--id" , "e0ucpl6adyfgg" ,
394
+ "--apiKey" , "some_key" ,
395
+ ]
396
+ EXPECTED_RESPONSE_WHEN_WRONG_API_KEY_WAS_USED = {"details" : "Incorrect API Key provided" , "error" : "Forbidden" }
397
+ EXPECTED_STDOUT_WHEN_WRONG_API_KEY_WAS_USED = "Forbidden\n Incorrect API Key provided\n "
398
+
399
+ @mock .patch ("paperspace.client.requests.put" )
400
+ def test_should_send_get_request_and_print_proper_message_when_start_command_was_used (self , post_patched ):
401
+ post_patched .return_value = MockResponse (self .EXPECTED_RESPONSE , 201 )
402
+
403
+ runner = CliRunner ()
404
+ result = runner .invoke (cli .cli , self .COMMAND )
405
+
406
+ post_patched .assert_called_once_with (self .URL ,
407
+ headers = self .EXPECTED_HEADERS ,
408
+ json = None ,
409
+ params = None )
410
+
411
+ assert result .output == self .EXPECTED_STDOUT
412
+ assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
413
+
414
+ @mock .patch ("paperspace.client.requests.put" )
415
+ def test_should_replace_api_key_in_headers_when_api_key_parameter_was_used (self , post_patched ):
416
+ post_patched .return_value = MockResponse (self .EXPECTED_RESPONSE , 201 )
417
+
418
+ runner = CliRunner ()
419
+ result = runner .invoke (cli .cli , self .COMMAND_WITH_API_KEY_PARAMETER_USED )
420
+
421
+ post_patched .assert_called_once_with (self .URL ,
422
+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
423
+ json = None ,
424
+ params = None )
425
+
426
+ assert result .output == self .EXPECTED_STDOUT
427
+ assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
428
+
429
+ @mock .patch ("paperspace.client.requests.put" )
430
+ def test_should_print_proper_message_when_error_message_received (self , put_patched ):
431
+ put_patched .return_value = MockResponse (self .EXPECTED_RESPONSE_JSON_WITH_ERROR , 400 )
432
+
433
+ runner = CliRunner ()
434
+ result = runner .invoke (cli .cli , self .COMMAND )
435
+
436
+ put_patched .assert_called_once_with (self .URL ,
437
+ headers = self .EXPECTED_HEADERS ,
438
+ json = None ,
439
+ params = None )
440
+
441
+ assert result .output == self .EXPECTED_STDOUT_WHEN_ERROR_RECEIVED
442
+
443
+ @mock .patch ("paperspace.client.requests.put" )
444
+ def test_should_print_proper_message_when_wrong_api_key_was_used (self , put_patched ):
445
+ put_patched .return_value = MockResponse (self .EXPECTED_RESPONSE_WHEN_WRONG_API_KEY_WAS_USED , 403 )
446
+
447
+ runner = CliRunner ()
448
+ result = runner .invoke (cli .cli , self .COMMAND )
449
+
450
+ put_patched .assert_called_once_with (self .URL ,
451
+ headers = self .EXPECTED_HEADERS ,
452
+ json = None ,
453
+ params = None )
454
+
455
+ assert result .output == self .EXPECTED_STDOUT_WHEN_WRONG_API_KEY_WAS_USED
456
+ assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
457
+
458
+ @mock .patch ("paperspace.client.requests.put" )
459
+ def test_should_send_request_and_print_proper_message_when_error_code_returned_without_json_data (self , put_patched ):
460
+ put_patched .return_value = MockResponse (status_code = 500 )
461
+
462
+ runner = CliRunner ()
463
+ result = runner .invoke (cli .cli , self .COMMAND )
464
+
465
+ put_patched .assert_called_once_with (self .URL ,
466
+ headers = self .EXPECTED_HEADERS ,
467
+ json = None ,
468
+ params = None )
469
+
470
+ assert result .output == "Unknown error while starting hyperparameter tuning\n "
471
+ assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
472
+
473
+
375
474
class TestHyperparametersList (object ):
376
475
URL = "https://services.paperspace.io/experiments/v1/hyperopt/"
377
476
COMMAND = ["hyperparameters" , "list" ]
0 commit comments