credit_card_validations 1.5.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +4 -1
- data/Changelog.md +85 -0
- data/README.md +32 -9
- data/Rakefile +4 -4
- data/credit_card_validations.gemspec +2 -2
- data/lib/active_model/credit_card_number_validator.rb +67 -2
- data/lib/credit_card_validations.rb +25 -17
- data/lib/credit_card_validations/detector.rb +110 -27
- data/lib/credit_card_validations/factory.rb +66 -0
- data/lib/credit_card_validations/luhn.rb +5 -0
- data/lib/credit_card_validations/mmi.rb +18 -13
- data/lib/credit_card_validations/string.rb +11 -1
- data/lib/credit_card_validations/version.rb +1 -1
- data/lib/data/brands.yaml +238 -0
- data/spec/active_model_spec.rb +69 -0
- data/spec/credit_card_validations_spec.rb +168 -0
- data/spec/factory_spec.rb +21 -0
- data/{test → spec}/fixtures/invalid_cards.yml +0 -0
- data/{test → spec}/fixtures/valid_cards.yml +1 -0
- data/spec/models/credit_card.rb +19 -0
- data/spec/string_spec.rb +43 -0
- data/{test → spec}/test_helper.rb +5 -4
- metadata +25 -17
- data/lib/credit_card_validations/card_rules.rb +0 -84
- data/test/credit_card_validations_test.rb +0 -151
- data/test/models/any_credit_card.rb +0 -6
- data/test/models/credit_card.rb +0 -5
@@ -1,151 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
require 'yaml'
|
3
|
-
|
4
|
-
class CreditCardValidationsTest < MiniTest::Test
|
5
|
-
|
6
|
-
|
7
|
-
def initialize name
|
8
|
-
super name
|
9
|
-
@test_valid_numbers = YAML.load_file File.join(File.dirname(__FILE__), 'fixtures/valid_cards.yml')
|
10
|
-
@test_invalid_numbers = YAML.load_file File.join(File.dirname(__FILE__), 'fixtures/invalid_cards.yml')
|
11
|
-
end
|
12
|
-
|
13
|
-
|
14
|
-
def test_card_luhn
|
15
|
-
@test_valid_numbers.each do |brand, card_numbers|
|
16
|
-
if has_luhn_check_rule?(brand)
|
17
|
-
card_numbers.each do |number|
|
18
|
-
assert luhn_valid?(detector(number).number), "#{number} failed luhn"
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
def test_card_if_credit_card_valid
|
26
|
-
@test_valid_numbers.each do |brand, card_numbers|
|
27
|
-
card_numbers.each do |card_number|
|
28
|
-
assert detector(card_number).send("#{brand}?"), "#{card_number} is #{brand}"
|
29
|
-
assert_equal brand, detector(card_number).brand, "#{card_number} detects as #{brand}"
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_card_if_credit_card_invalid
|
35
|
-
@test_invalid_numbers.each do |card_number|
|
36
|
-
assert !detector(card_number).valid?
|
37
|
-
assert_nil detector(card_number).brand
|
38
|
-
@test_valid_numbers.keys.each do |brand|
|
39
|
-
assert !detector(card_number).send("#{brand}?")
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def test_card_brand_detection_with_restriction
|
45
|
-
@test_valid_numbers.slice(:visa, :mastercard).each do |key, value|
|
46
|
-
assert_equal key, detector(value.first).brand(:visa, :mastercard)
|
47
|
-
end
|
48
|
-
|
49
|
-
@test_valid_numbers.except(:visa, :mastercard).each do |key, value|
|
50
|
-
assert_nil detector(value.first).brand(:visa, :mastercard)
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
def test_card_valid_method
|
55
|
-
@test_valid_numbers.each do |key, value|
|
56
|
-
value.each do |card_number|
|
57
|
-
assert detector(card_number).valid?(key)
|
58
|
-
assert detector(card_number).valid?
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
def test_card_particular_brand_valid
|
64
|
-
assert !detector(@test_valid_numbers[:visa].first).valid?(:mastercard)
|
65
|
-
assert !detector(@test_valid_numbers[:mastercard].first).valid?(:visa)
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_card_particular_brands_valid
|
69
|
-
assert detector(@test_valid_numbers[:visa].first).valid?(:mastercard, :visa)
|
70
|
-
assert !detector(@test_valid_numbers[:visa].first).valid?(:mastercard, :amex)
|
71
|
-
end
|
72
|
-
|
73
|
-
#add rules which were not present before
|
74
|
-
def test_card_valid_after_rules_added
|
75
|
-
voyager_test_card_number = '869926275400212'
|
76
|
-
assert !detector(voyager_test_card_number).valid?
|
77
|
-
CreditCardValidations::Detector.add_rule(:voyager, 15, '86')
|
78
|
-
assert detector(voyager_test_card_number).valid?
|
79
|
-
assert_equal :voyager, detector(voyager_test_card_number).brand
|
80
|
-
assert detector(voyager_test_card_number).voyager?
|
81
|
-
assert !detector(voyager_test_card_number).visa?
|
82
|
-
assert !detector(voyager_test_card_number).mastercard?
|
83
|
-
end
|
84
|
-
|
85
|
-
def test_active_model_any_validator
|
86
|
-
cc = AnyCreditCard.new
|
87
|
-
cc.number='1'
|
88
|
-
assert !cc.valid?
|
89
|
-
cc.number = @test_valid_numbers[:mastercard].first
|
90
|
-
assert cc.valid?
|
91
|
-
end
|
92
|
-
|
93
|
-
def test_active_model_validator
|
94
|
-
cc = CreditCard.new
|
95
|
-
cc.number = @test_valid_numbers[:maestro].first
|
96
|
-
assert cc.valid?
|
97
|
-
|
98
|
-
cc = CreditCard.new
|
99
|
-
cc.number = @test_valid_numbers[:mastercard].first
|
100
|
-
assert !cc.valid?
|
101
|
-
assert cc.errors[:number].include?(cc.errors.generate_message(:number, :invalid))
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
def test_string_extension
|
106
|
-
assert !@test_valid_numbers[:mastercard].first.respond_to?(:credit_card_brand)
|
107
|
-
assert !@test_valid_numbers[:mastercard].first.respond_to?(:valid_credit_card_brand?)
|
108
|
-
require 'credit_card_validations/string'
|
109
|
-
assert_equal @test_valid_numbers[:mastercard].first.credit_card_brand, :mastercard
|
110
|
-
assert @test_valid_numbers[:mastercard].first.valid_credit_card_brand?(:mastercard)
|
111
|
-
assert !@test_valid_numbers[:mastercard].first.valid_credit_card_brand?(:visa, :amex)
|
112
|
-
end
|
113
|
-
|
114
|
-
def test_call_luhn
|
115
|
-
d = detector(@test_valid_numbers[:unionpay].first)
|
116
|
-
d.expects(:valid_luhn?).once
|
117
|
-
assert !d.valid?(:visa)
|
118
|
-
|
119
|
-
d.expects(:valid_luhn?).once
|
120
|
-
assert d.valid?(:visa, :unionpay)
|
121
|
-
end
|
122
|
-
|
123
|
-
def test_skip_luhn
|
124
|
-
d = detector(@test_valid_numbers[:unionpay].first)
|
125
|
-
d.expects(:valid_luhn?).never
|
126
|
-
assert d.valid?(:unionpay)
|
127
|
-
d.expects(:valid_luhn?).never
|
128
|
-
assert d.valid?(:unionpay, :visa)
|
129
|
-
end
|
130
|
-
|
131
|
-
def test_mmi
|
132
|
-
d = detector(@test_valid_numbers[:visa].first)
|
133
|
-
assert_equal d.issuer_category, CreditCardValidations::Mmi::ISSUER_CATEGORIES[d.number[0]]
|
134
|
-
end
|
135
|
-
|
136
|
-
protected
|
137
|
-
|
138
|
-
def luhn_valid?(number)
|
139
|
-
CreditCardValidations::Luhn.valid?(number)
|
140
|
-
end
|
141
|
-
|
142
|
-
def detector(number)
|
143
|
-
CreditCardValidations::Detector.new(number)
|
144
|
-
end
|
145
|
-
|
146
|
-
|
147
|
-
def has_luhn_check_rule?(brand)
|
148
|
-
CreditCardValidations::Detector.rules[brand].any? { |rule| !rule[:skip_luhn] }
|
149
|
-
end
|
150
|
-
|
151
|
-
end
|