"""Tests for sales file handlers.""" from unittest.mock import patch from abacus_common_logic.test_utils.helpers import get_json_body, get_message from owsresponse import response from royalties.constants import error from royalties.tests.utils.factories import SalesFileFactory @patch('royalties.blueprints.sales_file.logic') class TestSalesFileHandlers: """Tests for sales file handlers.""" def test_create_sales_file_success(self, mock_logic, fixture_client): """Successful sales file creation response.""" json_body = {'file_name': 'a sales file'} res_body = { 'amount_usd': 0, 'file_name': 'a sales file', 'main_url': '', 'row_count': 0, } mock_response = response.Response(message=res_body, status=201) mock_logic.create_sales_file.return_value = mock_response res = fixture_client.post('/sales-file', json=json_body) assert res.status_code == 201 assert get_json_body(res) == res_body mock_logic.create_sales_file.assert_called_once_with(**json_body) def test_create_sales_file_fails_with_missing_data(self, _, fixture_client): """Failed sales file creation due to missing data.""" json_body = {'file_name': ''} res = fixture_client.post('sales-file', json=json_body) assert res.status_code == 400 message = get_message(res) assert message['file_name'] == [error.ERROR_FIELD_MISSING] def test_update_sales_file_success(self, mock_logic, fixture_client, fresh_db): """Successful update of sales file.""" sales_file = SalesFileFactory.create() json_body = {'amount_usd': 100} res_body = { 'amount_usd': 100, 'file_name': sales_file.file_name, 'main_url': sales_file.main_url, 'row_count': sales_file.row_count, } mock_response = response.Response(message=res_body, status=201) mock_logic.update_sales_file.return_value = mock_response res = fixture_client.put( f'/sales-file/{sales_file.sales_file_id}', json=json_body ) assert res.status_code == 201 assert get_json_body(res) == res_body mock_logic.update_sales_file.assert_called_once() def test_update_fails_with_invalid_data(self, _, fixture_client): """Test updating a sales file fails when data is invalid.""" sales_file = SalesFileFactory.create() json_body = {'amount_usd': ''} res = fixture_client.put( f'/sales-file/{sales_file.sales_file_id}', json=json_body ) assert res.status_code == 400 message = get_message(res) assert message['amount_usd'] == [error.ERROR_INVALID_DECIMAL]