"""Unit tests for LedgerContractAdvanceApplied model.""" from decimal import Decimal from abacus_common_logic.connectors.database import db from sqlalchemy import and_, literal_column, select, table from ledger.models.ledger_contract_advance_applied import LedgerContractAdvanceApplied from tests.utils.factories import LedgerContractAdvanceAppliedFactory def test_create_ledger_contract_advance_applied(mock_event_fixtures): """Test to create a ledger_contract_advance_applied.""" LedgerContractAdvanceApplied.create( abacus_event_id=7, account_id=1, contract_id=1, contract_advance_id=1, statement_period_id=1, advance_amount='-1890.00', advance_currency_code='USD', advance_amount_payee_currency='-1890.00', advance_payee_currency_code='USD', vat_amount='-10.00', withholding_tax_amount='20.00', amount_after_withholding_and_vat='-120.00', vat_amount_payee_currency='-10.00', withholding_tax_amount_payee_currency='20.00', amount_after_withholding_and_vat_payee_currency='-120.00', us_source_income_rate='99.00', exchange_rate='1.001', worksheet_payment_contract_advance_id=1, ) records = LedgerContractAdvanceApplied.query.all() assert len(records) == 1 assert records[0].ledger_contract_advance_applied_id == 1 assert records[0].advance_amount == Decimal('-1890.00') assert records[0].advance_amount_payee_currency == Decimal('-1890.00') assert records[0].vat_amount == Decimal('-10.00') assert records[0].withholding_tax_amount == Decimal('20.00') assert records[0].amount_after_withholding_and_vat == Decimal('-120.00') assert records[0].vat_amount_payee_currency == Decimal('-10.00') assert records[0].withholding_tax_amount_payee_currency == Decimal('20.00') assert records[0].amount_after_withholding_and_vat_payee_currency == Decimal( '-120.00' ) assert records[0].us_source_income_rate == Decimal('99.00') assert records[0].exchange_rate == Decimal('1.001') assert records[0].worksheet_payment_contract_advance_id == 1 def test_get_by_contract_advance_id(mock_event_fixtures): """Test getting a ledger_contract_advance_applied by contract_advance_id.""" contract_advance_id = 1 mock_ledger = LedgerContractAdvanceAppliedFactory.create( contract_advance_id=contract_advance_id ) res = LedgerContractAdvanceApplied.get_by_contract_advance_id(contract_advance_id) assert mock_ledger == res assert mock_ledger.contract_advance_id == res.contract_advance_id assert res.contract_advance_id == contract_advance_id def test_get_by_worksheet_payment_contract_advance_id(mock_event_fixtures): """Test get_by_worksheet_payment_contract_advance_id.""" worksheet_payment_contract_advance_id = 1 abacus_event_id = 15 mock_ledger = LedgerContractAdvanceAppliedFactory.create( worksheet_payment_contract_advance_id=worksheet_payment_contract_advance_id, abacus_event_id=abacus_event_id, ) res = LedgerContractAdvanceApplied.get_by_worksheet_payment_contract_advance_id( worksheet_payment_contract_advance_id, 'commit_to_subledger' ) assert res == mock_ledger assert ( res.worksheet_payment_contract_advance_id == mock_ledger.worksheet_payment_contract_advance_id ) assert ( res.worksheet_payment_contract_advance_id == worksheet_payment_contract_advance_id ) event_id_subquery = ( select([literal_column('abacus_event.abacus_event_id')]) .where( and_( literal_column('abacus_event.event_name') == 'commit_to_subledger', literal_column('abacus_event.target_type') == 'worksheet_payment_contract_advance', literal_column('abacus_event.abacus_event_id') == abacus_event_id, ) ) .select_from(table('abacus_event')) ) assert db.session.execute(event_id_subquery).fetchall() def test_get_by_worksheet_payment_contract_advance_id_incorrect_event( mock_event_fixtures, ): """Test get_by_worksheet_payment_contract_advance_id with incorrect event.""" worksheet_payment_contract_advance_id = 1 abacus_event_id = 14 LedgerContractAdvanceAppliedFactory.create( worksheet_payment_contract_advance_id=worksheet_payment_contract_advance_id, abacus_event_id=abacus_event_id, ) for event_name in ['commit_to_subledger', 'commit_reversal_to_subledger']: res = LedgerContractAdvanceApplied.get_by_worksheet_payment_contract_advance_id( worksheet_payment_contract_advance_id, event_name ) assert res is None event_id_subquery = ( select([literal_column('abacus_event.abacus_event_id')]) .where( and_( literal_column('abacus_event.event_name') == event_name, literal_column('abacus_event.target_type') == 'worksheet_payment_contract_advance', literal_column('abacus_event.abacus_event_id') == abacus_event_id, ) ) .select_from(table('abacus_event')) ) assert not db.session.execute(event_id_subquery).fetchall()