def test_upload_and_run_immediately_something_went_wrong( credentials, mocker, project_id, recording, vcr ): """Upload and assign right away did't work.""" runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file", side_effect=upload_file ) if not recording: # Mock get_upload credentials only if using the cassettes, since # we mock the return value. upload_details_response = get_vcr_response( "/api/v2/uploads-post-data/", vcr ) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**upload_details_response), ) mocked_get_sample_sheet = mocker.patch.object( APIClient, "get_sample_sheet", return_value=SampleSheet( **{"meta": {"next": None}, "results": []} ), ) mocked_assign_sample = mocker.patch.object( APIClient, "add_samples_to_project" ) res = runner.invoke( upload, [ "cli_test_data", *credentials, "--run-project-id", project_id, ], ) assert res.exit_code == 0 mocked_get_credentials.assert_called_once() if not recording: mocked_get_upload_details.assert_called_once() mocked_upload_file.assert_called_once() mocked_get_sample_sheet.assert_called() mocked_assign_sample.assert_not_called()
def test_upload_and_run_immediately_slow_response_retry( credentials, mocker, project_id, recording, vcr ): """Upload and assign right away and retry on slow response.""" runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file", side_effect=upload_file ) if not recording: # Mock get_upload credentials only if using the cassettes, since # we mock the return value. upload_details_response = get_vcr_response( "/api/v2/uploads-post-data/", vcr ) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**upload_details_response), ) mocked_get_sample_sheet = mocker.patch.object( APIClient, "get_sample_sheet", side_effect=APIClientTimeout( "Could not connect to the api server" ), ) res = runner.invoke( upload, [ "cli_test_data", *credentials, "--run-project-id", project_id, "--no-progress", ], ) assert res.exit_code == 0 mocked_get_credentials.assert_called_once() mocked_upload_file.assert_called_once() if not recording: mocked_get_upload_details.assert_called_once() assert mocked_get_sample_sheet.call_count == 5 assert "there was an error automatically running them" in res.output
def test_upload_without_progressbar(credentials, mocker, recording, vcr): """Upload do not show the progress bar.""" runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file" ) if not recording: # Mock get_upload_details only if using the cassettes, since # we mock the return value. upload_details_response = get_vcr_response( "/api/v2/uploads-post-data/", vcr ) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**upload_details_response), ) res = runner.invoke( upload, [ "cli_test_data", *credentials, "--no-progress", ], ) assert res.exit_code == 0 mocked_get_credentials.assert_called_once() mocked_upload_file.assert_called_once() assert mocked_upload_file.call_args[1]["no_progress"] if not recording: mocked_get_upload_details.assert_called_once()
def test_upload(credentials, vcr, recording, mocker): """Sanity check that upload is ok.""" runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) if not recording: # Mock get_upload credentials only if using the cassettes, since # we mock the return value. response = get_vcr_response("/api/v2/uploads-post-data/", vcr) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**response), ) mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file", side_effect=upload_file ) res = runner.invoke( upload, ["cli_test_data", *credentials], ) assert not res.exception assert res.exit_code == 0 assert ( "Uploading cli_test_data/test.fastq.gz to gncv://" in res.output ) assert "All files were successfully uploaded." in res.output mocked_get_credentials.assert_called_once() if not recording: mocked_get_upload_details.assert_called_once() mocked_upload_file.assert_called_once() assert not mocked_upload_file.call_args[1]["no_progress"]
def test_upload_and_run_immediately_without_progressbar( credentials, mocker, project_id, recording, vcr ): """Upload and assign right away.""" # pylint: disable=too-many-locals runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file", side_effect=upload_file ) mocked_regular_progress_bar = mocker.patch( "gencove.command.upload.main.get_regular_progress_bar", side_effect=get_regular_progress_bar, ) if not recording: # Mock get_upload credentials only if using the cassettes, since # we mock the return value. upload_details_response = get_vcr_response( "/api/v2/uploads-post-data/", vcr ) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**upload_details_response), ) sample_sheet_response = get_vcr_response( "/api/v2/sample-sheet/", vcr ) mocked_get_sample_sheet = mocker.patch.object( APIClient, "get_sample_sheet", return_value=SampleSheet(**sample_sheet_response), ) project_sample_response = get_vcr_response( "/api/v2/project-samples/", vcr, operator.contains ) mocked_assign_sample = mocker.patch.object( APIClient, "add_samples_to_project", return_value=UploadSamples(**project_sample_response), ) res = runner.invoke( upload, [ "cli_test_data", *credentials, "--run-project-id", project_id, "--no-progress", ], ) assert res.exit_code == 0 mocked_get_credentials.assert_called_once() mocked_upload_file.assert_called_once() mocked_regular_progress_bar.assert_not_called() if not recording: mocked_get_upload_details.assert_called_once() mocked_get_sample_sheet.assert_called() mocked_assign_sample.assert_called_once()
def test_upload_and_run_immediately_with_stdout( credentials, mocker, project_id, recording, vcr ): """Upload and assign right away, then print out the results.""" # pylint: disable=too-many-locals runner = CliRunner() with runner.isolated_filesystem(): os.mkdir("cli_test_data") with open("cli_test_data/test.fastq.gz", "w") as fastq_file: fastq_file.write("AAABBB") mocked_get_credentials = mocker.patch( "gencove.command.upload.main.get_s3_client_refreshable", side_effect=get_s3_client_refreshable, ) if not recording: # Mock get_upload credentials only if using the cassettes, since # we mock the return value. upload_details_response = get_vcr_response( "/api/v2/uploads-post-data/", vcr ) mocked_get_upload_details = mocker.patch.object( APIClient, "get_upload_details", return_value=UploadsPostData(**upload_details_response), ) sample_sheet_response = get_vcr_response( "/api/v2/sample-sheet/", vcr ) mocked_get_sample_sheet = mocker.patch.object( APIClient, "get_sample_sheet", return_value=SampleSheet(**sample_sheet_response), ) project_sample_response = get_vcr_response( "/api/v2/project-samples/", vcr, operator.contains ) mocked_assign_sample = mocker.patch.object( APIClient, "add_samples_to_project", return_value=UploadSamples(**project_sample_response), ) # These mocks needs to be here and without side effect otherwise # a weird behavior on the stdout will happend and the test fails. mocked_upload_file = mocker.patch( "gencove.command.upload.main.upload_file" ) mocker.patch( "gencove.command.upload.main.get_regular_progress_bar", ) res = runner.invoke( upload, [ "cli_test_data", *credentials, "--run-project-id", project_id, "--output", "-", ], ) assert res.exit_code == 0 mocked_get_credentials.assert_called_once() if not recording: mocked_upload_file.assert_called_once() mocked_get_upload_details.assert_called_once() mocked_get_sample_sheet.assert_called() mocked_assign_sample.assert_called_once() # r2 fastq key is not present on the file assert ( project_sample_response["uploads"][0]["fastq"]["r2"] is None ) del project_sample_response["uploads"][0]["fastq"]["r2"] assert ( json.dumps(project_sample_response["uploads"], indent=4) in res.output )