"""Unit tests for WorksheetAdjustment handler.""" from unittest.mock import call, patch from owsresponse import response from werkzeug.datastructures import ImmutableMultiDict from abacus_worksheet.schemas.worksheet_adjustment import ( WorksheetAdjustmentAccountsListSchema, WorksheetAdjustmentAndDetailSchema, WorksheetAdjustmentContractsListSchema, WorksheetAdjustmentSchema, ) @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.get_by_statement_period_adjustment_file_id' ) def test_get_worksheet_adjustments( mock_logic, mock_worksheet_adjustment_data, fixture_client ): """Test to get worksheet adjustments by statement_period_adjustment_file_id.""" worksheet_adjustment_data = WorksheetAdjustmentSchema().dump( mock_worksheet_adjustment_data ) mock_response = {'items': [worksheet_adjustment_data], 'total_count': 1} statement_period_adjustment_file_id = 1 mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( f'/worksheet-adjustments/statement-period-adjustment-file/{statement_period_adjustment_file_id}/?limit=2&offset=0' ) assert res.status_code == 200 assert res.json == mock_response mock_logic.assert_called_once() @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.create_worksheet_adjustments_and_details' ) def test_create_worksheet_adjustments_and_adjustment_details( mock_logic, fixture_client ): """Test to create worksheet_adjustment and worksheet_adjustment_detail records.""" mock_logic.return_value = response.Response(message='OK', status=201) mock_post_request_body = { 'statement_period_adjustment_file_id': 1, 'abacus_event_id': 1, } res = fixture_client.post( '/worksheet-adjustments/import/', json=mock_post_request_body ) assert res.status_code == 201 mock_logic.assert_called_once_with(**mock_post_request_body) @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.soft_delete_worksheet_adjustments_and_details' ) def test_soft_delete_worksheet_adjustments_and_details_by_file_id( mock_logic, fixture_client ): """Test to soft delete worksheet_adjustment and detail records.""" mock_logic.return_value = response.Response(status=204) res = fixture_client.delete( '/worksheet-adjustments/statement-period-adjustment-file/1' ) assert res.status_code == 204 @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.get_worksheet_adjustments_and_details_by_file_id' ) def test_get_worksheet_adjustments_and_details( mock_logic, mock_worksheet_adjustment_and_detail_data, fixture_client ): """Test to get worksheet adjustments and details by file_id.""" worksheet_adjustment_data = WorksheetAdjustmentAndDetailSchema().dump( mock_worksheet_adjustment_and_detail_data ) mock_response = {'items': [worksheet_adjustment_data], 'total_count': 1} statement_period_adjustment_file_id = 1 mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( '/worksheet-adjustment/statement-period-adjustment-file/' + f'{statement_period_adjustment_file_id}/adjustments-and-details?limit=2&offset=0' ) assert res.status_code == 200 assert res.json == mock_response mock_logic.assert_called_once_with( 1, ImmutableMultiDict([('limit', '2'), ('offset', '0')]) ) @patch( 'abacus_worksheet.blueprints.worksheet_adjustment.get_pending_worksheet_adjustments' ) def test_get_pending_worksheet_adjustments( mock_logic, mock_worksheet_adjustment_and_detail_data, fixture_client ): """Test to get pending worksheet adjustments.""" worksheet_adjustment_data = WorksheetAdjustmentAndDetailSchema().dump( mock_worksheet_adjustment_and_detail_data ) mock_response = {'items': [worksheet_adjustment_data], 'total_count': 1} mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( '/worksheet-adjustments/pending' '?limit=10&offset=0&statement_period_id=1&reference_payment_entity_id=2' ) assert res.status_code == 200 assert res.json == mock_response assert mock_logic.call_args_list == [ call( ImmutableMultiDict( [ ('limit', '10'), ('offset', '0'), ('statement_period_id', '1'), ('reference_payment_entity_id', '2'), ] ) ) ] @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.get_worksheet_adjustments_contracts_by_file_id' ) def test_get_worksheet_adjustments_contracts_by_file_id( mock_logic, mock_worksheet_adjustment_data, fixture_client ): """Test to get worksheet adjustments contracts by statement_period_adjustment_file_id.""" mock_contract_data = WorksheetAdjustmentContractsListSchema().dump( mock_worksheet_adjustment_data ) mock_response = {'items': [mock_contract_data], 'total_count': 1} statement_period_adjustment_file_id = 1 mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( f'/worksheet-adjustments/statement-period-adjustment-file/{statement_period_adjustment_file_id}/contracts?limit=2&offset=0' ) assert res.status_code == 200 assert res.json == mock_response mock_logic.assert_called_once() @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.get_worksheet_adjustments_accounts_by_file_id' ) def test_get_worksheet_adjustments_accounts_by_file_id( mock_logic, mock_worksheet_adjustment_data, fixture_client ): """Test to get worksheet adjustments accounts by statement_period_adjustment_file_id.""" mock_account_data = WorksheetAdjustmentAccountsListSchema().dump( mock_worksheet_adjustment_data ) mock_response = {'items': [mock_account_data], 'total_count': 1} statement_period_adjustment_file_id = 1 mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( f'/worksheet-adjustments/statement-period-adjustment-file/{statement_period_adjustment_file_id}/accounts?limit=2&offset=0' ) assert res.status_code == 200 assert res.json == mock_response mock_logic.assert_called_once() @patch( 'abacus_worksheet.blueprints.worksheet_adjustment' '.get_adjustments_by_period_and_type_id' ) def test_get_adjustments_by_period_and_type( mock_logic, mock_worksheet_adjustment_data, fixture_client ): """Test to get worksheet adjustments by period and type.""" worksheet_adjustment_data = WorksheetAdjustmentSchema().dump( mock_worksheet_adjustment_data ) mock_response = { 'items': [worksheet_adjustment_data], 'total_count': 1, 'currency_agnostic_total_amount': '100.00', } period_id = 1 type_id = 2 mock_logic.return_value = response.Response(message=mock_response, status=200) res = fixture_client.get( f'/worksheet-adjustments/period/{period_id}/type/{type_id}?limit=2&offset=0' ) assert res.status_code == 200 assert res.json == mock_response mock_logic.assert_called_once()