Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

test_models.py 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import datetime
  2. from decimal import Decimal as D
  3. from django.test import TestCase
  4. from oscar.apps.payment.models import Bankcard, Source
  5. from oscar.core.compat import get_user_model
  6. from oscar.test import factories
  7. class TestBankcard(TestCase):
  8. def test_obfuscates_number_before_saving(self):
  9. bankcard = Bankcard(number="1000011100000004")
  10. bankcard.prepare_for_save()
  11. self.assertEqual("XXXX-XXXX-XXXX-0004", bankcard.number)
  12. def test_determines_bankcard_type(self):
  13. bankcard = Bankcard(number="5500000000000004")
  14. self.assertEqual("Mastercard", bankcard.card_type)
  15. def test_provides_start_month_property(self):
  16. start = datetime.date(day=1, month=1, year=2010)
  17. bankcard = Bankcard(start_date=start)
  18. self.assertEqual("01/10", bankcard.start_month())
  19. def test_provides_end_month_property(self):
  20. end = datetime.date(day=1, month=1, year=2010)
  21. bankcard = Bankcard(expiry_date=end)
  22. self.assertEqual("01/10", bankcard.expiry_month())
  23. def test_bankcard_card_correct_save(self):
  24. # issue #1486
  25. user_klass = get_user_model()
  26. user = user_klass.objects.create_user('_', 'a@a.com', 'pwd')
  27. end = datetime.date(day=1, month=1, year=2010)
  28. bankcard = Bankcard.objects.create(
  29. user=user, number="5500000000000004", expiry_date=end)
  30. saved_bankcard = Bankcard.objects.get(id=bankcard.id)
  31. self.assertEqual('Mastercard', saved_bankcard.card_type)
  32. def test_cardtype_persists_after_save(self):
  33. user = factories.UserFactory()
  34. end = datetime.date(day=1, month=1, year=2010)
  35. bankcard = Bankcard(
  36. user=user, number="5500000000000004", expiry_date=end)
  37. self.assertEqual('Mastercard', bankcard.card_type)
  38. bankcard.save()
  39. self.assertEqual('Mastercard', bankcard.card_type)
  40. reloaded_bankcard = Bankcard.objects.get(id=bankcard.id)
  41. self.assertEqual('Mastercard', reloaded_bankcard.card_type)
  42. class TestSource(TestCase):
  43. def test_calculates_initial_balance_correctly(self):
  44. source = Source(amount_allocated=D('100'))
  45. self.assertEqual(D('100'), source.balance)
  46. def test_calculates_balance_correctly(self):
  47. source = Source(
  48. amount_allocated=D('100'),
  49. amount_debited=D('80'),
  50. amount_refunded=D('20'))
  51. self.assertEqual(
  52. D('100') - D('80') + D('20'), source.balance)
  53. def test_calculates_amount_for_refund_correctly(self):
  54. source = Source(
  55. amount_allocated=D('100'),
  56. amount_debited=D('80'),
  57. amount_refunded=D('20'))
  58. self.assertEqual(
  59. D('80') - D('20'), source.amount_available_for_refund)
  60. class TestAPaymentSource(TestCase):
  61. def setUp(self):
  62. order = factories.create_order()
  63. self.source = factories.SourceFactory(order=order)
  64. def test_allocation_doesnt_error(self):
  65. self.source.allocate(D('100.00'))
  66. def test_debit_doesnt_error(self):
  67. self.source.allocate(D('100.00'))
  68. self.source.debit(D('80.00'))
  69. def test_full_debit_doesnt_error(self):
  70. self.source.allocate(D('100.00'))
  71. self.source.debit()
  72. self.assertEqual(D('0.00'), self.source.balance)
  73. def test_refund_doesnt_error(self):
  74. self.source.allocate(D('100.00'))
  75. self.source.debit(D('80.00'))
  76. self.source.refund(D('50.00'))