"""Unit test for LedgerAccountContract schemas.""" from datetime import datetime from decimal import Decimal import pytest from marshmallow import ValidationError from ledger.constants.error import ( ERROR_LEDGER_INVALID_CONTRACT_IDS, ERROR_LEDGER_INVALID_STATEMENT_PERIOD_IDS, ) from ledger.schemas import ledger_account_contract def test_payable_balance_schema(): """Test ledger_account_contract payable_balance schema.""" data = { 'account_id': 123, 'currency_code': 'EUR', 'payable_balance': Decimal('2000.00'), } res = ledger_account_contract.LedgerAccountContractPayableBalanceSchema().dump(data) assert res['account_id'] == data['account_id'] assert res['currency_code'] == data['currency_code'] assert res['payable_balance'] == str(data['payable_balance']) def test_ledger_account_contract_current_balance_schema(): """Test LedgerAccountContractCurrentBalanceSchema schema.""" data = { 'ledger_account_contract_id': 1, 'account_id': 12, 'contract_id': 123, 'currency_code': 'EUR', 'current_balance': Decimal('2000.00'), } res = ledger_account_contract.LedgerAccountContractCurrentBalanceSchema().dump(data) assert res['ledger_account_contract_id'] == data['ledger_account_contract_id'] assert res['account_id'] == data['account_id'] assert res['contract_id'] == data['contract_id'] assert res['currency_code'] == data['currency_code'] assert res['current_balance'] == str(data['current_balance']) def test_ledger_account_contract_list_schema(): """Test LedgerAccountContractListSchema.""" mock_ledger_account_contract_list = { 'ledger_account_contract_id': 1, 'account_id': 123, 'accounting_period_id': 1, 'amount': '320260.99', 'contract_id': 44, 'currency_code': 'USD', 'date': datetime(2024, 5, 17), 'ending_balance': '320260.99', 'opening_balance': '0.00', 'transaction_type': 'accounting_run', } result = ledger_account_contract.LedgerAccountContractListSchema().dump( mock_ledger_account_contract_list ) assert result == { 'ledger_account_contract_id': 1, 'account_id': 123, 'accounting_period_id': 1, 'amount': '320260.99', 'contract_id': 44, 'currency_code': 'USD', 'date': '2024-05-17', 'ending_balance': '320260.99', 'opening_balance': '0.00', 'transaction_type': 'accounting_run', } def test_ledger_account_contract_filter_schema(): """Test LedgerAccountContractFilterSchema schema.""" mock_filter_params = { 'contract_ids': '1,2,3', 'event_names': 'send_payments,commit_royalties', 'limit': 25, 'offset': 0, 'statement_period_ids': '307,308,309', } res = ledger_account_contract.LedgerAccountContractFilterSchema().load( mock_filter_params ) assert res == mock_filter_params def test_ledger_account_contract_filter_invalid_statement_period(): """Test LedgerAccountContractFilterSchema schema validation for statement_period.""" mock_filter_params = { 'event_names': 'send_payments,commit_royalties', 'limit': 25, 'offset': 0, 'statement_period_ids': '307,3%8,Test', } with pytest.raises(ValidationError) as exc_info: res = ledger_account_contract.LedgerAccountContractFilterSchema().load( mock_filter_params ) assert res is None assert exc_info.value.args[0] == { '_schema': [ERROR_LEDGER_INVALID_STATEMENT_PERIOD_IDS] } def test_ledger_account_contract_filter_invalid_contract_ids(): """Test LedgerAccountContractFilterSchema schema validation for contract_ids.""" mock_filter_params = { 'event_names': 'send_payments,commit_royalties', 'limit': 25, 'offset': 0, 'contract_ids': '1,12$,Test', } with pytest.raises(ValidationError) as exc_info: res = ledger_account_contract.LedgerAccountContractFilterSchema().load( mock_filter_params ) assert res is None assert exc_info.value.args[0] == {'_schema': [ERROR_LEDGER_INVALID_CONTRACT_IDS]}