def test_clean_charge():
    # Amount should be a positive number
    payment = Mock()
    amount = Decimal("0.00")
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    # Payment cannot be charged
    payment = Mock(can_charge=Mock(return_value=False))
    amount = Decimal("1.00")
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    # Amount is larger than payment's total
    payment = Mock(
        can_capture=Mock(return_value=True),
        total=Decimal("1.00"),
        captured_amount=Decimal("0.00"),
    )
    amount = Decimal("2.00")
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    amount = Decimal("2.00")
    payment = Mock(
        can_charge=Mock(return_value=True),
        total=amount,
        captured_amount=Decimal("0.00"),
    )
    clean_charge(payment, amount)
def test_clean_charge():
    # Amount should be a positive number
    payment = Mock()
    amount = Decimal('0.00')
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    # Payment cannot be charged
    payment = Mock(can_charge=Mock(return_value=False))
    amount = Decimal('1.00')
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    # Amount is larger than payment's total
    payment = Mock(
        can_capture=Mock(return_value=True),
        total=Decimal('1.00'),
        captured_amount=Decimal('0.00'))
    amount = Decimal('2.00')
    with pytest.raises(PaymentError):
        clean_charge(payment, amount)

    amount = Decimal('2.00')
    payment = Mock(
        can_charge=Mock(return_value=True),
        total=amount,
        captured_amount=Decimal('0.00'))
    clean_charge(payment, amount)