valvat 0.8.1 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +2 -1
  5. data/.travis.yml +30 -16
  6. data/CHANGES.md +45 -2
  7. data/Gemfile +2 -3
  8. data/README.md +96 -46
  9. data/certs/yolk.pem +24 -20
  10. data/gemfiles/activemodel-3-2 +3 -4
  11. data/gemfiles/activemodel-4 +3 -4
  12. data/gemfiles/activemodel-5 +4 -5
  13. data/gemfiles/activemodel-6 +7 -0
  14. data/gemfiles/before-ruby21/activemodel-3-2 +3 -4
  15. data/gemfiles/before-ruby21/activemodel-4 +3 -4
  16. data/gemfiles/before-ruby21/standalone +3 -4
  17. data/gemfiles/standalone +3 -5
  18. data/lib/active_model/validations/valvat_validator.rb +20 -5
  19. data/lib/valvat.rb +3 -1
  20. data/lib/valvat/checksum/gb.rb +30 -13
  21. data/lib/valvat/checksum/ie.rb +1 -1
  22. data/lib/valvat/checksum/nl.rb +5 -0
  23. data/lib/valvat/checksum/si.rb +2 -2
  24. data/lib/valvat/error.rb +28 -0
  25. data/lib/valvat/local.rb +2 -1
  26. data/lib/valvat/locales/en.yml +1 -1
  27. data/lib/valvat/locales/fr.yml +17 -17
  28. data/lib/valvat/locales/pt.yml +28 -28
  29. data/lib/valvat/lookup.rb +11 -43
  30. data/lib/valvat/lookup/fault.rb +30 -0
  31. data/lib/valvat/lookup/request.rb +33 -12
  32. data/lib/valvat/lookup/response.rb +36 -0
  33. data/lib/valvat/utils.rb +11 -3
  34. data/lib/valvat/version.rb +1 -1
  35. data/spec/active_model/validations/valvat_validator_spec.rb +92 -66
  36. data/spec/valvat/checksum/at_spec.rb +2 -2
  37. data/spec/valvat/checksum/be_spec.rb +2 -2
  38. data/spec/valvat/checksum/bg_spec.rb +2 -2
  39. data/spec/valvat/checksum/cy_spec.rb +2 -2
  40. data/spec/valvat/checksum/de_spec.rb +2 -2
  41. data/spec/valvat/checksum/dk_spec.rb +2 -2
  42. data/spec/valvat/checksum/ee_spec.rb +2 -2
  43. data/spec/valvat/checksum/es_spec.rb +2 -2
  44. data/spec/valvat/checksum/fi_spec.rb +2 -2
  45. data/spec/valvat/checksum/fr_spec.rb +2 -2
  46. data/spec/valvat/checksum/gb_spec.rb +5 -3
  47. data/spec/valvat/checksum/gr_spec.rb +2 -2
  48. data/spec/valvat/checksum/hr_spec.rb +2 -2
  49. data/spec/valvat/checksum/hu_spec.rb +2 -2
  50. data/spec/valvat/checksum/ie_spec.rb +8 -2
  51. data/spec/valvat/checksum/it_spec.rb +4 -4
  52. data/spec/valvat/checksum/lt_spec.rb +2 -2
  53. data/spec/valvat/checksum/lu_spec.rb +2 -2
  54. data/spec/valvat/checksum/mt_spec.rb +2 -2
  55. data/spec/valvat/checksum/nl_spec.rb +4 -4
  56. data/spec/valvat/checksum/pl_spec.rb +3 -3
  57. data/spec/valvat/checksum/pt_spec.rb +2 -2
  58. data/spec/valvat/checksum/ro_spec.rb +2 -2
  59. data/spec/valvat/checksum/se_spec.rb +3 -3
  60. data/spec/valvat/checksum/si_spec.rb +7 -7
  61. data/spec/valvat/checksum_spec.rb +2 -2
  62. data/spec/valvat/lockup/fault_spec.rb +32 -0
  63. data/spec/valvat/lockup/request_spec.rb +15 -0
  64. data/spec/valvat/lockup/response_spec.rb +27 -0
  65. data/spec/valvat/lookup_spec.rb +168 -35
  66. data/spec/valvat/syntax_spec.rb +29 -29
  67. data/spec/valvat/utils_spec.rb +28 -8
  68. data/spec/valvat_spec.rb +18 -18
  69. data/valvat.gemspec +1 -0
  70. metadata +52 -25
  71. metadata.gz.sig +0 -0
  72. data/lib/valvat/lookup/request_with_id.rb +0 -31
