credit_card_validations 1.5.1 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|