"""PaymentProcessor unit tests.""" from decimal import Decimal import pytest from payoneer_payments_payout.config import BRANDS_PAYMENT_DESCRIPTIONS from payoneer_payments_payout.ledger_entry_queue import LedgerEntryQueue from payoneer_payments_payout.payment_entry_queue import PaymentEntryQueue from payoneer_payments_payout.payment_processor import PaymentProcessor @pytest.mark.parametrize( 'brand_name, expected_description', BRANDS_PAYMENT_DESCRIPTIONS.items() ) def test_format_account_payment_entry_branded_with_brand( brand_name, expected_description, mock_event, mock_payment_group_payment_accounts ): """Test payment params with branded description and brand name present.""" entry_queue = list() ledger_queue = list() mock_account = mock_payment_group_payment_accounts[0] # Simulate brand name for the account accounts_brands = {mock_account['account_id']: brand_name} processor = PaymentProcessor( mock_event, entry_queue, ledger_queue, accounts_brands ) res = processor._format_account_payment_entry(mock_account) assert res['description'] == expected_description def test_format_account_payment_entry_branded_without_brand( mock_event, mock_payment_group_payment_accounts ): """Test payment params with branded description and no brand name present.""" entry_queue = list() ledger_queue = list() mock_account = mock_payment_group_payment_accounts[0] # No brand name for the account accounts_brands = {} processor = PaymentProcessor( mock_event, entry_queue, ledger_queue, accounts_brands ) res = processor._format_account_payment_entry(mock_account) assert res['description'] == BRANDS_PAYMENT_DESCRIPTIONS[None] def test_format_ledger_entry( mock_event, mock_payment_group_payment_accounts ): """Test creating ledger entries.""" entry_queue = list() ledger_queue = list() mock_account = mock_payment_group_payment_accounts[0] processor = PaymentProcessor(mock_event, entry_queue, ledger_queue) res = processor._format_ledger_entry(mock_account) assert res == [{ 'abacus_event_id': mock_event['abacus_event_id'], 'account_id': int(mock_account['account_id']), 'contract_id': int(mock_account['contracts_payable'][0]['contract_id']), 'currency_code': mock_account['contracts_payable'][0]['currency_code'], 'currency_amount': Decimal('-667686.00'), 'model_type': 'account' }] def test_process_payment_account( mock_event, mock_payment_group_payment_accounts ): """Test payment processor's main process method that queues payment entries.""" entry_queue = PaymentEntryQueue(False) ledger_queue = LedgerEntryQueue() mock_account = mock_payment_group_payment_accounts[0] processor = PaymentProcessor(mock_event, entry_queue, ledger_queue) processor.process(mock_account) assert processor._payment_entries.length == 1