"""Tests for the ledger contract flowthrough model.""" import pytest from moneyhub.models.ledger_contract_flowthrough import LedgerContractFlowthrough from tests.unit.conftest import insert_mock_data @pytest.mark.parametrize('statement_period_ids, contract_id, expected_amounts', [ ([11], 1001, [100]), ([11, 12, 13], 1001, [100, 400, 0]), ([11], 1002, []), ([11, 12, 13], 1002, [123]), ]) def test_get_latest_balances_for_contract( statement_period_ids, contract_id, expected_amounts): """Test getting current balance for an account.""" insert_mock_data({ 'account': {'account_id': 24601}, 'reference_payment_entity': {'reference_payment_entity_id': 1}, 'reference_sap_profit_center': { 'reference_sap_profit_center_id': 1, 'profit_center': 'UK1234', 'company_code': '1234', 'business_group': 'ORC' }, 'reference_signing_entity': { 'reference_signing_entity_id': 1, 'reference_payment_entity_id': 1, 'reference_sap_profit_center_id': 1, 'company_code': '1234', 'tax_entity_company_code': '1234', 'legal_name': 'Company', 'vat_number': '12341234', 'company_registration_number': '12341234', 'address': None, }, 'contract': [ { 'contract_id': 1001, 'reference_signing_entity_id': 1, }, { 'contract_id': 1002, 'reference_signing_entity_id': 1, }, ], 'statement_period': [ {'statement_period_id': 11, 'statement_period_status': 'closed'}, {'statement_period_id': 12, 'statement_period_status': 'closed'}, {'statement_period_id': 13, 'statement_period_status': 'closed'}, ], 'abacus_event': [ {'abacus_event_id': 1, 'statement_period_id': 11, 'event_name': 'evt'}, {'abacus_event_id': 2, 'statement_period_id': 12, 'event_name': 'evt'}, {'abacus_event_id': 3, 'statement_period_id': 12, 'event_name': 'evt'}, {'abacus_event_id': 4, 'statement_period_id': 13, 'event_name': 'evt'}, {'abacus_event_id': 5, 'statement_period_id': 13, 'event_name': 'evt'}, {'abacus_event_id': 6, 'statement_period_id': 13, 'event_name': 'evt'}, ], 'ledger_contract_flowthrough': [ { 'account_id': 24601, 'contract_id': 1001, 'abacus_event_id': 1, 'currency_code': 'NOK', 'currency_amount': 100, 'previous_balance': 0, 'current_balance': 100, }, { 'account_id': 24601, 'contract_id': 1001, 'abacus_event_id': 2, 'currency_code': 'NOK', 'currency_amount': 100, 'previous_balance': 100, 'current_balance': 200, }, { 'account_id': 24601, 'contract_id': 1001, 'abacus_event_id': 3, 'currency_code': 'NOK', 'currency_amount': 200, 'previous_balance': 200, 'current_balance': 400, }, { 'account_id': 24601, 'contract_id': 1001, 'abacus_event_id': 4, 'currency_code': 'NOK', 'currency_amount': -100, 'previous_balance': 400, 'current_balance': 300, }, { 'account_id': 24601, 'contract_id': 1001, 'abacus_event_id': 5, 'currency_code': 'NOK', 'currency_amount': -300, 'previous_balance': 300, 'current_balance': 0, }, { 'account_id': 24601, 'contract_id': 1002, 'abacus_event_id': 6, 'currency_code': 'JPY', 'currency_amount': 123, 'previous_balance': 0, 'current_balance': 123, }, ], }) result = LedgerContractFlowthrough.get_latest_balances_for_contract( [contract_id], statement_period_ids) assert len(result) == len(expected_amounts) assert [item.amount for item in result] == expected_amounts