"""Test exchange rate api requests.""" import base64 import pytest from royalties.constants.constants import EXCHANGE_RATE_BULK_FIELD from royalties.constants.error import ERROR_CSV_EMPTY from royalties.tests.integration.conftest import ( create_accounting_period_if_not_exist, ows_royalties_api_client, ) @pytest.mark.jira('ACC-2261') def test_upload_no_data(basic_headers, statement_period_fixtures): """Test handling an empty post request.""" statement_period_id = create_accounting_period_if_not_exist( basic_headers, statement_period_fixtures )['statement_period_id'] ows_royalties_client = ows_royalties_api_client(basic_headers) response = ows_royalties_client.post_exchange_rate_upload( {'statement_period_id': statement_period_id, 'exchange_rates': ''} ) assert response.status_code == 400 response_json = response.json() assert response_json['message'] == ERROR_CSV_EMPTY @pytest.mark.jira('ACC-2261') def test_upload_valid_data(basic_headers, statement_period_fixtures): """Test uploading a valid file.""" statement_period_id = create_accounting_period_if_not_exist( basic_headers, statement_period_fixtures )['statement_period_id'] ows_royalties_client = ows_royalties_api_client(basic_headers) data = {} from_curr = 'USD' to_curr = 'EUR' data['statement_period_id'] = statement_period_id data[EXCHANGE_RATE_BULK_FIELD] = base64.b64encode( 'period_id\tfrom\t{}\n{}\t{}\t.9'.format( to_curr, statement_period_id, from_curr ).encode() ).decode() response = ows_royalties_client.post_exchange_rate_upload(data) assert response.status_code == 201 response_json = response.json() assert response_json['errors'] == [] response_get = ows_royalties_client.get_exchange_rates( statement_period_id, params={'format': 'txt'} ) assert response_get.status_code == 400 assert response_get.json()['message'] == 'Invalid output format' response_get = ows_royalties_client.get_exchange_rates( statement_period_id, params={'format': 'json'} ) assert response_get.status_code == 200 assert response_get.json()[0]['from_currency_code'] == from_curr assert response_get.json()[0]['to_currency_code'] == to_curr