| 12345678910111213141516171819202122232425262728293031323334353637383940 | from django.test import TestCase
from oscar.apps.payment import bankcards
class TestBankCardValidation(TestCase):
    fixture_data = {
        bankcards.VISA: ('4111111111111111',),
        bankcards.MASTERCARD: ('5500000000000004',),
        bankcards.DISCOVER: ('6011000000000004',),
        bankcards.AMEX: ('340000000000009',),
        None: ('1000010000000007',)  # Magic number
    }
    valid_numbers = [
        '4111111111111111',
        '5500000000000004',
        '6011000000000004',
        '340000000000009']
    invalid_numbers = [
        '4111111111111110',
        '5500000000000009',
        '6011000000000000',
        '340000000000005']
    def test_bankcard_type_sniffing(self):
        for expected_bankcard_type, numbers in self.fixture_data.items():
            for number in numbers:
                sniffed_bankcard_type = bankcards.bankcard_type(number)
                self.assertEqual(expected_bankcard_type, sniffed_bankcard_type)
    def test_valid_numbers(self):
        for number in self.valid_numbers:
            self.assertTrue(bankcards.luhn(number))
    def test_invalid_numbers(self):
        for number in self.invalid_numbers:
            self.assertFalse(bankcards.luhn(number))
 |