You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

payment_tests.py 2.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import datetime
  2. from django.test import TestCase
  3. from django.contrib.auth.models import User
  4. from oscar.apps.payment.models import Bankcard
  5. from oscar.apps.payment.forms import (bankcard_type, VISA, MASTERCARD, AMEX, DISCOVER,
  6. BankcardNumberField, BankcardExpiryMonthField, luhn)
  7. class BankcardTest(TestCase):
  8. def test_get_obfuscated_number(self):
  9. bankcard = Bankcard(name="David Winterbottom", number="1000011100000004")
  10. self.assertEquals("XXXX-XXXX-XXXX-0004", bankcard._get_obfuscated_number())
  11. def test_number_is_anonymised_when_saving(self):
  12. user = User.objects.create(username='Dummy user')
  13. expiry_date = datetime.date(year=2012, month=02, day=12)
  14. bankcard = Bankcard.objects.create(name="David Winterbottom", number="1000011100000004", user=user, expiry_date=expiry_date)
  15. self.assertEquals("XXXX-XXXX-XXXX-0004", bankcard.number)
  16. class BankcardTypeTest(TestCase):
  17. fixture_data = {
  18. VISA: ('4111111111111111',),
  19. MASTERCARD: ('5500000000000004',),
  20. DISCOVER: ('6011000000000004',),
  21. AMEX: ('340000000000009',),
  22. }
  23. def test_bankcard_type_sniffer(self):
  24. for type, numbers in self.fixture_data.items():
  25. for n in numbers:
  26. self.assertEquals(type, bankcard_type(n), "%s is a %s" % (n, type))
  27. class BankcardNumberFieldTest(TestCase):
  28. def setUp(self):
  29. self.f = BankcardNumberField()
  30. def test_spaces_are_stipped(self):
  31. self.assertEquals('4111111111111111', self.f.clean(' 4111 1111 1111 1111'))
  32. class LuhnTest(TestCase):
  33. valid_numbers = ['4111111111111111',
  34. '5500000000000004',
  35. '6011000000000004',
  36. '340000000000009']
  37. # Tweaked versions of above valid numbers
  38. invalid_numbers = ['4111111111111110',
  39. '5500000000000009',
  40. '6011000000000000',
  41. '340000000000005']
  42. def test_valid_numbers_pass(self):
  43. for number in self.valid_numbers:
  44. self.assertTrue(luhn(number))
  45. def test_invalid_numbers_fail(self):
  46. for number in self.invalid_numbers:
  47. self.assertFalse(luhn(number))