| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 | import datetime
from decimal import Decimal as D
from django.test import TestCase
from oscar.apps.payment.models import Bankcard, Source
from oscar.core.compat import get_user_model
from oscar.test import factories
class TestBankcard(TestCase):
    def test_obfuscates_number_before_saving(self):
        bankcard = Bankcard(number="1000011100000004")
        bankcard.prepare_for_save()
        self.assertEqual("XXXX-XXXX-XXXX-0004", bankcard.number)
    def test_determines_bankcard_type(self):
        bankcard = Bankcard(number="5500000000000004")
        self.assertEqual("Mastercard", bankcard.card_type)
    def test_provides_start_month_property(self):
        start = datetime.date(day=1, month=1, year=2010)
        bankcard = Bankcard(start_date=start)
        self.assertEqual("01/10", bankcard.start_month())
    def test_provides_end_month_property(self):
        end = datetime.date(day=1, month=1, year=2010)
        bankcard = Bankcard(expiry_date=end)
        self.assertEqual("01/10", bankcard.expiry_month())
    def test_bankcard_card_correct_save(self):
        # issue #1486
        user_klass = get_user_model()
        user = user_klass.objects.create_user('_', 'a@a.com', 'pwd')
        end = datetime.date(day=1, month=1, year=2010)
        bankcard = Bankcard.objects.create(
            user=user, number="5500000000000004", expiry_date=end)
        saved_bankcard = Bankcard.objects.get(id=bankcard.id)
        self.assertEqual('Mastercard', saved_bankcard.card_type)
    def test_cardtype_persists_after_save(self):
        user = factories.UserFactory()
        end = datetime.date(day=1, month=1, year=2010)
        bankcard = Bankcard(
            user=user, number="5500000000000004", expiry_date=end)
        self.assertEqual('Mastercard', bankcard.card_type)
        bankcard.save()
        self.assertEqual('Mastercard', bankcard.card_type)
        reloaded_bankcard = Bankcard.objects.get(id=bankcard.id)
        self.assertEqual('Mastercard', reloaded_bankcard.card_type)
class TestSource(TestCase):
    def test_calculates_initial_balance_correctly(self):
        source = Source(amount_allocated=D('100'))
        self.assertEqual(D('100'), source.balance)
    def test_calculates_balance_correctly(self):
        source = Source(
            amount_allocated=D('100'),
            amount_debited=D('80'),
            amount_refunded=D('20'))
        self.assertEqual(
            D('100') - D('80') + D('20'), source.balance)
    def test_calculates_amount_for_refund_correctly(self):
        source = Source(
            amount_allocated=D('100'),
            amount_debited=D('80'),
            amount_refunded=D('20'))
        self.assertEqual(
            D('80') - D('20'), source.amount_available_for_refund)
class TestAPaymentSource(TestCase):
    def setUp(self):
        order = factories.create_order()
        self.source = factories.SourceFactory(order=order)
    def test_allocation_doesnt_error(self):
        self.source.allocate(D('100.00'))
    def test_debit_doesnt_error(self):
        self.source.allocate(D('100.00'))
        self.source.debit(D('80.00'))
    def test_full_debit_doesnt_error(self):
        self.source.allocate(D('100.00'))
        self.source.debit()
        self.assertEqual(D('0.00'), self.source.balance)
    def test_refund_doesnt_error(self):
        self.source.allocate(D('100.00'))
        self.source.debit(D('80.00'))
        self.source.refund(D('50.00'))
 |