def test_stream_mets_from_disconnected_storage(mocker): custom_error_message = "Error connecting to the storage service" mock_amclient_details( mocker, side_effect=requests.exceptions.ConnectionError(custom_error_message)) response = helpers.stream_mets_from_storage_service( transfer_name="mets_transfer", sip_uuid="11111111-1111-1111-1111-111111111111") assert response[CONTENT_TYPE] == CONTENT_JSON err = json.loads(response.content) assert err.get(SUCCESS) is False assert custom_error_message in err.get(MESSAGE) assert response.status_code == RESPONSE_503
def test_stream_mets_from_storage_no_file(mocker, tmp_path): custom_error_message = "Rsync failed with status 23: sending incremental file list" mock_response = requests.Response() mock_response._content = custom_error_message mock_response.status_code = 500 mock_amclient_details(mocker, return_value=mock_response) response = helpers.stream_mets_from_storage_service( transfer_name="mets_transfer", sip_uuid="22222222-2222-2222-2222-222222222222") assert response[CONTENT_TYPE] == CONTENT_JSON err = json.loads(response.content) assert err.get(SUCCESS) is False assert custom_error_message in err.get(MESSAGE) assert response.status_code == RESPONSE_500
def aip_mets_file_download(request, uuid): """Download an individual AIP METS file.""" es_client = es.get_client() try: aip = es.get_aip_data(es_client, uuid, fields="name") except IndexError: # TODO: 404 settings for the project do not display this to the user (only DEBUG). raise Http404( _("The AIP package containing the requested METS cannot be found") ) transfer_name = aip["_source"]["name"] return helpers.stream_mets_from_storage_service( transfer_name=transfer_name, sip_uuid=uuid )
def test_stream_mets_from_storage_success(mocker, mets_hdr, tmpdir): sip_uuid = "33333333-3333-3333-3333-333333333333" mets_file = "METS.{}.xml".format(sip_uuid) mock_response = requests.Response() mock_response.headers = { CONTENT_DISPOSITION: "attachment; filename={};".format(mets_file) } mock_response.status_code = RESPONSE_200 mock_response.raw = mets_stream(tmpdir, mets_hdr) mock_amclient_details(mocker, return_value=mock_response) response = helpers.stream_mets_from_storage_service( transfer_name="mets_transfer", sip_uuid=sip_uuid) assert response.get(CONTENT_TYPE) == CONTENT_XML assert response.get( CONTENT_DISPOSITION) == "attachment; filename={};".format(mets_file) response_text = get_streaming_response(response.streaming_content) assert response_text == mets_hdr