vat_id_validator 0.0.2
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 +7 -0
- data/.cane +3 -0
- data/.gitignore +17 -0
- data/.rspec +2 -0
- data/.yardopts +2 -0
- data/Fudgefile +5 -0
- data/Gemfile +3 -0
- data/Guardfile +5 -0
- data/LICENSE +23 -0
- data/README.md +37 -0
- data/Rakefile +6 -0
- data/lib/active_model/validations/vat_id_validator.rb +89 -0
- data/lib/rspec/matchers/validate_vat_id_of.rb +49 -0
- data/lib/vat_id_validator.rb +7 -0
- data/lib/vat_id_validator/version.rb +5 -0
- data/spec/active_model/validations/vat_id_validator_spec.rb +944 -0
- data/spec/rspec/matchers/validate_vat_id_of_spec.rb +55 -0
- data/spec/spec_helper.rb +21 -0
- data/spec/support/active_model_test_class.rb +21 -0
- data/vat_id_validator.gemspec +31 -0
- metadata +206 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ecc7209a52f4b1c5e1adfa7d690465d17d609c8d
|
4
|
+
data.tar.gz: 8669e92aad4b428409e17e514c1f69c2ede1565b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7a89c19e89adfb022ee15bd024bd97040459a97dd2b9c9bce747c6e894b62180565f58a5f567f8004250796dd92c898439867c59090f522a8f7cd8510996824b
|
7
|
+
data.tar.gz: 283e16f0d41c6dc96728c7485b60089a64799375ba275fd76d71bfd703bc7ea5ac26cf23eba47998cf55f49ad90e4316f3df79a0694d4c6ee944f1c45984082a
|
data/.cane
ADDED
data/.gitignore
ADDED
data/.rspec
ADDED
data/.yardopts
ADDED
data/Fudgefile
ADDED
data/Gemfile
ADDED
data/Guardfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
Copyright (c) 2013 Sage
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
+
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Vat-Id validator
|
2
|
+
|
3
|
+
A validator for VAT-ID based on ActiveModel::EachValidator.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'vat_id_validator'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install vat_id_validator
|
18
|
+
|
19
|
+
## Usage Example
|
20
|
+
|
21
|
+
Your model must respond to #errors with an instance of ActiveModel::Errors. Then include ActiveModel::Validations:
|
22
|
+
|
23
|
+
class FinancialSettings
|
24
|
+
extend ActiveModel::Naming
|
25
|
+
include ActiveModel::Validations
|
26
|
+
|
27
|
+
attr_reader :errors
|
28
|
+
attr_accessor :tax_number
|
29
|
+
|
30
|
+
def initialize
|
31
|
+
@errors = ActiveModel::Errors.new(self)
|
32
|
+
end
|
33
|
+
|
34
|
+
validates :tax_number, :vat_id => true
|
35
|
+
|
36
|
+
# ...
|
37
|
+
end
|
data/Rakefile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'active_model/validator'
|
3
|
+
require 'active_support/core_ext/object/blank'
|
4
|
+
|
5
|
+
# Namespace module.
|
6
|
+
module ActiveModel
|
7
|
+
# Namespace module.
|
8
|
+
module Validations
|
9
|
+
# Validator for VAT-ID based on ActiveModel::EachValidator.
|
10
|
+
class VatIdValidator < ::ActiveModel::EachValidator
|
11
|
+
|
12
|
+
# All Countries with the vat pattern
|
13
|
+
VAT_PATTERNS = {
|
14
|
+
'AL' => /\AAL(J|K)[0-9]{8}[A-Z]\Z/, # Albania
|
15
|
+
'AR' => /\AAR[0-9]{11}\Z/, # Argentina
|
16
|
+
'AT' => /\AATU[0-9]{8}\Z/, # Austria
|
17
|
+
'AU' => /\AAU[0-9]{9}\Z/, # Australia
|
18
|
+
'BE' => /\ABE0[0-9]{9}\Z/, # Belgium
|
19
|
+
'BG' => /\ABG[0-9]{9,10}\Z/, # Bulgaria
|
20
|
+
'BO' => /\ABO/, # Bolivia
|
21
|
+
'BR' => /\ABR[0-9]{8}\Z/, # Brasil
|
22
|
+
'BY' => /\ABY[0-9]{9}\Z/, # Belarus
|
23
|
+
'CA' => /\ACA[0-9]{15}\Z/, # Canada
|
24
|
+
'CH' => /\ACHE[0-9]{9}(MWST|TVA|IVA)\Z/, # Switzerland
|
25
|
+
'CL' => /\ACL[0-9]{9}\Z/, # Chile
|
26
|
+
'CO' => /\ACO[0-9]{10}\Z/, # Colombia
|
27
|
+
'CR' => /\ACR/, # Costa Rica
|
28
|
+
'CY' => /\ACY[0-9]{8}[A-Z]\Z/, # Cyprus
|
29
|
+
'CZ' => /\ACZ[0-9]{8,10}\Z/, # Czech Republic
|
30
|
+
'DE' => /\ADE[0-9]{9}\Z/, # Germany
|
31
|
+
'DK' => /\ADK[0-9]{8}\Z/, # Denmark
|
32
|
+
'DO' => /\ADO/, # Dominican Republic
|
33
|
+
'EC' => /\AEC[0-9]{13}\Z/, # Ecuador
|
34
|
+
'EE' => /\AEE[0-9]{9}\Z/, # Estonia
|
35
|
+
'EL' => /\AEL[0-9]{9}\Z/, # Greece
|
36
|
+
'ES' => /\AES([A-Z][0-9]{8}|[0-9]{8}[A-Z]|[A-Z][0-9]{7}[A-Z])\Z/, # Spain
|
37
|
+
'FI' => /\AFI[0-9]{8}\Z/, # Finland
|
38
|
+
'FR' => /\AFR[A-Z0-9]{2}[0-9]{9}\Z/, # France
|
39
|
+
'GB' => /\AGB([0-9]{9}|[0-9]{12}|(HA|GD)[0-9]{3})\Z/, # United Kingdom
|
40
|
+
'GT' => /\AGT[0-9]{8}\Z/, # Guatemala
|
41
|
+
'HN' => /\AHN/, # Honduras
|
42
|
+
'HR' => /\AHR[0-9]{11}\Z/, # Croatia
|
43
|
+
'HU' => /\AHU[0-9]{8}\Z/, # Hungary
|
44
|
+
'IE' => /\AIE([0-9][A-Z][0-9]{5}|[0-9]{7})[A-Z]\Z/, # Ireland
|
45
|
+
'IT' => /\AIT[0-9]{11}\Z/, # Italy
|
46
|
+
'LT' => /\ALT([0-9]{9}|[0-9]{12})\Z/, # Lithuania
|
47
|
+
'LU' => /\ALU[0-9]{8}\Z/, # Luxembourg
|
48
|
+
'LV' => /\ALV[0-9]{11}\Z/, # Latvia
|
49
|
+
'MT' => /\AMT[0-9]{8}\Z/, # Malta
|
50
|
+
'MX' => /\AMX[0-9]{12}\Z/, # Mexico
|
51
|
+
'NI' => /\ANI/, # Nicaragua
|
52
|
+
'NL' => /\ANL[0-9]{9}B[0-9]{2}\Z/, # Netherlands
|
53
|
+
'NO' => /\ANO[0-9]{9}\Z/, # Norway
|
54
|
+
'PA' => /\APA/, # Panama
|
55
|
+
'PE' => /\APE/, # Peru
|
56
|
+
'PH' => /\APH[0-9]{12}\Z/, # Philippines
|
57
|
+
'PL' => /\APL[0-9]{10}\Z/, # Poland
|
58
|
+
'PT' => /\APT[0-9]{9}\Z/, # Portugal
|
59
|
+
'PY' => /\APY/, # Paraguay
|
60
|
+
'RO' => /\ARO[1-9][0-9]{1,9}\Z/, # Romania
|
61
|
+
'RU' => /\ARU[0-9]{10}\Z/, # Russia
|
62
|
+
'SE' => /\ASE[0-9]{10}01\Z/, # Sweden
|
63
|
+
'SI' => /\ASI[0-9]{8}\Z/, # Slovenia
|
64
|
+
'SK' => /\ASK[0-9]{10}\Z/, # Slovakia
|
65
|
+
'SM' => /\ASM[0-9]{5}\Z/, # San Marino
|
66
|
+
'SV' => /\ASV/, # El Salvador
|
67
|
+
'TR' => /\ATR[0-9]{10}\Z/, # Turkey
|
68
|
+
'UA' => /\AUA[0-9]{12}\Z/, # Ukraine
|
69
|
+
'UY' => /\AUY/, # Uruguay
|
70
|
+
'VE' => /\AVE(J|G|V|E)[0-9]{9}\Z/ # Venezuela
|
71
|
+
}
|
72
|
+
|
73
|
+
# Validates an attribute of a record if it contains a valid VAT-ID.
|
74
|
+
#
|
75
|
+
# If it does not, an error is added for that attribute to the record's errors array.
|
76
|
+
#
|
77
|
+
# @param [#errors] record The record which is validated.
|
78
|
+
# @param [Symbol] attribute The record's attribute which is validated.
|
79
|
+
# @param [String, nil] value The value which is supposed to be a VAT-ID.
|
80
|
+
def validate_each(record, attribute, value)
|
81
|
+
if value.present?
|
82
|
+
value = value.gsub(/[^A-z0-9]/, '').upcase
|
83
|
+
country_code = value[0..1]
|
84
|
+
record.errors.add(attribute, :invalid) unless value =~ VAT_PATTERNS[country_code]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module VatIdValidator # :nodoc:
|
2
|
+
module Matchers # :nodoc:
|
3
|
+
# Ensure that the attribute is a vat id.
|
4
|
+
#
|
5
|
+
# Examples:
|
6
|
+
# it { should validate_vat_id_of(:tax_number) }
|
7
|
+
#
|
8
|
+
def validate_vat_id_of(expected)
|
9
|
+
ValidateVatIdOf.new(expected)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Represents the rspec matcher for the vat_id validator
|
13
|
+
class ValidateVatIdOf
|
14
|
+
def initialize(expected)
|
15
|
+
@expected = expected
|
16
|
+
end
|
17
|
+
|
18
|
+
# Checks if the given Objects has a validator for the expected attribute
|
19
|
+
#
|
20
|
+
# @param [Object] actual the object with the expected attribute
|
21
|
+
# @return [boolean]
|
22
|
+
def matches?(actual)
|
23
|
+
validators = actual._validators[@expected]
|
24
|
+
validators.select { |val| val.kind_of?(ActiveModel::Validations::VatIdValidator) }.count > 0
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns a error message for should matches
|
28
|
+
#
|
29
|
+
# @return [String] the error message
|
30
|
+
def failure_message_for_should
|
31
|
+
"expected that #{@expected} would be a vat id"
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns a error message for should_not matches
|
35
|
+
#
|
36
|
+
# @return [String] the error message
|
37
|
+
def failure_message_for_should_not
|
38
|
+
"expected that #{@expected} would not be a vat id"
|
39
|
+
end
|
40
|
+
|
41
|
+
# Returns the description for the matcher
|
42
|
+
#
|
43
|
+
# @return [String] the description
|
44
|
+
def description
|
45
|
+
"be a vat id"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,944 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe ActiveModel::Validations::VatIdValidator do
|
5
|
+
subject { ActiveModelTestClass.new }
|
6
|
+
|
7
|
+
shared_examples_for 'tax_number with 8 digits' do
|
8
|
+
it 'should be valid with 8 digits' do
|
9
|
+
subject.tax_number = prefix + '12345678'
|
10
|
+
subject.should be_valid
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should not be valid with less then 8 digits' do
|
14
|
+
subject.tax_number = prefix + '1234567'
|
15
|
+
subject.should_not be_valid
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should not be valid with more then 8 digits' do
|
19
|
+
subject.tax_number = prefix + '123456789'
|
20
|
+
subject.should_not be_valid
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
shared_examples_for 'tax_number with 9 digits' do
|
25
|
+
it 'should be valid with 9 digits' do
|
26
|
+
subject.tax_number = prefix + '123456789'
|
27
|
+
subject.should be_valid
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'should not be valid with less then 9 digits' do
|
31
|
+
subject.tax_number = prefix + '12345678'
|
32
|
+
subject.should_not be_valid
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'should not be valid with more then 9 digits' do
|
36
|
+
subject.tax_number = prefix + '1234567890'
|
37
|
+
subject.should_not be_valid
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
shared_examples_for 'tax_number with 10 digits' do
|
42
|
+
it 'should be valid with 10 digits' do
|
43
|
+
subject.tax_number = prefix + '1234567890'
|
44
|
+
subject.should be_valid
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should not be valid with less then 10 digits' do
|
48
|
+
subject.tax_number = prefix + '123456789'
|
49
|
+
subject.should_not be_valid
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'should not be valid with more then 10 digits' do
|
53
|
+
subject.tax_number = prefix + '12345678901'
|
54
|
+
subject.should_not be_valid
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
shared_examples_for 'tax_number with 11 digits' do
|
59
|
+
it 'should be valid with 11 digits' do
|
60
|
+
subject.tax_number = prefix + '12345678901'
|
61
|
+
subject.should be_valid
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'should not be valid with less then 11 digits' do
|
65
|
+
subject.tax_number = prefix + '1234567890'
|
66
|
+
subject.should_not be_valid
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'should not be valid with more then 11 digits' do
|
70
|
+
subject.tax_number = prefix + '123456789012'
|
71
|
+
subject.should_not be_valid
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
shared_examples_for 'tax_number with 12 digits' do
|
76
|
+
it 'should be valid with 12 digits' do
|
77
|
+
subject.tax_number = prefix + '123456789012'
|
78
|
+
subject.should be_valid
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'should not be valid with less then 12 digits' do
|
82
|
+
subject.tax_number = prefix + '12345678901'
|
83
|
+
subject.should_not be_valid
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should not be valid with more then 12 digits' do
|
87
|
+
subject.tax_number = prefix + '1234567890123'
|
88
|
+
subject.should_not be_valid
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
shared_examples_for 'tax_number with only prefix check' do
|
93
|
+
it 'should be valid with the given prefix' do
|
94
|
+
subject.tax_number = prefix + '123ABC'
|
95
|
+
subject.should be_valid
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'should be valid without tax_number' do
|
100
|
+
should be_valid
|
101
|
+
end
|
102
|
+
|
103
|
+
it 'should not be valid without prefix' do
|
104
|
+
subject.tax_number = '123456789'
|
105
|
+
subject.should_not be_valid
|
106
|
+
end
|
107
|
+
|
108
|
+
it 'should ignore special character and spaces for validation (formatting)' do
|
109
|
+
subject.tax_number = 'DE 12-345.678/9'
|
110
|
+
subject.should be_valid
|
111
|
+
end
|
112
|
+
|
113
|
+
context 'when the tax_number starts with' do
|
114
|
+
|
115
|
+
context 'AL (Albania)' do
|
116
|
+
let(:prefix) { 'AL' }
|
117
|
+
|
118
|
+
it 'should be valid with "K" + 8 digits + 1 char' do
|
119
|
+
subject.tax_number = prefix + 'K12345678X'
|
120
|
+
subject.should be_valid
|
121
|
+
end
|
122
|
+
|
123
|
+
it 'should be valid with "J" + 8 digits + 1 char' do
|
124
|
+
subject.tax_number = prefix + 'J12345678X'
|
125
|
+
subject.should be_valid
|
126
|
+
end
|
127
|
+
|
128
|
+
it 'should not be valid if the first char is not "K" or "J"' do
|
129
|
+
subject.tax_number = prefix + 'X12345678X'
|
130
|
+
subject.should_not be_valid
|
131
|
+
end
|
132
|
+
|
133
|
+
it 'should not be valid with less then 8 digits' do
|
134
|
+
subject.tax_number = prefix + 'J1234567X'
|
135
|
+
subject.should_not be_valid
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'should not be valid with more then 8 digits' do
|
139
|
+
subject.tax_number = prefix + 'K123456789X'
|
140
|
+
subject.should_not be_valid
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
context 'AR (Argentina)' do
|
145
|
+
let(:prefix) { 'AR' }
|
146
|
+
|
147
|
+
it_behaves_like 'tax_number with 11 digits'
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'ATU (Austria)' do
|
151
|
+
let(:prefix) { 'ATU' }
|
152
|
+
|
153
|
+
it_behaves_like 'tax_number with 8 digits'
|
154
|
+
end
|
155
|
+
|
156
|
+
context 'AU (Australia)' do
|
157
|
+
let(:prefix) { 'AU' }
|
158
|
+
|
159
|
+
it_behaves_like 'tax_number with 9 digits'
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'BE (Belgium)' do
|
163
|
+
let(:prefix) { 'BE' }
|
164
|
+
|
165
|
+
it 'should be valid with 10 digits (first digit == 0)' do
|
166
|
+
subject.tax_number = prefix + '0123456789'
|
167
|
+
subject.should be_valid
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'should not be valid with 10 digits (first digit != 0)' do
|
171
|
+
subject.tax_number = prefix + '1123456789'
|
172
|
+
subject.should_not be_valid
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'should not be valid with less then 10 digits' do
|
176
|
+
subject.tax_number = prefix + '012345678'
|
177
|
+
subject.should_not be_valid
|
178
|
+
end
|
179
|
+
|
180
|
+
it 'should not be valid with more then 10 digits' do
|
181
|
+
subject.tax_number = prefix + '01234567890'
|
182
|
+
subject.should_not be_valid
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
context 'BG (Bulgaria)' do
|
187
|
+
let(:prefix) { 'BG' }
|
188
|
+
|
189
|
+
it 'should be valid with 9 digits' do
|
190
|
+
subject.tax_number = prefix + '123456789'
|
191
|
+
subject.should be_valid
|
192
|
+
end
|
193
|
+
|
194
|
+
it 'should be valid with 10 digits' do
|
195
|
+
subject.tax_number = prefix + '1234567890'
|
196
|
+
subject.should be_valid
|
197
|
+
end
|
198
|
+
|
199
|
+
it 'should not be valid with less then 9 digits' do
|
200
|
+
subject.tax_number = prefix + '12345678'
|
201
|
+
subject.should_not be_valid
|
202
|
+
end
|
203
|
+
|
204
|
+
it 'should not be valid with more then 10 digits' do
|
205
|
+
subject.tax_number = prefix + '12345678901'
|
206
|
+
subject.should_not be_valid
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
context 'BO (Bolivia)' do
|
211
|
+
let(:prefix) { 'BO' }
|
212
|
+
|
213
|
+
it_behaves_like 'tax_number with only prefix check'
|
214
|
+
end
|
215
|
+
|
216
|
+
context 'BR (Brasil)' do
|
217
|
+
let(:prefix) { 'BR' }
|
218
|
+
|
219
|
+
it_behaves_like 'tax_number with 8 digits'
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'BY (Belarus)' do
|
223
|
+
let(:prefix) { 'BY' }
|
224
|
+
|
225
|
+
it_behaves_like 'tax_number with 9 digits'
|
226
|
+
end
|
227
|
+
|
228
|
+
context 'CA (Canada)' do
|
229
|
+
let(:prefix) { 'CA' }
|
230
|
+
|
231
|
+
it 'should be valid with 15 digits' do
|
232
|
+
subject.tax_number = prefix + '123456789012345'
|
233
|
+
subject.should be_valid
|
234
|
+
end
|
235
|
+
|
236
|
+
it 'should not be valid with less then 15 digits' do
|
237
|
+
subject.tax_number = prefix + '12345678901234'
|
238
|
+
subject.should_not be_valid
|
239
|
+
end
|
240
|
+
|
241
|
+
it 'should not be valid with more then 15 digits' do
|
242
|
+
subject.tax_number = prefix + '1234567890123456'
|
243
|
+
subject.should_not be_valid
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
context 'CHE (Switzerland)' do
|
248
|
+
let(:prefix) { 'CHE' }
|
249
|
+
|
250
|
+
it 'should not be valid without suffix' do
|
251
|
+
subject.tax_number = prefix + '123456789'
|
252
|
+
subject.should_not be_valid
|
253
|
+
end
|
254
|
+
|
255
|
+
context 'and the tax_number ends with MWST (de-CH)' do
|
256
|
+
let(:suffix) { 'MWST' }
|
257
|
+
it 'should be valid with 9 digits' do
|
258
|
+
subject.tax_number = prefix + '123456789' + suffix
|
259
|
+
subject.should be_valid
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'should not be valid with less then 9 digits' do
|
263
|
+
subject.tax_number = prefix + '12345678' + suffix
|
264
|
+
subject.should_not be_valid
|
265
|
+
end
|
266
|
+
|
267
|
+
it 'should not be valid with more then 9 digits' do
|
268
|
+
subject.tax_number = prefix + '1234567890' + suffix
|
269
|
+
subject.should_not be_valid
|
270
|
+
end
|
271
|
+
end
|
272
|
+
|
273
|
+
context 'and the tax_number ends with TVA (de-FR)' do
|
274
|
+
let(:suffix) { 'TVA' }
|
275
|
+
|
276
|
+
it 'should be valid with 9 digits' do
|
277
|
+
subject.tax_number = prefix + '123456789' + suffix
|
278
|
+
subject.should be_valid
|
279
|
+
end
|
280
|
+
|
281
|
+
it 'should not be valid with less then 9 digits' do
|
282
|
+
subject.tax_number = prefix + '12345678' + suffix
|
283
|
+
subject.should_not be_valid
|
284
|
+
end
|
285
|
+
|
286
|
+
it 'should not be valid with more then 9 digits' do
|
287
|
+
subject.tax_number = prefix + '1234567890' + suffix
|
288
|
+
subject.should_not be_valid
|
289
|
+
end
|
290
|
+
end
|
291
|
+
|
292
|
+
context 'and the tax_number ends with IVA (de-IT)' do
|
293
|
+
let(:suffix) { 'IVA' }
|
294
|
+
it 'should be valid with 9 digits' do
|
295
|
+
subject.tax_number = prefix + '123456789' + suffix
|
296
|
+
subject.should be_valid
|
297
|
+
end
|
298
|
+
|
299
|
+
it 'should not be valid with less then 9 digits' do
|
300
|
+
subject.tax_number = prefix + '12345678' + suffix
|
301
|
+
subject.should_not be_valid
|
302
|
+
end
|
303
|
+
|
304
|
+
it 'should not be valid with more then 9 digits' do
|
305
|
+
subject.tax_number = prefix + '1234567890' + suffix
|
306
|
+
subject.should_not be_valid
|
307
|
+
end
|
308
|
+
end
|
309
|
+
|
310
|
+
|
311
|
+
end
|
312
|
+
|
313
|
+
context 'CL (Chile)' do
|
314
|
+
let(:prefix) { 'CL' }
|
315
|
+
|
316
|
+
it_behaves_like 'tax_number with 9 digits'
|
317
|
+
end
|
318
|
+
|
319
|
+
context 'CO (Colombia)' do
|
320
|
+
let(:prefix) { 'CO' }
|
321
|
+
|
322
|
+
it_behaves_like 'tax_number with 10 digits'
|
323
|
+
end
|
324
|
+
|
325
|
+
context 'CR (Costa Rica)' do
|
326
|
+
let(:prefix) { 'CR' }
|
327
|
+
|
328
|
+
it_behaves_like 'tax_number with only prefix check'
|
329
|
+
end
|
330
|
+
|
331
|
+
context 'CY (Cyprus)' do
|
332
|
+
let(:prefix) { 'CY' }
|
333
|
+
let(:suffix) { 'L' } # A-Z
|
334
|
+
|
335
|
+
it 'should not be valid without suffix' do
|
336
|
+
subject.tax_number = prefix + '12345678'
|
337
|
+
subject.should_not be_valid
|
338
|
+
end
|
339
|
+
|
340
|
+
it 'should be valid with 8 digits' do
|
341
|
+
subject.tax_number = prefix + '12345678' + suffix
|
342
|
+
subject.should be_valid
|
343
|
+
end
|
344
|
+
|
345
|
+
it 'should not be valid with less then 8 digits' do
|
346
|
+
subject.tax_number = prefix + '1234567' + suffix
|
347
|
+
subject.should_not be_valid
|
348
|
+
end
|
349
|
+
|
350
|
+
it 'should not be valid with more then 8 digits' do
|
351
|
+
subject.tax_number = prefix + '123456789' + suffix
|
352
|
+
subject.should_not be_valid
|
353
|
+
end
|
354
|
+
end
|
355
|
+
|
356
|
+
context 'CZ (Czech Republic)' do
|
357
|
+
let(:prefix) { 'CZ' }
|
358
|
+
|
359
|
+
it 'should be valid with 8 digits' do
|
360
|
+
subject.tax_number = prefix + '12345678'
|
361
|
+
subject.should be_valid
|
362
|
+
end
|
363
|
+
|
364
|
+
it 'should be valid with 9 digits' do
|
365
|
+
subject.tax_number = prefix + '123456789'
|
366
|
+
subject.should be_valid
|
367
|
+
end
|
368
|
+
|
369
|
+
it 'should be valid with 10 digits' do
|
370
|
+
subject.tax_number = prefix + '1234567890'
|
371
|
+
subject.should be_valid
|
372
|
+
end
|
373
|
+
|
374
|
+
it 'should not be valid with less then 8 digits' do
|
375
|
+
subject.tax_number = prefix + '1234567'
|
376
|
+
subject.should_not be_valid
|
377
|
+
end
|
378
|
+
|
379
|
+
it 'should not be valid with more then 10 digits' do
|
380
|
+
subject.tax_number = prefix + '12345678901'
|
381
|
+
subject.should_not be_valid
|
382
|
+
end
|
383
|
+
end
|
384
|
+
|
385
|
+
context 'DE (Germany)' do
|
386
|
+
let(:prefix) { 'DE' }
|
387
|
+
|
388
|
+
it_behaves_like 'tax_number with 9 digits'
|
389
|
+
end
|
390
|
+
|
391
|
+
context 'DK (Denmark)' do
|
392
|
+
let(:prefix) { 'DK' }
|
393
|
+
|
394
|
+
it_behaves_like 'tax_number with 8 digits'
|
395
|
+
end
|
396
|
+
|
397
|
+
context 'DO (Dominican Republic)' do
|
398
|
+
let(:prefix) { 'DO' }
|
399
|
+
|
400
|
+
it_behaves_like 'tax_number with only prefix check'
|
401
|
+
end
|
402
|
+
|
403
|
+
context 'EC (Ecuador)' do
|
404
|
+
let(:prefix) { 'EC' }
|
405
|
+
|
406
|
+
it 'should be valid with 13 digits' do
|
407
|
+
subject.tax_number = prefix + '1234567890123'
|
408
|
+
subject.should be_valid
|
409
|
+
end
|
410
|
+
|
411
|
+
it 'should not be valid with less then 13 digits' do
|
412
|
+
subject.tax_number = prefix + '123456789012'
|
413
|
+
subject.should_not be_valid
|
414
|
+
end
|
415
|
+
|
416
|
+
it 'should not be valid with more then 13 digits' do
|
417
|
+
subject.tax_number = prefix + '12345678901234'
|
418
|
+
subject.should_not be_valid
|
419
|
+
end
|
420
|
+
end
|
421
|
+
|
422
|
+
context 'EE (Estonia)' do
|
423
|
+
let(:prefix) { 'EE' }
|
424
|
+
|
425
|
+
it_behaves_like 'tax_number with 9 digits'
|
426
|
+
end
|
427
|
+
|
428
|
+
context 'EL (Greece)' do
|
429
|
+
let(:prefix) { 'EL' }
|
430
|
+
|
431
|
+
it_behaves_like 'tax_number with 9 digits'
|
432
|
+
end
|
433
|
+
|
434
|
+
context 'ES (Spain)' do
|
435
|
+
let(:prefix) { 'ES' }
|
436
|
+
|
437
|
+
it 'should be valid with 1 char + 8 digits' do
|
438
|
+
subject.tax_number = prefix + 'X12345678'
|
439
|
+
subject.should be_valid
|
440
|
+
end
|
441
|
+
|
442
|
+
it 'should be valid with 8 digits + 1 char' do
|
443
|
+
subject.tax_number = prefix + '12345678X'
|
444
|
+
subject.should be_valid
|
445
|
+
end
|
446
|
+
|
447
|
+
it 'should be valid with 1 char + 7 digits + 1 char' do
|
448
|
+
subject.tax_number = prefix + 'X1234567X'
|
449
|
+
subject.should be_valid
|
450
|
+
end
|
451
|
+
|
452
|
+
it 'should not be valid with less then 9 digits/chars' do
|
453
|
+
subject.tax_number = prefix + 'X1234567'
|
454
|
+
subject.should_not be_valid
|
455
|
+
end
|
456
|
+
|
457
|
+
it 'should not be valid with more then 9 digits/chats' do
|
458
|
+
subject.tax_number = prefix + '123456789X'
|
459
|
+
subject.should_not be_valid
|
460
|
+
end
|
461
|
+
end
|
462
|
+
|
463
|
+
context 'FI (Finland)' do
|
464
|
+
let(:prefix) { 'FI' }
|
465
|
+
|
466
|
+
it_behaves_like 'tax_number with 8 digits'
|
467
|
+
end
|
468
|
+
|
469
|
+
context 'FR (France)' do
|
470
|
+
let(:prefix) { 'FR' }
|
471
|
+
|
472
|
+
it 'should be valid with 2 digits/chars + 9 digits' do
|
473
|
+
subject.tax_number = prefix + '1X123456789'
|
474
|
+
subject.should be_valid
|
475
|
+
end
|
476
|
+
|
477
|
+
it 'should not be valid with less then 11 digits' do
|
478
|
+
subject.tax_number = prefix + '1234567890'
|
479
|
+
subject.should_not be_valid
|
480
|
+
end
|
481
|
+
|
482
|
+
it 'should not be valid with more then 11 digits' do
|
483
|
+
subject.tax_number = prefix + '123456789012'
|
484
|
+
subject.should_not be_valid
|
485
|
+
end
|
486
|
+
end
|
487
|
+
|
488
|
+
context 'GB (United Kingdom)' do
|
489
|
+
let(:prefix) { 'GB' }
|
490
|
+
|
491
|
+
context 'with digets only' do
|
492
|
+
it 'should be valid with 9 digits (standard)' do
|
493
|
+
subject.tax_number = prefix + '123456789'
|
494
|
+
subject.should be_valid
|
495
|
+
end
|
496
|
+
|
497
|
+
it 'should be valid with 12 digits (branch traders)' do
|
498
|
+
subject.tax_number = prefix + '123456789012'
|
499
|
+
subject.should be_valid
|
500
|
+
end
|
501
|
+
|
502
|
+
it 'should not be valid with less then 9 digits' do
|
503
|
+
subject.tax_number = prefix + '12345678'
|
504
|
+
subject.should_not be_valid
|
505
|
+
end
|
506
|
+
|
507
|
+
it 'should not be valid with 10 digits' do
|
508
|
+
subject.tax_number = prefix + '1234567890'
|
509
|
+
subject.should_not be_valid
|
510
|
+
end
|
511
|
+
|
512
|
+
it 'should not be valid with 11 digits' do
|
513
|
+
subject.tax_number = prefix + '12345678901'
|
514
|
+
subject.should_not be_valid
|
515
|
+
end
|
516
|
+
|
517
|
+
it 'should not be valid with more then 12 digits' do
|
518
|
+
subject.tax_number = prefix + '1234567890123'
|
519
|
+
subject.should_not be_valid
|
520
|
+
end
|
521
|
+
end
|
522
|
+
|
523
|
+
context 'with prefix addition "HA" (health authorities)' do
|
524
|
+
let(:addition) { 'HA' }
|
525
|
+
|
526
|
+
it 'should be valid with 3 digits' do
|
527
|
+
subject.tax_number = prefix + addition + '123'
|
528
|
+
subject.should be_valid
|
529
|
+
end
|
530
|
+
|
531
|
+
it 'should not be valid with less then 3 digits' do
|
532
|
+
subject.tax_number = prefix + addition + '12'
|
533
|
+
subject.should_not be_valid
|
534
|
+
end
|
535
|
+
|
536
|
+
it 'should not be valid with more then 3 digits' do
|
537
|
+
subject.tax_number = prefix + addition + '1234'
|
538
|
+
subject.should_not be_valid
|
539
|
+
end
|
540
|
+
end
|
541
|
+
|
542
|
+
context 'with prefix addition "GD" (government departments)' do
|
543
|
+
let(:addition) { 'GD' }
|
544
|
+
|
545
|
+
it 'should be valid with 3 digits' do
|
546
|
+
subject.tax_number = prefix + addition + '123'
|
547
|
+
subject.should be_valid
|
548
|
+
end
|
549
|
+
|
550
|
+
it 'should not be valid with less then 3 digits' do
|
551
|
+
subject.tax_number = prefix + addition + '12'
|
552
|
+
subject.should_not be_valid
|
553
|
+
end
|
554
|
+
|
555
|
+
it 'should not be valid with more then 3 digits' do
|
556
|
+
subject.tax_number = prefix + addition + '1234'
|
557
|
+
subject.should_not be_valid
|
558
|
+
end
|
559
|
+
end
|
560
|
+
end
|
561
|
+
|
562
|
+
context 'GT (Guatemala' do
|
563
|
+
let(:prefix) { 'GT' }
|
564
|
+
|
565
|
+
it_behaves_like 'tax_number with 8 digits'
|
566
|
+
end
|
567
|
+
|
568
|
+
context 'HN (Honduras)' do
|
569
|
+
let(:prefix) { 'HN' }
|
570
|
+
|
571
|
+
it_behaves_like 'tax_number with only prefix check'
|
572
|
+
end
|
573
|
+
|
574
|
+
context 'HR (Croatia)' do
|
575
|
+
let(:prefix) { 'HR' }
|
576
|
+
|
577
|
+
it_behaves_like 'tax_number with 11 digits'
|
578
|
+
end
|
579
|
+
|
580
|
+
context 'HU (Hungary)' do
|
581
|
+
let(:prefix) { 'HU' }
|
582
|
+
|
583
|
+
it_behaves_like 'tax_number with 8 digits'
|
584
|
+
end
|
585
|
+
|
586
|
+
context 'IE (Ireland)' do
|
587
|
+
let(:prefix) { 'IE' }
|
588
|
+
|
589
|
+
it 'should be valid with 1 digit + 1 char + 5 digets + 1 char' do
|
590
|
+
subject.tax_number = prefix + '1X12345L'
|
591
|
+
subject.should be_valid
|
592
|
+
end
|
593
|
+
|
594
|
+
it 'should be valid with 7 digits + 1 char' do
|
595
|
+
subject.tax_number = prefix + '1234567L'
|
596
|
+
subject.should be_valid
|
597
|
+
end
|
598
|
+
|
599
|
+
it 'should not be valid if last is not a char' do
|
600
|
+
subject.tax_number = prefix + '12345678'
|
601
|
+
subject.should_not be_valid
|
602
|
+
end
|
603
|
+
|
604
|
+
it 'should not be valid with less then 7 digits + 1 char' do
|
605
|
+
subject.tax_number = prefix + '123456L'
|
606
|
+
subject.should_not be_valid
|
607
|
+
end
|
608
|
+
|
609
|
+
it 'should not be valid with more then 7 digits + 1 char' do
|
610
|
+
subject.tax_number = prefix + '12345678L'
|
611
|
+
subject.should_not be_valid
|
612
|
+
end
|
613
|
+
end
|
614
|
+
|
615
|
+
context 'IT (Italy)' do
|
616
|
+
let(:prefix) { 'IT' }
|
617
|
+
|
618
|
+
it_behaves_like 'tax_number with 11 digits'
|
619
|
+
end
|
620
|
+
|
621
|
+
context 'LT (Lithuania)' do
|
622
|
+
let(:prefix) { 'LT' }
|
623
|
+
|
624
|
+
it 'should be valid with 9 digits' do
|
625
|
+
subject.tax_number = prefix + '123456789'
|
626
|
+
subject.should be_valid
|
627
|
+
end
|
628
|
+
|
629
|
+
it 'should be valid with 12 digits' do
|
630
|
+
subject.tax_number = prefix + '123456789012'
|
631
|
+
subject.should be_valid
|
632
|
+
end
|
633
|
+
|
634
|
+
it 'should not be valid with less then 9 digits' do
|
635
|
+
subject.tax_number = prefix + '12345678'
|
636
|
+
subject.should_not be_valid
|
637
|
+
end
|
638
|
+
|
639
|
+
it 'should not be valid with 10 digits' do
|
640
|
+
subject.tax_number = prefix + '1234567890'
|
641
|
+
subject.should_not be_valid
|
642
|
+
end
|
643
|
+
|
644
|
+
it 'should not be valid with 11 digits' do
|
645
|
+
subject.tax_number = prefix + '12345678901'
|
646
|
+
subject.should_not be_valid
|
647
|
+
end
|
648
|
+
|
649
|
+
it 'should not be valid with more then 12 digits' do
|
650
|
+
subject.tax_number = prefix + '1234567890123'
|
651
|
+
subject.should_not be_valid
|
652
|
+
end
|
653
|
+
end
|
654
|
+
|
655
|
+
context 'LU (Luxembourg)' do
|
656
|
+
let(:prefix) { 'LU' }
|
657
|
+
|
658
|
+
it_behaves_like 'tax_number with 8 digits'
|
659
|
+
end
|
660
|
+
|
661
|
+
context 'LV (Latvia)' do
|
662
|
+
let(:prefix) { 'LV' }
|
663
|
+
|
664
|
+
it_behaves_like 'tax_number with 11 digits'
|
665
|
+
end
|
666
|
+
|
667
|
+
context 'MT (Malta)' do
|
668
|
+
let(:prefix) { 'MT' }
|
669
|
+
|
670
|
+
it_behaves_like 'tax_number with 8 digits'
|
671
|
+
end
|
672
|
+
|
673
|
+
context 'MX (Mexico)' do
|
674
|
+
let(:prefix) { 'MX' }
|
675
|
+
|
676
|
+
it_behaves_like 'tax_number with 12 digits'
|
677
|
+
end
|
678
|
+
|
679
|
+
context 'NI (Nicaragua)' do
|
680
|
+
let(:prefix) { 'NI' }
|
681
|
+
|
682
|
+
it_behaves_like 'tax_number with only prefix check'
|
683
|
+
end
|
684
|
+
|
685
|
+
context 'NL (Netherlands)' do
|
686
|
+
let(:prefix) { 'NL' }
|
687
|
+
|
688
|
+
it 'should be valid with 9 digits + "B" + 2 digits' do
|
689
|
+
subject.tax_number = prefix + '123456789B12'
|
690
|
+
subject.should be_valid
|
691
|
+
end
|
692
|
+
|
693
|
+
it 'should not be valid without "B" on the 10 position' do
|
694
|
+
subject.tax_number = prefix + '123456789X12'
|
695
|
+
subject.should_not be_valid
|
696
|
+
end
|
697
|
+
|
698
|
+
it 'should not be valid with less 9 digits + "B" + 2 digits' do
|
699
|
+
subject.tax_number = prefix + '12345678B12'
|
700
|
+
subject.should_not be_valid
|
701
|
+
end
|
702
|
+
|
703
|
+
it 'should not be valid with more 9 digits + "B" + 2 digits' do
|
704
|
+
subject.tax_number = prefix + '1234567890B12'
|
705
|
+
subject.should_not be_valid
|
706
|
+
end
|
707
|
+
|
708
|
+
it 'should not be valid with 8 digits + "B" + less then 2 digits' do
|
709
|
+
subject.tax_number = prefix + '12345678B1'
|
710
|
+
subject.should_not be_valid
|
711
|
+
end
|
712
|
+
|
713
|
+
it 'should not be valid with more 8 digits + "B" + more then 2 digits' do
|
714
|
+
subject.tax_number = prefix + '12345678B123'
|
715
|
+
subject.should_not be_valid
|
716
|
+
end
|
717
|
+
end
|
718
|
+
|
719
|
+
context 'NO (Norway)' do
|
720
|
+
let(:prefix) { 'NO' }
|
721
|
+
|
722
|
+
it_behaves_like 'tax_number with 9 digits'
|
723
|
+
end
|
724
|
+
|
725
|
+
context 'PA (Panama)' do
|
726
|
+
let(:prefix) { 'PA' }
|
727
|
+
|
728
|
+
it_behaves_like 'tax_number with only prefix check'
|
729
|
+
end
|
730
|
+
|
731
|
+
context 'PE (Peru)' do
|
732
|
+
let(:prefix) { 'SV' }
|
733
|
+
|
734
|
+
it_behaves_like 'tax_number with only prefix check'
|
735
|
+
end
|
736
|
+
|
737
|
+
context 'PH (Philippines)' do
|
738
|
+
let(:prefix) { 'PH' }
|
739
|
+
|
740
|
+
it_behaves_like 'tax_number with 12 digits'
|
741
|
+
end
|
742
|
+
|
743
|
+
context 'PL (Poland)' do
|
744
|
+
let(:prefix) { 'PL' }
|
745
|
+
|
746
|
+
it_behaves_like 'tax_number with 10 digits'
|
747
|
+
end
|
748
|
+
|
749
|
+
context 'PT (Portugal)' do
|
750
|
+
let(:prefix) { 'PT' }
|
751
|
+
|
752
|
+
it_behaves_like 'tax_number with 9 digits'
|
753
|
+
end
|
754
|
+
|
755
|
+
context 'PY (Paraguay)' do
|
756
|
+
let(:prefix) { 'PY' }
|
757
|
+
|
758
|
+
it_behaves_like 'tax_number with only prefix check'
|
759
|
+
end
|
760
|
+
|
761
|
+
context 'RO (Romania)' do
|
762
|
+
let(:prefix) { 'RO' }
|
763
|
+
|
764
|
+
it 'should be valid with 2 digits' do
|
765
|
+
subject.tax_number = prefix + '12'
|
766
|
+
subject.should be_valid
|
767
|
+
end
|
768
|
+
|
769
|
+
it 'should be valid with 3 digits' do
|
770
|
+
subject.tax_number = prefix + '123'
|
771
|
+
subject.should be_valid
|
772
|
+
end
|
773
|
+
|
774
|
+
it 'should be valid with 4 digits' do
|
775
|
+
subject.tax_number = prefix + '1234'
|
776
|
+
subject.should be_valid
|
777
|
+
end
|
778
|
+
|
779
|
+
it 'should be valid with 5 digits' do
|
780
|
+
subject.tax_number = prefix + '12345'
|
781
|
+
subject.should be_valid
|
782
|
+
end
|
783
|
+
|
784
|
+
it 'should be valid with 6 digits' do
|
785
|
+
subject.tax_number = prefix + '123456'
|
786
|
+
subject.should be_valid
|
787
|
+
end
|
788
|
+
|
789
|
+
it 'should be valid with 7 digits' do
|
790
|
+
subject.tax_number = prefix + '1234567'
|
791
|
+
subject.should be_valid
|
792
|
+
end
|
793
|
+
|
794
|
+
it 'should be valid with 8 digits' do
|
795
|
+
subject.tax_number = prefix + '12345678'
|
796
|
+
subject.should be_valid
|
797
|
+
end
|
798
|
+
|
799
|
+
it 'should be valid with 9 digits' do
|
800
|
+
subject.tax_number = prefix + '123456789'
|
801
|
+
subject.should be_valid
|
802
|
+
end
|
803
|
+
|
804
|
+
it 'should be valid with 10 digits' do
|
805
|
+
subject.tax_number = prefix + '123456789'
|
806
|
+
subject.should be_valid
|
807
|
+
end
|
808
|
+
|
809
|
+
it 'should not be valid if the first digit is 0' do
|
810
|
+
subject.tax_number = prefix + '01'
|
811
|
+
subject.should_not be_valid
|
812
|
+
end
|
813
|
+
|
814
|
+
it 'should not be valid with less then 2 digits' do
|
815
|
+
subject.tax_number = prefix + '1'
|
816
|
+
subject.should_not be_valid
|
817
|
+
end
|
818
|
+
|
819
|
+
it 'should not be valid with more then 10 digits' do
|
820
|
+
subject.tax_number = prefix + '12345678901'
|
821
|
+
subject.should_not be_valid
|
822
|
+
end
|
823
|
+
end
|
824
|
+
|
825
|
+
context 'RU (Russia)' do
|
826
|
+
let(:prefix) { 'RU' }
|
827
|
+
|
828
|
+
it_behaves_like 'tax_number with 10 digits'
|
829
|
+
end
|
830
|
+
|
831
|
+
context 'SE (Sweden)' do
|
832
|
+
let(:prefix) { 'SE' }
|
833
|
+
|
834
|
+
it 'should be valid with 10 digits + "01"' do
|
835
|
+
subject.tax_number = prefix + '123456789001'
|
836
|
+
subject.should be_valid
|
837
|
+
end
|
838
|
+
|
839
|
+
it 'should not be valid without "01" at the end' do
|
840
|
+
subject.tax_number = prefix + '123456789012'
|
841
|
+
subject.should_not be_valid
|
842
|
+
end
|
843
|
+
|
844
|
+
it 'should not be valid with less then 10 digits + "01"' do
|
845
|
+
subject.tax_number = prefix + '12345678901'
|
846
|
+
subject.should_not be_valid
|
847
|
+
end
|
848
|
+
|
849
|
+
it 'should not be valid with more then 10 digits + "01"' do
|
850
|
+
subject.tax_number = prefix + '1234567890101'
|
851
|
+
subject.should_not be_valid
|
852
|
+
end
|
853
|
+
end
|
854
|
+
|
855
|
+
context 'SI (Slovenia)' do
|
856
|
+
let(:prefix) { 'SI' }
|
857
|
+
|
858
|
+
it_behaves_like 'tax_number with 8 digits'
|
859
|
+
end
|
860
|
+
|
861
|
+
context 'SK (Slovakia)' do
|
862
|
+
let(:prefix) { 'SK' }
|
863
|
+
|
864
|
+
it_behaves_like 'tax_number with 10 digits'
|
865
|
+
end
|
866
|
+
|
867
|
+
context 'SM (San Marino)' do
|
868
|
+
let(:prefix) { 'SM' }
|
869
|
+
|
870
|
+
it 'should be valid with 5 digits' do
|
871
|
+
subject.tax_number = prefix + '12345'
|
872
|
+
subject.should be_valid
|
873
|
+
end
|
874
|
+
|
875
|
+
it 'should not be valid with less then 5 digits' do
|
876
|
+
subject.tax_number = prefix + '1234'
|
877
|
+
subject.should_not be_valid
|
878
|
+
end
|
879
|
+
|
880
|
+
it 'should not be valid with more then 5 digits' do
|
881
|
+
subject.tax_number = prefix + '123456'
|
882
|
+
subject.should_not be_valid
|
883
|
+
end
|
884
|
+
end
|
885
|
+
|
886
|
+
context 'SV (El Salvador)' do
|
887
|
+
let(:prefix) { 'SV' }
|
888
|
+
|
889
|
+
it_behaves_like 'tax_number with only prefix check'
|
890
|
+
end
|
891
|
+
|
892
|
+
context 'TR (Turkey)' do
|
893
|
+
let(:prefix) { 'TR' }
|
894
|
+
|
895
|
+
it_behaves_like 'tax_number with 10 digits'
|
896
|
+
end
|
897
|
+
|
898
|
+
context 'UA (Ukraine)' do
|
899
|
+
let(:prefix) { 'UA' }
|
900
|
+
|
901
|
+
it_behaves_like 'tax_number with 12 digits'
|
902
|
+
end
|
903
|
+
|
904
|
+
context 'UY (Uruguay)' do
|
905
|
+
let(:prefix) { 'UY' }
|
906
|
+
|
907
|
+
it_behaves_like 'tax_number with only prefix check'
|
908
|
+
end
|
909
|
+
|
910
|
+
context 'VE (Venezuala)' do
|
911
|
+
let(:prefix) { 'VE' }
|
912
|
+
|
913
|
+
it 'should be valid with "J" + 9 digits' do
|
914
|
+
subject.tax_number = prefix + 'J123456789'
|
915
|
+
subject.should be_valid
|
916
|
+
end
|
917
|
+
|
918
|
+
it 'should be valid with "G" + 9 digits' do
|
919
|
+
subject.tax_number = prefix + 'G123456789'
|
920
|
+
subject.should be_valid
|
921
|
+
end
|
922
|
+
|
923
|
+
it 'should be valid with "V" + 9 digits' do
|
924
|
+
subject.tax_number = prefix + 'V123456789'
|
925
|
+
subject.should be_valid
|
926
|
+
end
|
927
|
+
|
928
|
+
it 'should be valid with "E" + 9 digits' do
|
929
|
+
subject.tax_number = prefix + 'E123456789'
|
930
|
+
subject.should be_valid
|
931
|
+
end
|
932
|
+
|
933
|
+
it 'should not be valid with less then 9 digits' do
|
934
|
+
subject.tax_number = prefix + 'E12345678'
|
935
|
+
subject.should_not be_valid
|
936
|
+
end
|
937
|
+
|
938
|
+
it 'should not be valid with more then 9 digits' do
|
939
|
+
subject.tax_number = prefix + 'E1234567890'
|
940
|
+
subject.should_not be_valid
|
941
|
+
end
|
942
|
+
end
|
943
|
+
end
|
944
|
+
end
|