@@ -0,0 +1,30 @@
1
+ class Valvat
2
+ class Lookup
3
+ class Fault < Response
4
+ private
5
+
6
+ def self.cleanup(hash)
7
+ fault = hash[:fault][:faultstring]
8
+ return {valid: false} if fault == "INVALID_INPUT"
9
+ {error: fault_to_error(fault)}
10
+ end
11
+
12
+ FAULTS = {
13
+ "SERVICE_UNAVAILABLE" => ServiceUnavailable,
14
+ "MS_UNAVAILABLE" => MemberStateUnavailable,
15
+ "INVALID_REQUESTER_INFO" => InvalidRequester,
16
+ "TIMEOUT" => Timeout,
17
+ "VAT_BLOCKED" => BlockedError,
18
+ "IP_BLOCKED" => BlockedError,
19
+ "GLOBAL_MAX_CONCURRENT_REQ" => RateLimitError,
20
+ "GLOBAL_MAX_CONCURRENT_REQ_TIME" => RateLimitError,
21
+ "MS_MAX_CONCURRENT_REQ" => RateLimitError,
22
+ "MS_MAX_CONCURRENT_REQ_TIME" => RateLimitError
23
+ }
24
+
25
+ def self.fault_to_error(fault)
26
+ (FAULTS[fault] || UnknownViesError).new(fault)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,30 +1,51 @@
1
+ require 'savon'
2
+
1
3
  class Valvat
2
4
  class Lookup
3
5
  class Request
4
- def initialize(vat)
5
- @vat = vat
6
+ VIES_WSDL_URL = 'https://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl'
7
+
8
+ def initialize(vat, options)
9
+ @vat = Valvat(vat)
10
+ @options = options || {}
11
+ @requester = @options[:requester] && Valvat(@options[:requester])
6
12
  end
7
13
 
8
- def perform(client)
9
- client.call(action, :message => body, :message_tag => message_tag).to_hash[response_key]
14
+ def perform
15
+ begin
16
+ Response.new(
17
+ client.call(action, message: message, message_tag: message_tag)
18
+ )
19
+ rescue Savon::SOAPFault => fault
20
+ Fault.new(fault)
21
+ end
10
22
  end
11
23
 
12
24
  private
13
25
 
14
- def body
15
- {:country_code => @vat.vat_country_code, :vat_number => @vat.to_s_wo_country}
26
+ def client
27
+ Savon::Client.new({
28
+ wsdl: VIES_WSDL_URL, log: false, follow_redirects: true
29
+ }.merge(@options[:savon] || {}))
16
30
  end
17
31
 
18
- def message_tag
19
- :checkVat
32
+ def message
33
+ {
34
+ country_code: @vat.vat_country_code,
35
+ vat_number: @vat.to_s_wo_country
36
+ }.merge(@requester ? {
37
+ requester_country_code: @requester.vat_country_code,
38
+ requester_vat_number: @requester.to_s_wo_country
39
+ } : {}
40
+ )
20
41
  end
21
42
 
22
- def action
23
- :check_vat
43
+ def message_tag
44
+ @requester ? :checkVatApprox : :checkVat
24
45
  end
25
46
 
26
- def response_key
27
- :check_vat_response
47
+ def action
48
+ @requester ? :check_vat_approx : :check_vat
28
49
  end
