"""Tests for Payment Minimum logic.""" from unittest.mock import call, patch from payment.constants.constants import PAYMENT_METHODS from payment.logic import payment_minimum as logic from payment.models.generic import Items from tests.utils.factories import PaymentMinimumFactory @patch('payment.logic.payment_minimum.PaymentMinimum') def test_get_payment_minimum(mock_model): """Test getting payment minimum by currency code.""" mock_minimum = PaymentMinimumFactory.build(currency_code='USD') mock_model.get_by_currency_code.return_value = mock_minimum result = logic.get_payment_minimum('usd') assert result == mock_minimum assert mock_model.get_by_currency_code.call_args_list == [call('USD')] @patch('payment.logic.payment_minimum.PaymentMinimum') def test_list_payment_minimums(mock_model): """Test listing all payment minimums returns items with total_count.""" mock_minimums = PaymentMinimumFactory.build_batch(3) mock_model.get_all.return_value = mock_minimums result = logic.list_payment_minimums() assert result == Items(items=mock_minimums, total_count=3) mock_model.get_all.assert_called_once() @patch('payment.logic.payment_minimum.PaymentMinimum') def test_bulk_update_payment_minimums(mock_model): """Test updating one or more payment minimums and returning all.""" usd_mins = PaymentMinimumFactory.create() cad_mins = PaymentMinimumFactory.create(currency_code='CAD') aud_mins = PaymentMinimumFactory.create(currency_code='AUD') mock_model.get_by_id_or_error.return_value = None mock_model.bulk_update.return_value = None mock_model.get_all.return_value = [usd_mins, cad_mins, aud_mins] minimums = [ {'payment_minimum_id': usd_mins.payment_minimum_id, 'check_amount': '100.00'}, { 'payment_minimum_id': cad_mins.payment_minimum_id, 'wire_transfer_amount': '100.00', }, ] result = logic.bulk_update_payment_minimums(minimums) assert result == [usd_mins, cad_mins, aud_mins] assert mock_model.bulk_update.called assert mock_model.get_all.called def test_get_payment_minimums_by_currency(): """Test to get payment minimum amounts grouped by currency code.""" cad = PaymentMinimumFactory.create(currency_code='CAD') aud = PaymentMinimumFactory.create(currency_code='AUD') result = logic.get_payment_minimums_by_currency() assert result == { 'CAD': { PAYMENT_METHODS.CHECK: str(cad.check_amount), PAYMENT_METHODS.WIRE_TRANSFER: str(cad.wire_transfer_amount), PAYMENT_METHODS.WESTERN_UNION: str(cad.western_union_amount), }, 'AUD': { PAYMENT_METHODS.CHECK: str(aud.check_amount), PAYMENT_METHODS.WIRE_TRANSFER: str(aud.wire_transfer_amount), PAYMENT_METHODS.WESTERN_UNION: str(aud.western_union_amount), }, }