valvat 1.4.1 → 1.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +2 -6
- data/lib/valvat/version.rb +1 -1
- data.tar.gz.sig +0 -0
- metadata +34 -102
- metadata.gz.sig +0 -0
- data/.editorconfig +0 -15
- data/.github/workflows/rubocop.yml +0 -17
- data/.github/workflows/specs.yml +0 -47
- data/.gitignore +0 -9
- data/.rubocop.yml +0 -24
- data/CHANGES.md +0 -419
- data/Gemfile +0 -14
- data/Guardfile +0 -7
- data/MIT-LICENSE +0 -20
- data/README.md +0 -350
- data/Rakefile +0 -10
- data/certs/mite.pem +0 -26
- data/gemfiles/activemodel-5 +0 -8
- data/gemfiles/activemodel-6 +0 -8
- data/gemfiles/activemodel-7 +0 -8
- data/gemfiles/standalone +0 -7
- data/lib/valvat/locales/bg.yml +0 -34
- data/lib/valvat/locales/ca.yml +0 -34
- data/lib/valvat/locales/cs.yml +0 -34
- data/lib/valvat/locales/da.yml +0 -34
- data/lib/valvat/locales/de.yml +0 -35
- data/lib/valvat/locales/en.yml +0 -35
- data/lib/valvat/locales/es.yml +0 -35
- data/lib/valvat/locales/fi.yml +0 -34
- data/lib/valvat/locales/fr.yml +0 -34
- data/lib/valvat/locales/hu.yml +0 -35
- data/lib/valvat/locales/it.yml +0 -34
- data/lib/valvat/locales/lv.yml +0 -34
- data/lib/valvat/locales/nb.yml +0 -34
- data/lib/valvat/locales/nl.yml +0 -35
- data/lib/valvat/locales/pl.yml +0 -35
- data/lib/valvat/locales/pt.yml +0 -34
- data/lib/valvat/locales/ro.yml +0 -34
- data/lib/valvat/locales/sk.yml +0 -34
- data/lib/valvat/locales/sv.yml +0 -34
- data/lib/valvat/locales/tr.yml +0 -34
- data/spec/active_model/validations/valvat_validator_spec.rb +0 -274
- data/spec/spec_helper.rb +0 -37
- data/spec/valvat/checksum/at_spec.rb +0 -17
- data/spec/valvat/checksum/be_spec.rb +0 -17
- data/spec/valvat/checksum/bg_spec.rb +0 -18
- data/spec/valvat/checksum/cy_spec.rb +0 -17
- data/spec/valvat/checksum/de_spec.rb +0 -17
- data/spec/valvat/checksum/dk_spec.rb +0 -17
- data/spec/valvat/checksum/ee_spec.rb +0 -17
- data/spec/valvat/checksum/es_spec.rb +0 -65
- data/spec/valvat/checksum/fi_spec.rb +0 -17
- data/spec/valvat/checksum/fr_spec.rb +0 -17
- data/spec/valvat/checksum/gb_spec.rb +0 -34
- data/spec/valvat/checksum/gr_spec.rb +0 -17
- data/spec/valvat/checksum/hr_spec.rb +0 -17
- data/spec/valvat/checksum/hu_spec.rb +0 -17
- data/spec/valvat/checksum/ie_spec.rb +0 -24
- data/spec/valvat/checksum/it_spec.rb +0 -25
- data/spec/valvat/checksum/lt_spec.rb +0 -17
- data/spec/valvat/checksum/lu_spec.rb +0 -17
- data/spec/valvat/checksum/mt_spec.rb +0 -17
- data/spec/valvat/checksum/nl_spec.rb +0 -17
- data/spec/valvat/checksum/pl_spec.rb +0 -21
- data/spec/valvat/checksum/pt_spec.rb +0 -30
- data/spec/valvat/checksum/ro_spec.rb +0 -17
- data/spec/valvat/checksum/se_spec.rb +0 -21
- data/spec/valvat/checksum/si_spec.rb +0 -25
- data/spec/valvat/checksum_spec.rb +0 -40
- data/spec/valvat/lookup/hmrc_spec.rb +0 -58
- data/spec/valvat/lookup/vies_spec.rb +0 -25
- data/spec/valvat/lookup_spec.rb +0 -493
- data/spec/valvat/options_spec.rb +0 -23
- data/spec/valvat/syntax_spec.rb +0 -68
- data/spec/valvat/utils_spec.rb +0 -125
- data/spec/valvat_spec.rb +0 -276
- data/valvat.gemspec +0 -24
@@ -1,274 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
if defined?(ActiveModel)
|
6
|
-
class Invoice < ModelBase
|
7
|
-
validates :vat_number, valvat: true
|
8
|
-
end
|
9
|
-
|
10
|
-
class InvoiceWithLookup < ModelBase
|
11
|
-
validates :vat_number, valvat: { lookup: true }
|
12
|
-
end
|
13
|
-
|
14
|
-
class InvoiceWithLookupAndFailIfDown < ModelBase
|
15
|
-
validates :vat_number, valvat: { lookup: :fail_if_down }
|
16
|
-
end
|
17
|
-
|
18
|
-
class InvoiceAllowBlank < ModelBase
|
19
|
-
validates :vat_number, valvat: { allow_blank: true }
|
20
|
-
end
|
21
|
-
|
22
|
-
class InvoiceAllowBlankOnAll < ModelBase
|
23
|
-
validates :vat_number, valvat: true, allow_blank: true
|
24
|
-
end
|
25
|
-
|
26
|
-
class InvoiceCheckCountry < ModelBase
|
27
|
-
validates :vat_number, valvat: { match_country: :country }
|
28
|
-
|
29
|
-
def country
|
30
|
-
@attributes[:country]
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class InvoiceCheckCountryWithLookup < ModelBase
|
35
|
-
validates :vat_number, valvat: { match_country: :country, lookup: true }
|
36
|
-
|
37
|
-
def country
|
38
|
-
@attributes[:country]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
class InvoiceWithChecksum < ModelBase
|
43
|
-
validates :vat_number, valvat: { checksum: true }
|
44
|
-
end
|
45
|
-
|
46
|
-
describe Invoice do
|
47
|
-
before do
|
48
|
-
I18n.locale = :en
|
49
|
-
end
|
50
|
-
|
51
|
-
context 'with valid VAT number' do
|
52
|
-
it 'is valid' do
|
53
|
-
expect(described_class.new(vat_number: 'DE259597697')).to be_valid
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
context 'with invalid VAT number' do
|
58
|
-
let(:invoice) { described_class.new(vat_number: 'DE259597697123') }
|
59
|
-
|
60
|
-
it 'is not valid' do
|
61
|
-
expect(invoice).not_to be_valid
|
62
|
-
end
|
63
|
-
|
64
|
-
it 'adds default (country specific) error message' do
|
65
|
-
invoice.valid?
|
66
|
-
expect(invoice.errors[:vat_number]).to eql(['is not a valid German VAT number'])
|
67
|
-
end
|
68
|
-
|
69
|
-
context 'with DE locale' do
|
70
|
-
before do
|
71
|
-
I18n.locale = :de
|
72
|
-
end
|
73
|
-
|
74
|
-
it 'adds translated error message' do
|
75
|
-
invoice.valid?
|
76
|
-
expect(invoice.errors[:vat_number]).to eql(['ist keine gültige deutsche USt-IdNr.'])
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
context 'with PT locale' do
|
81
|
-
before do
|
82
|
-
I18n.locale = :pt
|
83
|
-
end
|
84
|
-
|
85
|
-
it 'adds translated error message' do
|
86
|
-
invoice.valid?
|
87
|
-
expect(invoice.errors[:vat_number]).to eql(['O NIF alemão não é válido.'])
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
context 'with i18n translation in place' do
|
92
|
-
before do
|
93
|
-
I18n.backend.store_translations(:en, activemodel: {
|
94
|
-
errors: { models: { invoice: { invalid_vat: 'is ugly.' } } }
|
95
|
-
})
|
96
|
-
end
|
97
|
-
|
98
|
-
after { I18n.reload! }
|
99
|
-
|
100
|
-
it 'uses translation' do
|
101
|
-
invoice.valid?
|
102
|
-
expect(invoice.errors[:vat_number]).to eql(['is ugly.'])
|
103
|
-
end
|
104
|
-
end
|
105
|
-
|
106
|
-
context 'with i18n translation with country_adjective placeholder in place' do
|
107
|
-
before do
|
108
|
-
msg = 'is not a %{country_adjective} vat' # rubocop:disable Style/FormatStringToken
|
109
|
-
translation = { activemodel: { errors: { models: { invoice: { invalid_vat: msg } } } } }
|
110
|
-
I18n.backend.store_translations(:en, translation)
|
111
|
-
end
|
112
|
-
|
113
|
-
after { I18n.reload! }
|
114
|
-
|
115
|
-
it 'replaces country_adjective placeholder' do
|
116
|
-
invoice = described_class.new(vat_number: 'IE123')
|
117
|
-
invoice.valid?
|
118
|
-
expect(invoice.errors[:vat_number]).to eql(['is not a Irish vat'])
|
119
|
-
end
|
120
|
-
|
121
|
-
it "falls back to 'European' if country is missing" do
|
122
|
-
invoice = described_class.new(vat_number: 'XX123')
|
123
|
-
invoice.valid?
|
124
|
-
expect(invoice.errors[:vat_number]).to eql(['is not a European vat'])
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
|
129
|
-
context 'with blank VAT number' do
|
130
|
-
it 'is not valid' do
|
131
|
-
expect(described_class.new(vat_number: '')).not_to be_valid
|
132
|
-
expect(described_class.new(vat_number: nil)).not_to be_valid
|
133
|
-
end
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
describe InvoiceWithLookup do
|
138
|
-
context 'with valid but not existing VAT number' do
|
139
|
-
before do
|
140
|
-
allow(Valvat::Syntax).to receive_messages(validate: true)
|
141
|
-
allow(Valvat::Lookup).to receive_messages(validate: false)
|
142
|
-
end
|
143
|
-
|
144
|
-
it 'is not valid' do
|
145
|
-
expect(described_class.new(vat_number: 'DE123')).not_to be_valid
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
context 'with valid and existing VAT number' do
|
150
|
-
before do
|
151
|
-
allow(Valvat::Syntax).to receive_messages(validate: true)
|
152
|
-
allow(Valvat::Lookup).to receive_messages(validate: true)
|
153
|
-
end
|
154
|
-
|
155
|
-
it 'is valid' do
|
156
|
-
expect(described_class.new(vat_number: 'DE123')).to be_valid
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
context 'with valid VAT number and VIES country service down' do
|
161
|
-
before do
|
162
|
-
allow(Valvat::Syntax).to receive_messages(validate: true)
|
163
|
-
allow(Valvat::Lookup).to receive_messages(validate: nil)
|
164
|
-
end
|
165
|
-
|
166
|
-
it 'is valid' do
|
167
|
-
expect(described_class.new(vat_number: 'DE123')).to be_valid
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe InvoiceWithLookupAndFailIfDown do
|
173
|
-
let(:record) { described_class.new }
|
174
|
-
|
175
|
-
context 'with valid VAT number and VIES country service down' do
|
176
|
-
before do
|
177
|
-
allow(Valvat::Syntax).to receive_messages(validate: true)
|
178
|
-
allow(Valvat::Lookup).to receive_messages(validate: nil)
|
179
|
-
end
|
180
|
-
|
181
|
-
it 'is not valid' do
|
182
|
-
expect(record).not_to be_valid
|
183
|
-
msg = 'Unable to validate your VAT number: the VIES service is down. Please try again later.'
|
184
|
-
expect(record.errors[:vat_number]).to eql([msg])
|
185
|
-
end
|
186
|
-
end
|
187
|
-
end
|
188
|
-
|
189
|
-
describe InvoiceAllowBlank do
|
190
|
-
context 'with blank VAT number' do
|
191
|
-
it 'is valid' do
|
192
|
-
expect(described_class.new(vat_number: '')).to be_valid
|
193
|
-
expect(described_class.new(vat_number: nil)).to be_valid
|
194
|
-
end
|
195
|
-
end
|
196
|
-
end
|
197
|
-
|
198
|
-
describe InvoiceAllowBlankOnAll do
|
199
|
-
context 'with blank VAT number' do
|
200
|
-
it 'is valid' do
|
201
|
-
expect(described_class.new(vat_number: '')).to be_valid
|
202
|
-
expect(described_class.new(vat_number: nil)).to be_valid
|
203
|
-
end
|
204
|
-
end
|
205
|
-
end
|
206
|
-
|
207
|
-
describe InvoiceCheckCountry do
|
208
|
-
it 'is not valid on blank country' do
|
209
|
-
expect(described_class.new(country: nil, vat_number: 'DE259597697')).not_to be_valid
|
210
|
-
expect(described_class.new(country: '', vat_number: 'DE259597697')).not_to be_valid
|
211
|
-
end
|
212
|
-
|
213
|
-
it 'is not valid on wired country' do
|
214
|
-
expect(described_class.new(country: 'XAXXX', vat_number: 'DE259597697')).not_to be_valid
|
215
|
-
expect(described_class.new(country: 'ZO', vat_number: 'DE259597697')).not_to be_valid
|
216
|
-
end
|
217
|
-
|
218
|
-
it 'is not valid on mismatching (eu) country' do
|
219
|
-
expect(described_class.new(country: 'FR', vat_number: 'DE259597697')).not_to be_valid
|
220
|
-
expect(described_class.new(country: 'AT', vat_number: 'DE259597697')).not_to be_valid
|
221
|
-
expect(described_class.new(country: 'DE', vat_number: 'ATU65931334')).not_to be_valid
|
222
|
-
end
|
223
|
-
|
224
|
-
it 'is valid on matching country' do
|
225
|
-
expect(described_class.new(country: 'DE', vat_number: 'DE259597697')).to be_valid
|
226
|
-
expect(described_class.new(country: 'AT', vat_number: 'ATU65931334')).to be_valid
|
227
|
-
end
|
228
|
-
|
229
|
-
it 'gives back error message with country from :country_match' do
|
230
|
-
invoice = described_class.new(country: 'FR', vat_number: 'DE259597697')
|
231
|
-
invoice.valid?
|
232
|
-
expect(invoice.errors[:vat_number]).to eql(['is not a valid French VAT number'])
|
233
|
-
end
|
234
|
-
|
235
|
-
it 'gives back error message with country from :country_match even on invalid VAT number' do
|
236
|
-
invoice = described_class.new(country: 'FR', vat_number: 'DE259597697123')
|
237
|
-
invoice.valid?
|
238
|
-
expect(invoice.errors[:vat_number]).to eql(['is not a valid French VAT number'])
|
239
|
-
end
|
240
|
-
end
|
241
|
-
|
242
|
-
describe InvoiceCheckCountryWithLookup do
|
243
|
-
before do
|
244
|
-
allow(Valvat::Syntax).to receive_messages(validate: true)
|
245
|
-
allow(Valvat::Lookup).to receive_messages(validate: true)
|
246
|
-
end
|
247
|
-
|
248
|
-
it 'avoids lookup or syntax check on failed because of mismatching country' do
|
249
|
-
described_class.new(country: 'FR', vat_number: 'DE259597697').valid?
|
250
|
-
expect(Valvat::Syntax).not_to have_received(:validate)
|
251
|
-
expect(Valvat::Lookup).not_to have_received(:validate)
|
252
|
-
end
|
253
|
-
|
254
|
-
it 'check syntax and looup on matching country' do
|
255
|
-
described_class.new(country: 'DE', vat_number: 'DE259597697').valid?
|
256
|
-
expect(Valvat::Syntax).to have_received(:validate)
|
257
|
-
expect(Valvat::Lookup).to have_received(:validate)
|
258
|
-
end
|
259
|
-
end
|
260
|
-
|
261
|
-
describe InvoiceWithChecksum do
|
262
|
-
context 'with valid VAT number' do
|
263
|
-
it 'is valid' do
|
264
|
-
expect(described_class.new(vat_number: 'DE259597697')).to be_valid
|
265
|
-
end
|
266
|
-
end
|
267
|
-
|
268
|
-
context 'with invalid VAT number' do
|
269
|
-
it 'is not valid' do
|
270
|
-
expect(described_class.new(vat_number: 'DE259597687')).not_to be_valid
|
271
|
-
end
|
272
|
-
end
|
273
|
-
end
|
274
|
-
end
|
data/spec/spec_helper.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'rspec'
|
4
|
-
begin
|
5
|
-
require 'active_model'
|
6
|
-
rescue LoadError
|
7
|
-
puts 'Running specs without active_model extension'
|
8
|
-
end
|
9
|
-
|
10
|
-
require "#{File.dirname(__FILE__)}/../lib/valvat.rb"
|
11
|
-
require 'webmock/rspec'
|
12
|
-
WebMock.allow_net_connect!
|
13
|
-
|
14
|
-
RSpec.configure do |config|
|
15
|
-
config.mock_with :rspec
|
16
|
-
config.filter_run focus: true
|
17
|
-
config.run_all_when_everything_filtered = true
|
18
|
-
end
|
19
|
-
|
20
|
-
I18n.enforce_available_locales = false if defined?(I18n)
|
21
|
-
|
22
|
-
if defined?(ActiveModel)
|
23
|
-
class ModelBase
|
24
|
-
include ActiveModel::Serialization
|
25
|
-
include ActiveModel::Validations
|
26
|
-
|
27
|
-
attr_accessor :attributes
|
28
|
-
|
29
|
-
def initialize(attributes = {})
|
30
|
-
@attributes = attributes
|
31
|
-
end
|
32
|
-
|
33
|
-
def read_attribute_for_validation(key)
|
34
|
-
@attributes[key]
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::AT do
|
6
|
-
%w[ATU13585627 ATU66059506 ATU42403001].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-4]}#{valid_vat[-1]}#{valid_vat[-2]}#{valid_vat[-3]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::BE do
|
6
|
-
%w[BE0123456749 BE0136695962 BE0817331995].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,18 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::BG do
|
6
|
-
%w[BG123456786 BG926067143 BG926067770 BG0101011739 BG0121013021 BG5041019992 BG1521687837
|
7
|
-
BG1431889037].each do |valid_vat|
|
8
|
-
it "returns true on valid VAT #{valid_vat}" do
|
9
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
10
|
-
end
|
11
|
-
|
12
|
-
invalid_vat = "#{valid_vat[0..-4]}#{valid_vat[-1]}#{valid_vat[-2]}#{valid_vat[-4]}"
|
13
|
-
|
14
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
15
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::CY do
|
6
|
-
%w[CY01234567U CY00532445O].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be true
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-4]}#{valid_vat[-2]}#{valid_vat[-3]}#{valid_vat[-1]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::DE do
|
6
|
-
%w[DE280857971 DE281381706 DE283108332 DE813622378 DE813628528 DE814178359 DE811907980].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::DK do
|
6
|
-
%w[DK13585628 DK61126228].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::EE do
|
6
|
-
%w[EE101234568 EE100207415].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be true
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,65 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::ES do
|
6
|
-
%w[ESA13585625 ESB83871236 ESE54507058 ES25139013J ESQ1518001A ESQ5018001G ESX4942978W ESX7676464F ESB10317980
|
7
|
-
ESY3860557K ESY2207765D ES28350472M ES41961720Z ESM1171170X ESK0928769Y ES50095545G].each do |valid_vat|
|
8
|
-
it "returns true on valid VAT #{valid_vat}" do
|
9
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
10
|
-
end
|
11
|
-
|
12
|
-
invalid_vat = "#{valid_vat[0..-6]}#{valid_vat[-2]}#{valid_vat[-5]}#{valid_vat[-4]}#{valid_vat[-3]}#{valid_vat[-1]}"
|
13
|
-
|
14
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
15
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
describe 'if starts with [KLMXYZ\\d], is always a natural person' do
|
20
|
-
invalid_vat = 'ESX65474207'
|
21
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
22
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
describe 'some CIF categories (NPQRSW) require control-digit to be a letter' do
|
27
|
-
invalid_vat = 'ESP65474207'
|
28
|
-
valid_vat = 'ESP6547420G'
|
29
|
-
|
30
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
31
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "returns true on valid VAT #{valid_vat}" do
|
35
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
describe 'some CIF categories (CDFGJNUV) allow both a numeric check digit and a letter' do
|
40
|
-
%w[ESC65474207 ESC6547420G].each do |valid_vat|
|
41
|
-
it "returns true on valid VAT #{valid_vat}" do
|
42
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe 'applies special rules to validation' do
|
48
|
-
describe 'special NIF categories (KLM) require CD to be a letter and first two digits ' \
|
49
|
-
'to be between 01 and 56 (inclusive)' do
|
50
|
-
%w[ESK8201230M ESK0001230B].each do |invalid_vat|
|
51
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
52
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
describe 'arbitrarily invalid VATs' do
|
58
|
-
%w[ESX0000000T ES00000001R ES00000000T ES99999999R].each do |invalid_vat|
|
59
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
60
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::FI do
|
6
|
-
%w[FI13669598 FI20584306 FI01080233].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-4]}#{valid_vat[-1]}#{valid_vat[-2]}#{valid_vat[-3]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::FR do
|
6
|
-
%w[FR60528551658 FR43820567501 FR0H384498879].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::GB do
|
6
|
-
%w[GBGD100 GBHA600].each do |gov_agency_vat|
|
7
|
-
it "returns true on valid VAT for government agency #{gov_agency_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(gov_agency_vat)).to be true
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
%w[GB000000000 GB000000000000].each do |invalid_vat|
|
13
|
-
it 'is false for all zero number' do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'is true for an old format valid vat' do
|
19
|
-
expect(Valvat::Checksum.validate('GB434031494')).to be true
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'is true for a new format valid vat' do
|
23
|
-
expect(Valvat::Checksum.validate('GB434031439')).to be true
|
24
|
-
expect(Valvat::Checksum.validate('GB727255821')).to be true
|
25
|
-
end
|
26
|
-
|
27
|
-
it 'is false for an old format VAT in forbidden group' do
|
28
|
-
expect(Valvat::Checksum.validate('GB999999973')).to be false
|
29
|
-
end
|
30
|
-
|
31
|
-
it 'is false for a new format VAT in forbidden group' do
|
32
|
-
expect(Valvat::Checksum.validate('GB100000034')).to be false
|
33
|
-
end
|
34
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::GR do
|
6
|
-
%w[EL123456783 EL094543092 EL998219694].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::HR do
|
6
|
-
%w[HR06282943396 HR17099025134].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be true
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::HU do
|
6
|
-
%w[HU10672101 HU13460370 HU10747759].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be true
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be false
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,24 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::IE do
|
6
|
-
%w[IE8473625E IE0123459N IE9B12345N IE1113571MH IE2973912UH IE2974611LH
|
7
|
-
IE2974901UH IE3200115LH IE3206791MH IE3208913KH IE3214048CH].each do |valid_vat|
|
8
|
-
it "returns true on valid VAT #{valid_vat}" do
|
9
|
-
expect(Valvat::Checksum.validate(valid_vat)).to eql(true), valid_vat
|
10
|
-
end
|
11
|
-
|
12
|
-
invalid_vat = "#{valid_vat[0..-4]}#{valid_vat[-2]}#{valid_vat[-3]}#{valid_vat[-1]}"
|
13
|
-
|
14
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
15
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
%w[IE0000000XX IE0000000AZ].each do |invalid|
|
20
|
-
it "returns false on invalid VAT #{invalid}" do
|
21
|
-
expect(Valvat::Checksum.validate(invalid)).to be(false)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
|
5
|
-
describe Valvat::Checksum::IT do
|
6
|
-
%w[IT12345670785 IT01897810162 IT00197200132 IT02762750210 IT00146089990].each do |valid_vat|
|
7
|
-
it "returns true on valid VAT #{valid_vat}" do
|
8
|
-
expect(Valvat::Checksum.validate(valid_vat)).to be(true)
|
9
|
-
end
|
10
|
-
|
11
|
-
invalid_vat = "#{valid_vat[0..-3]}#{valid_vat[-1]}#{valid_vat[-2]}"
|
12
|
-
|
13
|
-
it "returns false on invalid VAT #{invalid_vat}" do
|
14
|
-
expect(Valvat::Checksum.validate(invalid_vat)).to be(false)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
it 'returns false on invalid special case VAT IT12345671783' do
|
19
|
-
expect(Valvat::Checksum.validate('IT12345671783')).to be(false)
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'returns false on invalid special case VAT IT00000000133' do
|
23
|
-
expect(Valvat::Checksum.validate('IT00000000133')).to be(false)
|
24
|
-
end
|
25
|
-
end
|