def test_is_valid_can_be_called_repeatedly(self): # This test was added, because we saw many implementations # in which the first call to is_valid() worked, but the # second call failed(). number = Luhn(8739567) self.assertTrue(number.is_valid()) self.assertTrue(number.is_valid())
def test_is_valid_can_be_called_repeatedly(self): # Additional track specific test case # This test was added, because we saw many implementations # in which the first call to is_valid() worked, but the # second call failed(). number = Luhn("055 444 285") self.assertTrue(number.is_valid()) self.assertTrue(number.is_valid())
def test_validation(self): l = Luhn() for num in self.VISA: self.assertTrue(l.is_valid_mod_10(num)) for num in self.MASTERCARD: self.assertTrue(l.is_valid_mod_10(num)) for num in self.DISCOVER: self.assertTrue(l.is_valid_mod_10(num)) for num in self.AMEX: self.assertTrue(l.is_valid_mod_10(num))
def test_invalid(self): l = Luhn() self.assertFalse(l.is_valid_mod_10(20)) self.assertFalse(l.is_valid_mod_10(21)) self.assertFalse(l.is_valid_mod_10(22)) self.assertFalse(l.is_valid_mod_10(23)) self.assertFalse(l.is_valid_mod_10(24)) self.assertFalse(l.is_valid_mod_10(25)) self.assertTrue(l.is_valid_mod_10(26)) self.assertFalse(l.is_valid_mod_10(27)) self.assertFalse(l.is_valid_mod_10(28)) self.assertFalse(l.is_valid_mod_10(29)) self.assertFalse(l.is_valid_mod_10(30))
def test_a_valid_canadian_sin(self): self.assertIs(Luhn("055 444 285").valid(), True)
def test_a_simple_valid_sin_that_remains_valid_if_reversed(self): self.assertIs(Luhn("059").valid(), True)
def test_input_digit_9_is_correctly_converted_to_output_digit_9(self): self.assertIs(Luhn("091").is_valid(), True)
def test_single_zero_with_space_is_invalid(self): self.assertIs(Luhn("0").is_valid(), False)
def test_valid_strings_with_punctuation_included_become_invalid(self): self.assertIs(Luhn("055-444-285").is_valid(), False)
def test_invalid_credit_card(self): self.assertIs(Luhn("8273 1232 7352 0569").is_valid(), False)
def test_generation(self): l = Luhn() generator = l.generate(14) generated_numbers = [generator.next() for i in range(len(self.VALID_14_DIGIT_MOD_10))] self.assertItemsEqual(self.VALID_14_DIGIT_MOD_10, generated_numbers)
def test_using_ascii_value_for_doubled_non_digit_isnot_allowed(self): self.assertIs(Luhn(":9").valid(), False)
def test_create_valid_number1(self): self.assertEqual(1230, Luhn.create(123))
def test_valid_number(self): self.assertTrue(Luhn(8739567).is_valid())
def test_invalid_number(self): self.assertFalse(Luhn(738).is_valid())
def test_ckecksum2(self): self.assertEqual(21, Luhn(201773).checksum())
def test_checksum1(self): self.assertEqual(22, Luhn(4913).checksum())
def test_create_valid_number2(self): self.assertEqual(8739567, Luhn.create(873956))#8739560 = 7769530 =37
def test_create_valid_number2(self): self.assertEqual(8739567, Luhn.create(873956))
def test_a_valid_Canadian_SIN(self): self.assertIs(Luhn("055 444 285").is_valid(), True)
def test_single_digit_strings_can_not_be_valid(self): self.assertIs(Luhn("1").is_valid(), False)
def test_create_valid_number3(self): self.assertEqual(8372637564, Luhn.create(837263756))
def test_invalid_Canadian_SIN(self): self.assertIs(Luhn("055 444 286").is_valid(), False)
def test_addends(self): # uses a Counter to avoid specifying order of return value self.assertEqual(Counter([1, 4, 1, 4, 1]), Counter(Luhn(12121).addends()))
def test_valid_strings_with_a_non_digit_included_become_invalid(self): self.assertIs(Luhn("055a 444 285").is_valid(), False)
def test_clean_should_remove_hyphen(self): cc_number_hyphen = '4539-1488-0343-6467' luhn_instance = Luhn(cc_number_hyphen) luhn_instance.clean() self.assertEqual(luhn_instance.cc_number, '4539148803436467')
def test_valid_strings_with_symbols_included_become_invalid(self): self.assertIs(Luhn("055£ 444$ 285").is_valid(), False)
class LuhnTest(unittest.TestCase): def setUp(self): cc_number = '4539 1488 0343 6467' self.luhn_instance = Luhn(cc_number) def test_clean_should_remove_spaces(self): self.luhn_instance.clean() self.assertEqual(self.luhn_instance.cc_number, '4539148803436467') def test_clean_should_remove_hyphen(self): cc_number_hyphen = '4539-1488-0343-6467' luhn_instance = Luhn(cc_number_hyphen) luhn_instance.clean() self.assertEqual(luhn_instance.cc_number, '4539148803436467') def test_check_selection_seconds_digits(self): self.luhn_instance.clean() self.luhn_instance.select_digits() self.assertEqual(self.luhn_instance.seconds, [6, 6, 4, 0, 8, 1, 3, 4]) def test_check_selection_firsts_digits(self): self.luhn_instance.clean() self.luhn_instance.select_digits() self.assertEqual(self.luhn_instance.firsts, [7, 4, 3, 3, 8, 4, 9, 5]) def test_multiply_by_two_should_subtract_nine_if_greater_than_nine(self): self.luhn_instance.clean() self.luhn_instance.select_digits() self.luhn_instance.double_seconds() self.assertEqual(self.luhn_instance.seconds, [3, 3, 8, 0, 7, 2, 6, 8]) def test_check_should_pass_if_valid_number(self): is_valid = self.luhn_instance.check() self.assertEqual(is_valid, True) def test_check_should_pass_if_invalid_number(self): cc_number = '8273 1232 7352 0569' luhn_instance = Luhn(cc_number) is_valid = luhn_instance.check() self.assertEqual(is_valid, False)
def test_more_than_a_single_zero_is_valid(self): self.assertIs(Luhn("0000 0").is_valid(), True)
def test_check_should_pass_if_invalid_number(self): cc_number = '8273 1232 7352 0569' luhn_instance = Luhn(cc_number) is_valid = luhn_instance.check() self.assertEqual(is_valid, False)
def test_a_single_zero_is_invalid(self): self.assertIs(Luhn("0").valid(), False)
def setUp(self): cc_number = '4539 1488 0343 6467' self.luhn_instance = Luhn(cc_number)
def test_a_simple_valid_sin_that_becomes_invalid_if_reversed(self): self.assertIs(Luhn("59").valid(), True)
def test_valid_number_with_an_even_number_of_digits(self): self.assertIs(Luhn("095 245 88").valid(), True)
def test_valid_number_with_an_odd_number_of_spaces(self): self.assertIs(Luhn("234 567 891 234").valid(), True)
def test_valid_strings_with_non_digit_added_at_end_become_invalid(self): self.assertIs(Luhn("059a").valid(), False)