"""Functional tests for ledger_contract_advance_applied.""" from decimal import Decimal from ledger.constants.error import ERROR_LEDGER_CONTRACT_ADVANCE_APPLIED_DOES_NOT_EXIST from ledger.models.ledger_contract_advance_applied import LedgerContractAdvanceApplied from tests.utils.factories import LedgerContractAdvanceAppliedFactory def test_create_contract_advance_ledger_entries_worksheet( mock_event_fixtures, fixture_client ): """Test to create a contract_advance ledger entries with worksheet.""" contract_advance_id = 1 mock_post_request = { 'abacus_event_id': 7, 'account_id': 1, 'contract_id': 1, 'statement_period_id': 1, 'worksheet_payment_contract_advance_id': 1, 'advance_amount': '100.00', 'advance_currency_code': 'USD', 'account_payment_currency_code': 'AUD', 'exchange_rate': '1.042014', 'vat_amount': '10.00', 'withholding_tax_amount': '-10.00', 'amount_after_withholding_and_vat': '100.00', 'us_source_income_rate': '90.00', 'advance_amount_payee_currency': '113.02', 'amount_after_withholding_and_vat_payee_currency': '112.02', 'withholding_tax_amount_payee_currency': '-8.02', 'vat_amount_payee_currency': '10.02', } res = fixture_client.post( f'/ledger-contract-advance-applied/contract-advance/{contract_advance_id}/paid/', json=mock_post_request, ) records = LedgerContractAdvanceApplied.query.all() assert len(records) == 1 assert res.status_code == 201 assert records[0].advance_amount == Decimal('-100.00') assert records[0].advance_amount_payee_currency == Decimal('-113.02') assert records[0].vat_amount == Decimal('-10.00') assert records[0].withholding_tax_amount == Decimal('10.00') assert records[0].amount_after_withholding_and_vat == Decimal('-100.00') assert records[0].vat_amount_payee_currency == Decimal('-10.02') assert records[0].withholding_tax_amount_payee_currency == Decimal('8.02') assert records[0].amount_after_withholding_and_vat_payee_currency == Decimal( '-112.02' ) assert records[0].us_source_income_rate == Decimal('90.00') def test_get_ledger_contract_advance_applied_by_id(mock_event_fixtures, fixture_client): """Test GET /ledger-contract-advance-applied/.""" ledger = LedgerContractAdvanceAppliedFactory.create() ledger_contract_advance_applied_id = ledger.ledger_contract_advance_applied_id res = fixture_client.get( f'/ledger-contract-advance-applied/{ledger_contract_advance_applied_id}' ) assert res.status_code == 200 assert res.json == { 'ledger_contract_advance_applied_id': ledger.ledger_contract_advance_applied_id, 'abacus_event_id': ledger.abacus_event_id, 'account_id': ledger.account_id, 'contract_id': ledger.contract_id, 'contract_advance_id': ledger.contract_advance_id, 'statement_period_id': ledger.statement_period_id, 'advance_amount': str(ledger.advance_amount), 'advance_currency_code': ledger.advance_currency_code, 'advance_amount_payee_currency': str(ledger.advance_amount_payee_currency), 'advance_payee_currency_code': ledger.advance_payee_currency_code, 'vat_amount': str(ledger.vat_amount), 'vat_amount_payee_currency': str(ledger.vat_amount_payee_currency), 'withholding_tax_amount': str(ledger.withholding_tax_amount), 'withholding_tax_amount_payee_currency': str( ledger.withholding_tax_amount_payee_currency ), 'amount_after_withholding_and_vat': str( ledger.amount_after_withholding_and_vat ), 'amount_after_withholding_and_vat_payee_currency': str( ledger.amount_after_withholding_and_vat_payee_currency ), 'us_source_income_rate': str(ledger.us_source_income_rate), 'exchange_rate': ledger.exchange_rate, 'worksheet_payment_contract_advance_id': ledger.worksheet_payment_contract_advance_id, } def test_get_by_contract_advance_success(mock_event_fixtures, fixture_client): """Test GET /ledger-contract-advance-applied/contract-advance/.""" contract_advance_id = 1 mock_ledger = LedgerContractAdvanceAppliedFactory.create( contract_advance_id=contract_advance_id ) res = fixture_client.get( f'/ledger-contract-advance-applied/contract-advance/{contract_advance_id}' ) assert res.status_code == 200 assert res.json == { 'ledger_contract_advance_applied_id': mock_ledger.ledger_contract_advance_applied_id, 'abacus_event_id': mock_ledger.abacus_event_id, 'account_id': mock_ledger.account_id, 'contract_id': mock_ledger.contract_id, 'contract_advance_id': mock_ledger.contract_advance_id, 'statement_period_id': mock_ledger.statement_period_id, 'advance_amount': str(mock_ledger.advance_amount), 'advance_currency_code': mock_ledger.advance_currency_code, 'advance_amount_payee_currency': str(mock_ledger.advance_amount_payee_currency), 'advance_payee_currency_code': mock_ledger.advance_payee_currency_code, 'vat_amount': str(mock_ledger.vat_amount), 'vat_amount_payee_currency': str(mock_ledger.vat_amount_payee_currency), 'withholding_tax_amount': str(mock_ledger.withholding_tax_amount), 'withholding_tax_amount_payee_currency': str( mock_ledger.withholding_tax_amount_payee_currency ), 'amount_after_withholding_and_vat': str( mock_ledger.amount_after_withholding_and_vat ), 'amount_after_withholding_and_vat_payee_currency': str( mock_ledger.amount_after_withholding_and_vat_payee_currency ), 'us_source_income_rate': str(mock_ledger.us_source_income_rate), 'exchange_rate': mock_ledger.exchange_rate, 'worksheet_payment_contract_advance_id': mock_ledger.worksheet_payment_contract_advance_id, } def test_get_by_contract_advance_failure(mock_event_fixtures, fixture_client): """Test GET /ledger-contract-advance-applied/contract-advance/.""" LedgerContractAdvanceAppliedFactory.create(contract_advance_id=1) res = fixture_client.get('/ledger-contract-advance-applied/contract-advance/123') assert res.status_code == 404 assert ( res.json.get('message') == ERROR_LEDGER_CONTRACT_ADVANCE_APPLIED_DOES_NOT_EXIST ) def test_get_ledger_contract_advance_applied_by_worksheet_success( mock_event_fixtures, fixture_client ): """Test GET /ledger-contract-advance-applied/worksheet//debit.""" worksheet_payment_contract_advance_id = 1 mock_ledger = LedgerContractAdvanceAppliedFactory.create( worksheet_payment_contract_advance_id=worksheet_payment_contract_advance_id, abacus_event_id=15, exchange_rate=Decimal('1.0001'), ) res = fixture_client.get( f'/ledger-contract-advance-applied/worksheet' f'/{worksheet_payment_contract_advance_id}/debit' ) assert res.status_code == 200 assert res.json == { 'ledger_contract_advance_applied_id': mock_ledger.ledger_contract_advance_applied_id, 'abacus_event_id': mock_ledger.abacus_event_id, 'account_id': mock_ledger.account_id, 'contract_id': mock_ledger.contract_id, 'contract_advance_id': mock_ledger.contract_advance_id, 'statement_period_id': mock_ledger.statement_period_id, 'advance_amount': str(mock_ledger.advance_amount), 'advance_currency_code': mock_ledger.advance_currency_code, 'advance_amount_payee_currency': str(mock_ledger.advance_amount_payee_currency), 'advance_payee_currency_code': mock_ledger.advance_payee_currency_code, 'vat_amount': str(mock_ledger.vat_amount), 'vat_amount_payee_currency': str(mock_ledger.vat_amount_payee_currency), 'withholding_tax_amount': str(mock_ledger.withholding_tax_amount), 'withholding_tax_amount_payee_currency': str( mock_ledger.withholding_tax_amount_payee_currency ), 'amount_after_withholding_and_vat': str( mock_ledger.amount_after_withholding_and_vat ), 'amount_after_withholding_and_vat_payee_currency': str( mock_ledger.amount_after_withholding_and_vat_payee_currency ), 'us_source_income_rate': str(mock_ledger.us_source_income_rate), 'exchange_rate': str(mock_ledger.exchange_rate), 'worksheet_payment_contract_advance_id': mock_ledger.worksheet_payment_contract_advance_id, }