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.
@@ -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
@@ -1,6 +0,0 @@
1
- class AnyCreditCard
2
- attr_accessor :number
3
- include ActiveModel::Validations
4
- validates :number, presence: true, credit_card_number: true
5
- end
6
-
@@ -1,5 +0,0 @@
1
- class CreditCard
2
- attr_accessor :number
3
- include ActiveModel::Validations
4
- validates :number, credit_card_number: {brands: [:amex, :maestro]}
5
- end