"""Functional testcases for ledger_contract_flowthrough.""" from decimal import Decimal from ledger.constants.error import ( ERROR_INVALID_MODEL_TYPE, ERROR_INVALID_SYNTAX, ERROR_MIN_RECORDS, ) from ledger.models.ledger_contract_flowthrough import LedgerContractFlowthrough from ledger.models.ledger_deposit import LedgerDeposit def test_bulk_create_ledger_contract_flowthrough_entries( fixture_client, mock_event_fixtures ): """Test bulk ledger insertion.""" mock_bulk_ledgers_body = [ { 'currency_amount': 44.44, 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'contract', 'account_id': 50, 'contract_id': 1, }, { 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'deposit', 'remaining_amount': 0.004444444444444444, 'rounded_amount': 44.44, 'contract_id': 1, 'account_id': 50, }, { 'currency_amount': 12.8999, 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'contract', 'account_id': 50, 'contract_id': 2, }, { 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'deposit', 'remaining_amount': 0.000100000000, 'rounded_amount': 12.90, 'contract_id': 1, 'account_id': 50, }, ] res = fixture_client.post( '/ledger-contract-flowthrough/bulk', json=mock_bulk_ledgers_body ) assert res.status_code == 201 contract_flowthrough_ledger_entries = LedgerContractFlowthrough.query.all() assert len(contract_flowthrough_ledger_entries) == 2 assert contract_flowthrough_ledger_entries[0].currency_code == 'USD' assert contract_flowthrough_ledger_entries[0].abacus_event_id == 1 assert contract_flowthrough_ledger_entries[0].previous_balance == Decimal('0.00') assert contract_flowthrough_ledger_entries[0].currency_amount == Decimal('44.44') assert contract_flowthrough_ledger_entries[1].currency_code == 'USD' assert contract_flowthrough_ledger_entries[1].abacus_event_id == 1 assert contract_flowthrough_ledger_entries[1].previous_balance == Decimal('0.00') assert contract_flowthrough_ledger_entries[1].currency_amount == Decimal('12.90') deposit_ledger_entries = LedgerDeposit.query.all() assert deposit_ledger_entries[0].contract_id == 1 assert deposit_ledger_entries[0].account_id == 50 assert deposit_ledger_entries[0].abacus_event_id == 1 assert deposit_ledger_entries[0].currency_code == 'USD' assert deposit_ledger_entries[0].rounded_amount == Decimal('44.44') assert deposit_ledger_entries[0].remaining_amount == Decimal('0.004444444444444444') assert deposit_ledger_entries[1].contract_id == 1 assert deposit_ledger_entries[1].account_id == 50 assert deposit_ledger_entries[1].abacus_event_id == 1 assert deposit_ledger_entries[1].currency_code == 'USD' assert deposit_ledger_entries[1].rounded_amount == Decimal('12.90') assert deposit_ledger_entries[1].remaining_amount == Decimal('0.000100000000') def test_bulk_ledger_creation_empty_request_body(fixture_client): """Test throws an error for empty request body.""" res = fixture_client.post('/ledger-contract-flowthrough/bulk', json=[]) assert res.status_code == 400 assert res.json['message'] == ERROR_MIN_RECORDS def test_bulk_ledger_contract_flowthrough_entries_error( mock_bulk_ledgers_body, fixture_client ): """Test throws an error for invalid request body.""" res = fixture_client.post( '/ledger-contract-flowthrough/bulk', json=mock_bulk_ledgers_body[0] ) assert res.status_code == 400 assert res.json['message'] == ERROR_INVALID_SYNTAX def test_bulk_ledger_creation_invalid_currency(fixture_client): """Test throws an error for invalid currency code.""" mock_bulk_ledgers_body = [ { 'currency_amount': 44.44, 'currency_code': 'Test', 'abacus_event_id': 1, 'model_type': 'contract', 'account_id': 50, 'contract_id': 1, }, { 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'deposit', 'remaining_amount': 0.004444444444444444, 'rounded_amount': 44.44, 'contract_id': 1, 'account_id': 50, }, ] res = fixture_client.post( '/ledger-contract-flowthrough/bulk', json=mock_bulk_ledgers_body ) assert res.status_code == 400 assert res.json['message'] == 'unrecognized currency code' def test_bulk_ledger_creation_invalid_model_type(fixture_client): """Test throws an error for invalid model type.""" mock_bulk_ledgers_body = [ { 'currency_amount': 44.44, 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'account', 'account_id': 50, 'contract_id': 1, }, { 'currency_code': 'USD', 'abacus_event_id': 1, 'model_type': 'deposit', 'remaining_amount': 0.004444444444444444, 'rounded_amount': 44.44, 'contract_id': 1, 'account_id': 50, }, ] res = fixture_client.post( '/ledger-contract-flowthrough/bulk', json=mock_bulk_ledgers_body ) assert res.status_code == 400 assert res.json['message'] == ERROR_INVALID_MODEL_TYPE.format(ledger_type='account')