29
50
  end
30
51
  end
@@ -0,0 +1,36 @@
1
+ class Valvat
2
+ class Lookup
3
+ class Response
4
+ def initialize(raw)
5
+ @raw = raw
6
+ end
7
+
8
+ def [](key)
9
+ to_hash[key]
10
+ end
11
+
12
+ def to_hash
13
+ @hash ||= self.class.cleanup(@raw.to_hash)
14
+ end
15
+
16
+ private
17
+
18
+ def self.cleanup(hash)
19
+ (hash[:check_vat_approx_response] || hash[:check_vat_response] || {}).inject({}) do |hash, (key, value)|
20
+ hash[cleanup_key(key)] = cleanup_value(value) unless key == :"@xmlns"
21
+ hash
22
+ end
23
+ end
24
+
25
+ TRADER_PREFIX = /\Atrader_/
26
+
27
+ def self.cleanup_key(key)
28
+ key.to_s.sub(TRADER_PREFIX, "").to_sym
29
+ end
30
+
31
+ def self.cleanup_value(value)
32
+ value == "---" ? nil : value
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,15 +1,19 @@
1
+ require 'date'
2
+
1
3
  class Valvat
2
4
  module Utils
3
5
 
4
- EU_COUNTRIES = %w(AT BE BG CY CZ DE DK EE ES FI FR GB GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK)
6
+ EU_MEMBER_STATES = %w(AT BE BG CY CZ DE DK EE ES FI FR GR HR HU IE IT LT LU LV MT NL PL PT RO SE SI SK)
7
+ SUPPORTED_STATES = EU_MEMBER_STATES + %w(GB)
8
+ EU_COUNTRIES = EU_MEMBER_STATES # TODO: Remove constant
5
9
  COUNTRY_PATTERN = /\A([A-Z]{2})(.+)\Z/
6
- NORMALIZE_PATTERN = /[-\.:_\s,;]+/
10
+ NORMALIZE_PATTERN = /[[:space:][:punct:][:cntrl:]]+/
7
11
 
8
12
  def self.split(vat)
9
13
  COUNTRY_PATTERN =~ vat
10
14
  result = [$1, $2]
11
15
  iso_country = vat_country_to_iso_country(result[0])
12
- EU_COUNTRIES.include?(iso_country) ? result : [nil, nil]
16
+ country_is_supported?(iso_country) ? result : [nil, nil]
13
17
  end
14
18
 
15
19
  def self.normalize(vat)
@@ -23,5 +27,9 @@ class Valvat
23
27
  def self.iso_country_to_vat_country(iso_country)
24
28
  iso_country == "GR" ? "EL" : iso_country
25
29
  end
30
+
31
+ def self.country_is_supported?(iso_country)
32
+ SUPPORTED_STATES.include?(iso_country)
33
+ end
26
34
  end
27
35
  end
@@ -1,3 +1,3 @@
1
1
  class Valvat
2
- VERSION = "0.8.1"
2
+ VERSION = "1.0.1"
3
3
  end
@@ -2,27 +2,27 @@ require 'spec_helper'
2
2
 
3
3
  if defined?(ActiveModel)
4
4
  class Invoice < ModelBase
5
- validates :vat_number, :valvat => true
5
+ validates :vat_number, valvat: true
6
6
  end
7
7
 
8
8
  class InvoiceWithLookup < ModelBase
9
- validates :vat_number, :valvat => {:lookup => true}
9
+ validates :vat_number, valvat: {lookup: true}
10
10
  end
11
11
 
12
12
  class InvoiceWithLookupAndFailIfDown < ModelBase
13
- validates :vat_number, :valvat => {:lookup => :fail_if_down}
13
+ validates :vat_number, valvat: {lookup: :fail_if_down}
14
14
  end
15
15
 
16
16
  class InvoiceAllowBlank < ModelBase
