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.

tests.py 2.2KB

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