@@ -372,6 +372,105 @@ def test_should_send_request_and_print_proper_message_when_error_code_returned_w
372372 assert self .EXPECTED_HEADERS ["X-API-Key" ] != "some_key"
373373
374374
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+
375474class TestHyperparametersList (object ):
376475 URL = "https://services.paperspace.io/experiments/v1/hyperopt/"
377476 COMMAND = ["hyperparameters" , "list" ]
0 commit comments