17
- validates :vat_number, :valvat => {:allow_blank => true}
17
+ validates :vat_number, valvat: {allow_blank: true}
18
18
  end
19
19
 
20
20
  class InvoiceAllowBlankOnAll < ModelBase
21
- validates :vat_number, :valvat => true, :allow_blank => true
21
+ validates :vat_number, valvat: true, allow_blank: true
22
22
  end
23
23
 
24
24
  class InvoiceCheckCountry < ModelBase
25
- validates :vat_number, :valvat => {:match_country => :country}
25
+ validates :vat_number, valvat: {match_country: :country}
26
26
 
27
27
  def country
28
28
  @attributes[:country]
@@ -30,7 +30,7 @@ if defined?(ActiveModel)
30
30
  end
31
31
 
32
32
  class InvoiceCheckCountryWithLookup < ModelBase
33
- validates :vat_number, :valvat => {:match_country => :country, :lookup => true}
33
+ validates :vat_number, valvat: {match_country: :country, lookup: true}
34
34
 
35
35
  def country
36
36
  @attributes[:country]
@@ -38,18 +38,22 @@ if defined?(ActiveModel)
38
38
  end
39
39
 
40
40
  class InvoiceWithChecksum < ModelBase
41
- validates :vat_number, :valvat => {:checksum => true}
41
+ validates :vat_number, valvat: {checksum: true}
42
42
  end
43
43
 
44
44
  describe Invoice do
45
- context "with valid vat number" do
45
+ before do
46
+ I18n.locale = :en
47
+ end
48
+
49
+ context "with valid VAT number" do
46
50
  it "should be valid" do
47
- expect(Invoice.new(:vat_number => "DE259597697")).to be_valid
51
+ expect(Invoice.new(vat_number: "DE259597697")).to be_valid
48
52
  end
49
53
  end
50
54
 
51
- context "with invalid vat number" do
52
- let(:invoice) { Invoice.new(:vat_number => "DE259597697123") }
55
+ context "with invalid VAT number" do
56
+ let(:invoice) { Invoice.new(vat_number: "DE259597697123") }
53
57
 
54
58
  it "should not be valid" do
55
59
  expect(invoice).not_to be_valid
@@ -57,13 +61,35 @@ if defined?(ActiveModel)
57
61
 
58
62
  it "should add default (country specific) error message" do
59
63
  invoice.valid?
60
- expect(invoice.errors[:vat_number]).to eql(["is not a valid German vat number"])
64
+ expect(invoice.errors[:vat_number]).to eql(["is not a valid German VAT number"])
65
+ end
66
+
67
+ context "on DE locale" do
68
+ before do
69
+ I18n.locale = :de
70
+ end
71
+
72
+ it "should add translated error message" do
73
+ invoice.valid?
74
+ expect(invoice.errors[:vat_number]).to eql(["ist keine gültige deutsche USt-IdNr."])
75
+ end
76
+ end
77
+
78
+ context "on PT locale" do
79
+ before do
80
+ I18n.locale = :pt
81
+ end
82
+
83
+ it "should add translated error message" do
84
+ invoice.valid?
85
+ expect(invoice.errors[:vat_number]).to eql(["O NIF alemão não é válido."])
86
+ end
61
87
  end
62
88
 
63
89
  context "with i18n translation in place" do
64
90
  before do
