11import mock
2+ import pytest
23from click .testing import CliRunner
34
4- import paperspace
55from paperspace .cli import cli
66from paperspace .client import default_headers
77from tests import example_responses , MockResponse
88
99
10- class TestListJobs (object ):
11- URL = "https://api.paperspace.io/jobs/getJobs/"
10+ class TestJobs (object ):
11+ EXPECTED_STDOUT_WITH_WRONG_API_TOKEN = "Invalid API token\n "
12+ RESPONSE_JSON_WITH_WRONG_API_TOKEN = {"status" : 400 , "message" : "Invalid API token" }
13+
1214 EXPECTED_HEADERS = default_headers .copy ()
15+ EXPECTED_HEADERS_WITH_CHANGED_API_KEY = default_headers .copy ()
16+ EXPECTED_HEADERS_WITH_CHANGED_API_KEY ["X-API-Key" ] = "some_key"
17+
18+
19+ class TestListJobs (TestJobs ):
20+ URL = "https://api.paperspace.io/jobs/getJobs/"
1321 BASIC_COMMAND = ["jobs" , "list" ]
1422 EXPECTED_RESPONSE_JSON = example_responses .LIST_JOBS_RESPONSE_JSON
1523 EXPECTED_STDOUT = """+----------------+---------------------------+-------------------+----------------+--------------+--------------------------+
@@ -30,11 +38,6 @@ class TestListJobs(object):
3038"""
3139
3240 BASIC_COMMAND_WITH_API_KEY = ["jobs" , "list" , "--apiKey" , "some_key" ]
33- EXPECTED_HEADERS_WITH_CHANGED_API_KEY = paperspace .client .default_headers .copy ()
34- EXPECTED_HEADERS_WITH_CHANGED_API_KEY ["X-API-Key" ] = "some_key"
35-
36- RESPONSE_JSON_WITH_WRONG_API_TOKEN = {"status" : 400 , "message" : "Invalid API token" }
37- EXPECTED_STDOUT_WITH_WRONG_API_TOKEN = "Invalid API token\n "
3841
3942 RESPONSE_JSON_WHEN_NO_JOBS_WERE_FOUND = []
4043 EXPECTED_STDOUT_WHEN_NO_JOBS_WERE_FOUND = "No data found\n "
@@ -169,11 +172,8 @@ def test_should_print_proper_message_when_jobs_list_was_used_with_mutually_exclu
169172 assert result .exit_code == 0
170173
171174
172- class TestJobLogs (object ):
175+ class TestJobLogs (TestJobs ):
173176 URL = "https://logs.paperspace.io/jobs/logs?jobId=some_job_id&line=0"
174- EXPECTED_HEADERS = default_headers .copy ()
175- EXPECTED_HEADERS_WITH_CHANGED_API_KEY = default_headers .copy ()
176- EXPECTED_HEADERS_WITH_CHANGED_API_KEY ["X-API-Key" ] = "some_key"
177177
178178 RESPONSE_JSON_WITH_WRONG_API_TOKEN = {"status" : 400 , "message" : "Invalid API token" }
179179 EXPECTED_RESPONSE_JSON = example_responses .LIST_OF_LOGS_FOR_JOB
@@ -257,3 +257,86 @@ def test_should_print_error_message_when_error_status_code_received_but_no_conte
257257 params = None )
258258 assert result .output == "Error while parsing response data: No JSON\n "
259259 assert result .exit_code == 0
260+
261+
262+ class TestJobArtifactsCommands (TestJobs ):
263+ runner = CliRunner ()
264+ URL = "https://api.paperspace.io"
265+
266+ @mock .patch ("paperspace.client.requests.post" )
267+ def test_should_send_valid_post_request_when_destroying_artifacts_with_files_specified (self , post_patched ):
268+ post_patched .return_value = MockResponse (status_code = 200 )
269+ job_id = "some_job_id"
270+ file_names = "some_file_names"
271+ result = self .runner .invoke (cli .cli , ["jobs" , "artifacts" , "destroy" , job_id , "--files" , file_names , "--apiKey" ,
272+ "some_key" ])
273+
274+ post_patched .assert_called_with ("{}/jobs/{}/artifactsDestroy" .format (self .URL , job_id ),
275+ files = None ,
276+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
277+ json = None ,
278+ params = {"files" : file_names })
279+ assert result .exit_code == 0
280+
281+ @mock .patch ("paperspace.client.requests.post" )
282+ def test_should_send_valid_post_request_when_destroying_artifacts_without_files_specified (self , post_patched ):
283+ post_patched .return_value = MockResponse (status_code = 200 )
284+ job_id = "some_job_id"
285+ result = self .runner .invoke (cli .cli , ["jobs" , "artifacts" , "destroy" , job_id , "--apiKey" , "some_key" ])
286+
287+ post_patched .assert_called_with ("{}/jobs/{}/artifactsDestroy" .format (self .URL , job_id ),
288+ files = None ,
289+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
290+ json = None ,
291+ params = None )
292+ assert result .exit_code == 0
293+
294+ @mock .patch ("paperspace.client.requests.get" )
295+ def test_should_send_send_valid_get_request_and_receive_json_response (self , get_patched ):
296+ get_patched .return_value = MockResponse (status_code = 200 )
297+ job_id = "some_job_id"
298+ result = self .runner .invoke (cli .cli , ["jobs" , "artifacts" , "get" , job_id , "--apiKey" , "some_key" ])
299+
300+ get_patched .assert_called_with ("{}/jobs/artifactsGet" .format (self .URL ),
301+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
302+ json = None ,
303+ params = {"jobId" : job_id })
304+ assert result .exit_code == 0
305+
306+ @mock .patch ("paperspace.client.requests.get" )
307+ def test_should_send_valid_get_request_with_all_parameters_for_a_list_of_artifacts (self , get_patched ):
308+ get_patched .return_value = MockResponse (status_code = 200 )
309+ job_id = "some_job_id"
310+ result = self .runner .invoke (cli .cli ,
311+ ["jobs" , "artifacts" , "list" , job_id , "--apiKey" , "some_key" , "--size" , "--links" ,
312+ "--files" , "foo" ])
313+
314+ get_patched .assert_called_with ("{}/jobs/artifactsList" .format (self .URL ),
315+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
316+ json = None ,
317+ params = {"jobId" : job_id ,
318+ "size" : True ,
319+ "links" : True ,
320+ "files" : "foo" })
321+ assert result .exit_code == 0
322+
323+ @mock .patch ("paperspace.client.requests.get" )
324+ @pytest .mark .parametrize ('option,param' , [("--size" , "size" ),
325+ ("-s" , "size" ),
326+ ("--links" , "links" ),
327+ ("-l" , "links" )])
328+ def test_should_send_valid_get_request_with_valid_param_for_a_list_of_artifacts_for_both_formats_of_param (self ,
329+ get_patched ,
330+ option ,
331+ param ):
332+ get_patched .return_value = MockResponse (status_code = 200 )
333+ job_id = "some_job_id"
334+ result = self .runner .invoke (cli .cli ,
335+ ["jobs" , "artifacts" , "list" , job_id , "--apiKey" , "some_key" ] + [option ])
336+
337+ get_patched .assert_called_with ("{}/jobs/artifactsList" .format (self .URL ),
338+ headers = self .EXPECTED_HEADERS_WITH_CHANGED_API_KEY ,
339+ json = None ,
340+ params = {"jobId" : job_id ,
341+ param : True })
342+ assert result .exit_code == 0
0 commit comments