65
- I18n.backend.store_translations(:en, :activemodel => {
66
- :errors => {:models => {:invoice => {:invalid_vat => "is ugly."}}}
91
+ I18n.backend.store_translations(:en, activemodel: {
92
+ errors: {models: {invoice: {invalid_vat: "is ugly."}}}
67
93
  })
68
94
  end
69
95
 
@@ -77,165 +103,165 @@ if defined?(ActiveModel)
77
103
 
78
104
  context "with i18n translation with country adjective placeholder in place" do
79
105
  before do
80
- I18n.backend.store_translations(:en, :activemodel => {
81
- :errors => {:models => {:invoice => {:invalid_vat => "is not a %{country_adjective} vat"}}}
106
+ I18n.backend.store_translations(:en, activemodel: {
107
+ errors: {models: {invoice: {invalid_vat: "is not a %{country_adjective} vat"}}}
82
108
  })
83
109
  end
84
110
 
85
111
  after { I18n.reload! }
86
112
 
87
113
  it "should replace country adjective placeholder" do
88
- invoice = Invoice.new(:vat_number => "IE123")
114
+ invoice = Invoice.new(vat_number: "IE123")
89
115
  invoice.valid?
90
116
  expect(invoice.errors[:vat_number]).to eql(["is not a Irish vat"])
91
117
  end
92
118
 
93
119
  it "should fall back to 'European' if country is missing" do
94
- invoice = Invoice.new(:vat_number => "XX123")
120
+ invoice = Invoice.new(vat_number: "XX123")
95
121
  invoice.valid?
96
122
  expect(invoice.errors[:vat_number]).to eql(["is not a European vat"])
97
123
  end
98
124
  end
99
125
  end
100
126
 
101
- context "with blank vat number" do
127
+ context "with blank VAT number" do
102
128
  it "should not be valid" do
103
- expect(Invoice.new(:vat_number => "")).not_to be_valid
104
- expect(Invoice.new(:vat_number => nil)).not_to be_valid
129
+ expect(Invoice.new(vat_number: "")).not_to be_valid
130
+ expect(Invoice.new(vat_number: nil)).not_to be_valid
105
131
  end
106
132
  end
107
133
  end
108
134
 
109
135
  describe InvoiceWithLookup do
110
- context "with valid but not existing vat number" do
136
+ context "with valid but not existing VAT number" do
111
137
  before do
112
- allow(Valvat::Syntax).to receive_messages(:validate => true)
113
- allow(Valvat::Lookup).to receive_messages(:validate => false)
138
+ allow(Valvat::Syntax).to receive_messages(validate: true)
139
+ allow(Valvat::Lookup).to receive_messages(validate: false)
114
140
  end
115
141
 
116
142
  it "should not be valid" do
117
- expect(InvoiceWithLookup.new(:vat_number => "DE123")).not_to be_valid
143
+ expect(InvoiceWithLookup.new(vat_number: "DE123")).not_to be_valid
118
144
  end
119
145
  end
120
146
 
121
- context "with valid and existing vat number" do
147
+ context "with valid and existing VAT number" do
122
148
  before do
123
- allow(Valvat::Syntax).to receive_messages(:validate => true)
124
- allow(Valvat::Lookup).to receive_messages(:validate => true)
149
+ allow(Valvat::Syntax).to receive_messages(validate: true)
150
+ allow(Valvat::Lookup).to receive_messages(validate: true)
125
151
  end
126
152
 
127
153
  it "should be valid" do
128
- expect(InvoiceWithLookup.new(:vat_number => "DE123")).to be_valid
154
+ expect(InvoiceWithLookup.new(vat_number: "DE123")).to be_valid
129
155
  end
130
156
  end
131
157
 
132
- context "with valid vat number and VIES country service down" do
158
+ context "with valid VAT number and VIES country service down" do
133
159
  before do
134
- allow(Valvat::Syntax).to receive_messages(:validate => true)
135
- allow(Valvat::Lookup).to receive_messages(:validate => nil)
160
+ allow(Valvat::Syntax).to receive_messages(validate: true)
161
+ allow(Valvat::Lookup).to receive_messages(validate: nil)
136
162
  end
137
163
 
138
164
  it "should be valid" do
139
- expect(InvoiceWithLookup.new(:vat_number => "DE123")).to be_valid
165
+ expect(InvoiceWithLookup.new(vat_number: "DE123")).to be_valid
140
166
  end
141
167
  end
142
168
  end
143
169
 
144
170
  describe InvoiceWithLookupAndFailIfDown do
145
- context "with valid vat number and VIES country service down" do
171
+ context "with valid VAT number and VIES country service down" do
146
172
  before do
147
- allow(Valvat::Syntax).to receive_messages(:validate => true)
148
- allow(Valvat::Lookup).to receive_messages(:validate => nil)
173
+ allow(Valvat::Syntax).to receive_messages(validate: true)
174
+ allow(Valvat::Lookup).to receive_messages(validate: nil)
149
175
  end
150
176
 
151
177
  it "should not be valid" do
152
- expect(InvoiceWithLookupAndFailIfDown.new(:vat_number => "DE123")).not_to be_valid
178
+ expect(InvoiceWithLookupAndFailIfDown.new(vat_number: "DE123")).not_to be_valid
153
179
  end
154
180
  end
155
181
  end
156
182
 
157
183
  describe InvoiceAllowBlank do
158
- context "with blank vat number" do
184
+ context "with blank VAT number" do
159
185
  it "should be valid" do
160
- expect(InvoiceAllowBlank.new(:vat_number => "")).to be_valid
161
- expect(InvoiceAllowBlank.new(:vat_number => nil)).to be_valid
186
+ expect(InvoiceAllowBlank.new(vat_number: "")).to be_valid
187
+ expect(InvoiceAllowBlank.new(vat_number: nil)).to be_valid
162
188
  end
163
189
  end
164
190
  end
165
191
 
166
192
  describe InvoiceAllowBlankOnAll do
167
- context "with blank vat number" do
193
+ context "with blank VAT number" do
168
194
  it "should be valid" do
169
- expect(InvoiceAllowBlankOnAll.new(:vat_number => "")).to be_valid
170
- expect(InvoiceAllowBlankOnAll.new(:vat_number => nil)).to be_valid
195
+ expect(InvoiceAllowBlankOnAll.new(vat_number: "")).to be_valid
196
+ expect(InvoiceAllowBlankOnAll.new(vat_number: nil)).to be_valid
171
197
  end
172
198
  end
173
199
  end
174
200
 
175
201
  describe InvoiceCheckCountry do
176
202
  it "should be not valid on blank country" do
177
- expect(InvoiceCheckCountry.new(:country => nil, :vat_number => "DE259597697")).not_to be_valid
178
- expect(InvoiceCheckCountry.new(:country => "", :vat_number => "DE259597697")).not_to be_valid
203
+ expect(InvoiceCheckCountry.new(country: nil, vat_number: "DE259597697")).not_to be_valid
204
+ expect(InvoiceCheckCountry.new(country: "", vat_number: "DE259597697")).not_to be_valid
179
205
  end
180
206
 
181
207
  it "should be not valid on wired country" do
182
- expect(InvoiceCheckCountry.new(:country => "XAXXX", :vat_number => "DE259597697")).not_to be_valid
183
- expect(InvoiceCheckCountry.new(:country => "ZO", :vat_number => "DE259597697")).not_to be_valid
208
+ expect(InvoiceCheckCountry.new(country: "XAXXX", vat_number: "DE259597697")).not_to be_valid
209
+ expect(InvoiceCheckCountry.new(country: "ZO", vat_number: "DE259597697")).not_to be_valid
184
210
  end
185
211
 
186
212
  it "should be not valid on mismatching (eu) country" do
187
- expect(InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697")).not_to be_valid
188
- expect(InvoiceCheckCountry.new(:country => "AT", :vat_number => "DE259597697")).not_to be_valid
189
- expect(InvoiceCheckCountry.new(:country => "DE", :vat_number => "ATU65931334")).not_to be_valid
213
+ expect(InvoiceCheckCountry.new(country: "FR", vat_number: "DE259597697")).not_to be_valid
214
+ expect(InvoiceCheckCountry.new(country: "AT", vat_number: "DE259597697")).not_to be_valid
215
+ expect(InvoiceCheckCountry.new(country: "DE", vat_number: "ATU65931334")).not_to be_valid
190
216
  end
191
217
 
192
218
  it "should be valid on matching country" do
193
- expect(InvoiceCheckCountry.new(:country => "DE", :vat_number => "DE259597697")).to be_valid
194
- expect(InvoiceCheckCountry.new(:country => "AT", :vat_number => "ATU65931334")).to be_valid
219
+ expect(InvoiceCheckCountry.new(country: "DE", vat_number: "DE259597697")).to be_valid
220
+ expect(InvoiceCheckCountry.new(country: "AT", vat_number: "ATU65931334")).to be_valid
195
221
  end
196
222
 
197
223
  it "should give back error message with country from :country_match" do
198
- invoice = InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697")
224
+ invoice = InvoiceCheckCountry.new(country: "FR", vat_number: "DE259597697")
199
225
  invoice.valid?
200
- expect(invoice.errors[:vat_number]).to eql(["is not a valid French vat number"])
226
+ expect(invoice.errors[:vat_number]).to eql(["is not a valid French VAT number"])
201
227
  end
202
228
 
203
- it "should give back error message with country from :country_match even on invalid vat number" do
204
- invoice = InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697123")
229
+ it "should give back error message with country from :country_match even on invalid VAT number" do
230
+ invoice = InvoiceCheckCountry.new(country: "FR", vat_number: "DE259597697123")
205
231
  invoice.valid?
206
- expect(invoice.errors[:vat_number]).to eql(["is not a valid French vat number"])
232
+ expect(invoice.errors[:vat_number]).to eql(["is not a valid French VAT number"])
207
233
  end
208
234
  end
209
235
 
210
236
  describe InvoiceCheckCountryWithLookup do
211
237
  before do
212
- allow(Valvat::Syntax).to receive_messages(:validate => true)
213
- allow(Valvat::Lookup).to receive_messages(:validate => true)
238
+ allow(Valvat::Syntax).to receive_messages(validate: true)
239
+ allow(Valvat::Lookup).to receive_messages(validate: true)
214
240
  end
215
241
 
216
242
  it "avoids lookup or syntax check on failed because of mismatching country" do
217
243
  expect(Valvat::Syntax).not_to receive(:validate)
218
244
  expect(Valvat::Lookup).not_to receive(:validate)
219
- InvoiceCheckCountryWithLookup.new(:country => "FR", :vat_number => "DE259597697").valid?
245
+ InvoiceCheckCountryWithLookup.new(country: "FR", vat_number: "DE259597697").valid?
220
246
  end
221
247
 
222
248
  it "check syntax and looup on matching country" do
223
249
  expect(Valvat::Syntax).to receive(:validate).and_return(true)
224
250
  expect(Valvat::Lookup).to receive(:validate).and_return(true)
225
- InvoiceCheckCountryWithLookup.new(:country => "DE", :vat_number => "DE259597697").valid?
251
+ InvoiceCheckCountryWithLookup.new(country: "DE", vat_number: "DE259597697").valid?
226
252
  end
227
253
  end
228
254
 
229
255
  describe InvoiceWithChecksum do
230
- context "with valid vat number" do
256
+ context "with valid VAT number" do
231
257
  it "should be valid" do
232
- expect(InvoiceWithChecksum.new(:vat_number => "DE259597697")).to be_valid
258
+ expect(InvoiceWithChecksum.new(vat_number: "DE259597697")).to be_valid
233
259
  end
234
260
  end
235
261
 
236
- context "with invalid vat number" do
262
+ context "with invalid VAT number" do
237
263
  it "should not be valid" do
238
- expect(InvoiceWithChecksum.new(:vat_number => "DE259597687")).not_to be_valid
264
+ expect(InvoiceWithChecksum.new(vat_number: "DE259597687")).not_to be_valid
239
265
  end
240
266
  end
241
267
  end