defra_ruby_validators 2.5.0 → 2.5.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/config/locales/defra_ruby/validators/mobile_phone_number_validator/en.yml +7 -0
  4. data/lib/defra_ruby/validators/companies_house_number_validator.rb +3 -3
  5. data/lib/defra_ruby/validators/mobile_phone_number_validator.rb +32 -0
  6. data/lib/defra_ruby/validators/version.rb +1 -1
  7. data/lib/defra_ruby/validators.rb +1 -0
  8. metadata +24 -175
  9. data/spec/defra_ruby/validators/business_type_validator_spec.rb +0 -56
  10. data/spec/defra_ruby/validators/companies_house_number_validator_spec.rb +0 -124
  11. data/spec/defra_ruby/validators/companies_house_service_spec.rb +0 -98
  12. data/spec/defra_ruby/validators/configuration_spec.rb +0 -49
  13. data/spec/defra_ruby/validators/email_validator_spec.rb +0 -46
  14. data/spec/defra_ruby/validators/grid_reference_validator_spec.rb +0 -57
  15. data/spec/defra_ruby/validators/location_validator_spec.rb +0 -56
  16. data/spec/defra_ruby/validators/past_date_validator_spec.rb +0 -35
  17. data/spec/defra_ruby/validators/phone_number_validator_spec.rb +0 -59
  18. data/spec/defra_ruby/validators/position_validator_spec.rb +0 -47
  19. data/spec/defra_ruby/validators/token_validator_spec.rb +0 -45
  20. data/spec/defra_ruby/validators/true_false_validator_spec.rb +0 -37
  21. data/spec/defra_ruby/validators_spec.rb +0 -12
  22. data/spec/examples.txt +0 -189
  23. data/spec/spec_helper.rb +0 -87
  24. data/spec/support/defra_ruby_validators.rb +0 -16
  25. data/spec/support/helpers/text_generator.rb +0 -17
  26. data/spec/support/helpers/translator.rb +0 -15
  27. data/spec/support/i18n.rb +0 -8
  28. data/spec/support/pry.rb +0 -7
  29. data/spec/support/shared_examples/validators/characters_validator.rb +0 -29
  30. data/spec/support/shared_examples/validators/invalid_record.rb +0 -29
  31. data/spec/support/shared_examples/validators/length_validator.rb +0 -29
  32. data/spec/support/shared_examples/validators/presence_validator.rb +0 -29
  33. data/spec/support/shared_examples/validators/selection_validator.rb +0 -40
  34. data/spec/support/shared_examples/validators/valid_record.rb +0 -12
  35. data/spec/support/shared_examples/validators/validator.rb +0 -8
  36. data/spec/support/simplecov.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 8964c61f339abf2c0d3a469cad34c7234caf819e1844f3968e04d85147cc67c4
4
- data.tar.gz: bf2ad073d11e02f698039b03286c1519ff01126d384119b8f3c0785b2c1cf6cd
3
+ metadata.gz: 54f780cf89fcc1888cd3b9af95707c6e3ac2a0d0dcd1e304ab6d9b2933b69ef9
4
+ data.tar.gz: 895551a30493fb79367289728c28e7e09873c1c6def93e685c70f7076b67f46c
5
5
  SHA512:
6
- metadata.gz: f24569969b429ffd1c1d7db53c94420f47aa0b32538c0584403458ee4fdf45cb72a911341ef993c959a298a8256b94b3511867a54cb9fa098d04e4573547ee6a
7
- data.tar.gz: 4b40e37219533ce6c295b33b00c267c45550855790832f37f363db07f63d83c8d2a04cbfd4a8bf6f1762f52639f56888b614d741b13712614ed02fe0113cbad0
6
+ metadata.gz: '07863b0bde9327c8384a93b8e1c681b02ef7fedce040a36d4f17aa9435a4783e4db51fcf41a29469ea3b6d9599324b89f8ab5c3c830040b563894db33449d8e9'
7
+ data.tar.gz: 4e07b525aae83437d5ad450e4e3989f402caf04346efc130543440a41084e2a4ecc48168894f88e261fc66c269aa48389282dedd17b2031ce0a889924b99720c
data/README.md CHANGED
@@ -144,6 +144,16 @@ Add it to your model or form object using
144
144
  validates :phone_number, "defra_ruby/validators/phone_number": true
145
145
  ```
146
146
 
147
+ ### Mobile phone number
148
+
149
+ This validator checks the value is present, is not too long (15 is th maximum length for any phone number), is a mobile phone number, and is in the correct format as per [E.164](https://en.wikipedia.org/wiki/E.164) (we use [phonelib](https://github.com/daddyz/phonelib) to check the format).
150
+
151
+ Add it to your model or form object using
152
+
153
+ ```ruby
154
+ validates :mobile_phone_number, "defra_ruby/validators/mobile_phone_number": true
155
+ ```
156
+
147
157
  ### Position
148
158
 
149
159
  This validator checks the value provided for 'position' i.e. someones role or title within an organisation. This is an optional field so the validator has to handle the value being blank. If it's not then it can be no longer than 70 characters and only include letters, spaces, commas, full stops, hyphens and apostrophes else it will return an error.
@@ -0,0 +1,7 @@
1
+ en:
2
+ defra_ruby:
3
+ validators:
4
+ MobilePhoneNumberValidator:
5
+ blank: "Enter a mobile phone number"
6
+ invalid_format: "Enter a valid mobile phone number"
7
+ too_long: "Check the number you entered - it should have no more than than 15 characters"
@@ -9,9 +9,8 @@ module DefraRuby
9
9
  # SC534714, CE000958
10
10
  # IP00141R, IP27702R, SP02252R
11
11
  # https://assets.publishing.service.gov.uk/government/uploads/system/uploads/attachment_data/file/426891/uniformResourceIdentifiersCustomerGuide.pdf
12
- VALID_COMPANIES_HOUSE_REGISTRATION_NUMBER_REGEX = Regexp.new(
12
+ VALID_COMPANIES_HOUSE_REGISTRATION_NUMBER_REGEX =
13
13
  /\A(\d{8,8}$)|([a-zA-Z]{2}\d{6}$)|([a-zA-Z]{2}\d{5}[a-zA-Z]{1}$)\z/i
14
- ).freeze
15
14
 
16
15
  def validate_each(record, attribute, value)
17
16
  return false unless value_is_present?(record, attribute, value)
@@ -31,7 +30,8 @@ module DefraRuby
31
30
  end
32
31
 
33
32
  def format_is_valid?(record, attribute, value)
34
- return true if value.match?(VALID_COMPANIES_HOUSE_REGISTRATION_NUMBER_REGEX)
33
+ # All-zero values are invalid, despite matching the main regex
34
+ return true if value.match?(VALID_COMPANIES_HOUSE_REGISTRATION_NUMBER_REGEX) && !value.match(/^0+$/)
35
35
 
36
36
  add_validation_error(record, attribute, :invalid_format)
37
37
  false
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "phonelib"
4
+
5
+ module DefraRuby
6
+ module Validators
7
+ class MobilePhoneNumberValidator < BaseValidator
8
+ include CanValidatePresence
9
+ include CanValidateLength
10
+
11
+ MAX_LENGTH = 15
12
+
13
+ def validate_each(record, attribute, value)
14
+ return false unless value_is_present?(record, attribute, value)
15
+ return false unless value_is_not_too_long?(record, attribute, value, MAX_LENGTH)
16
+
17
+ valid_format?(record, attribute, value)
18
+ end
19
+
20
+ private
21
+
22
+ def valid_format?(record, attribute, value)
23
+ Phonelib.default_country = "GB"
24
+ return true if Phonelib.valid?(value) && Phonelib.parse(value).type == :mobile
25
+
26
+ add_validation_error(record, attribute, :invalid_format)
27
+ false
28
+ end
29
+
30
+ end
31
+ end
32
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module DefraRuby
4
4
  module Validators
5
- VERSION = "2.5.0"
5
+ VERSION = "2.5.2"
6
6
  end
7
7
  end
@@ -18,6 +18,7 @@ require_relative "validators/email_validator"
18
18
  require_relative "validators/grid_reference_validator"
19
19
  require_relative "validators/location_validator"
20
20
  require_relative "validators/phone_number_validator"
21
+ require_relative "validators/mobile_phone_number_validator"
21
22
  require_relative "validators/position_validator"
22
23
  require_relative "validators/token_validator"
23
24
  require_relative "validators/true_false_validator"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defra_ruby_validators
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Defra
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-11 00:00:00.000000000 Z
11
+ date: 2023-06-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -25,7 +25,7 @@ dependencies:
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: os_map_ref
28
+ name: i18n
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
@@ -39,7 +39,7 @@ dependencies:
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
- name: phonelib
42
+ name: matrix
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
@@ -53,21 +53,7 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
55
  - !ruby/object:Gem::Dependency
56
- name: rest-client
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '2.0'
62
- type: :runtime
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '2.0'
69
- - !ruby/object:Gem::Dependency
70
- name: validates_email_format_of
56
+ name: os_map_ref
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
59
  - - ">="
@@ -81,55 +67,13 @@ dependencies:
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
- name: defra_ruby_style
85
- requirement: !ruby/object:Gem::Requirement
86
- requirements:
87
- - - ">="
88
- - !ruby/object:Gem::Version
89
- version: '0'
90
- type: :development
91
- prerelease: false
92
- version_requirements: !ruby/object:Gem::Requirement
93
- requirements:
94
- - - ">="
95
- - !ruby/object:Gem::Version
96
- version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: dotenv
99
- requirement: !ruby/object:Gem::Requirement
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- version: '0'
104
- type: :development
105
- prerelease: false
106
- version_requirements: !ruby/object:Gem::Requirement
107
- requirements:
108
- - - ">="
109
- - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
112
- name: github_changelog_generator
113
- requirement: !ruby/object:Gem::Requirement
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- requirements:
122
- - - ">="
123
- - !ruby/object:Gem::Version
124
- version: '0'
125
- - !ruby/object:Gem::Dependency
126
- name: i18n
70
+ name: phonelib
127
71
  requirement: !ruby/object:Gem::Requirement
128
72
  requirements:
129
73
  - - ">="
130
74
  - !ruby/object:Gem::Version
131
75
  version: '0'
132
- type: :development
76
+ type: :runtime
133
77
  prerelease: false
134
78
  version_requirements: !ruby/object:Gem::Requirement
135
79
  requirements:
@@ -137,75 +81,33 @@ dependencies:
137
81
  - !ruby/object:Gem::Version
138
82
  version: '0'
139
83
  - !ruby/object:Gem::Dependency
140
- name: pry-byebug
84
+ name: rest-client
141
85
  requirement: !ruby/object:Gem::Requirement
142
86
  requirements:
143
- - - ">="
87
+ - - "~>"
144
88
  - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
89
+ version: '2.0'
90
+ type: :runtime
147
91
  prerelease: false
148
92
  version_requirements: !ruby/object:Gem::Requirement
149
93
  requirements:
150
- - - ">="
94
+ - - "~>"
151
95
  - !ruby/object:Gem::Version
152
- version: '0'
96
+ version: '2.0'
153
97
  - !ruby/object:Gem::Dependency
154
- name: rake
98
+ name: validates_email_format_of
155
99
  requirement: !ruby/object:Gem::Requirement
156
100
  requirements:
157
101
  - - ">="
158
102
  - !ruby/object:Gem::Version
159
103
  version: '0'
160
- type: :development
104
+ type: :runtime
161
105
  prerelease: false
162
106
  version_requirements: !ruby/object:Gem::Requirement
163
107
  requirements:
164
108
  - - ">="
165
109
  - !ruby/object:Gem::Version
166
110
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: rspec
169
- requirement: !ruby/object:Gem::Requirement
170
- requirements:
171
- - - "~>"
172
- - !ruby/object:Gem::Version
173
- version: '3.0'
174
- type: :development
175
- prerelease: false
176
- version_requirements: !ruby/object:Gem::Requirement
177
- requirements:
178
- - - "~>"
179
- - !ruby/object:Gem::Version
180
- version: '3.0'
181
- - !ruby/object:Gem::Dependency
182
- name: simplecov
183
- requirement: !ruby/object:Gem::Requirement
184
- requirements:
185
- - - "~>"
186
- - !ruby/object:Gem::Version
187
- version: 0.17.1
188
- type: :development
189
- prerelease: false
190
- version_requirements: !ruby/object:Gem::Requirement
191
- requirements:
192
- - - "~>"
193
- - !ruby/object:Gem::Version
194
- version: 0.17.1
195
- - !ruby/object:Gem::Dependency
196
- name: webmock
197
- requirement: !ruby/object:Gem::Requirement
198
- requirements:
199
- - - "~>"
200
- - !ruby/object:Gem::Version
201
- version: '3.4'
202
- type: :development
203
- prerelease: false
204
- version_requirements: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - "~>"
207
- - !ruby/object:Gem::Version
208
- version: '3.4'
209
111
  description: Package of validations commonly used in Defra Rails based digital services
210
112
  email:
211
113
  - alan.cruikshanks@environment-agency.gov.uk
@@ -223,6 +125,7 @@ files:
223
125
  - config/locales/defra_ruby/validators/email_validator/en.yml
224
126
  - config/locales/defra_ruby/validators/grid_reference_validator/en.yml
225
127
  - config/locales/defra_ruby/validators/location_validator/en.yml
128
+ - config/locales/defra_ruby/validators/mobile_phone_number_validator/en.yml
226
129
  - config/locales/defra_ruby/validators/past_date_validator/en.yml
227
130
  - config/locales/defra_ruby/validators/phone_number_validator/en.yml
228
131
  - config/locales/defra_ruby/validators/position_validator/en.yml
@@ -242,6 +145,7 @@ files:
242
145
  - lib/defra_ruby/validators/engine.rb
243
146
  - lib/defra_ruby/validators/grid_reference_validator.rb
244
147
  - lib/defra_ruby/validators/location_validator.rb
148
+ - lib/defra_ruby/validators/mobile_phone_number_validator.rb
245
149
  - lib/defra_ruby/validators/past_date_validator.rb
246
150
  - lib/defra_ruby/validators/phone_number_validator.rb
247
151
  - lib/defra_ruby/validators/position_validator.rb
@@ -249,40 +153,13 @@ files:
249
153
  - lib/defra_ruby/validators/true_false_validator.rb
250
154
  - lib/defra_ruby/validators/version.rb
251
155
  - lib/defra_ruby_validators.rb
252
- - spec/defra_ruby/validators/business_type_validator_spec.rb
253
- - spec/defra_ruby/validators/companies_house_number_validator_spec.rb
254
- - spec/defra_ruby/validators/companies_house_service_spec.rb
255
- - spec/defra_ruby/validators/configuration_spec.rb
256
- - spec/defra_ruby/validators/email_validator_spec.rb
257
- - spec/defra_ruby/validators/grid_reference_validator_spec.rb
258
- - spec/defra_ruby/validators/location_validator_spec.rb
259
- - spec/defra_ruby/validators/past_date_validator_spec.rb
260
- - spec/defra_ruby/validators/phone_number_validator_spec.rb
261
- - spec/defra_ruby/validators/position_validator_spec.rb
262
- - spec/defra_ruby/validators/token_validator_spec.rb
263
- - spec/defra_ruby/validators/true_false_validator_spec.rb
264
- - spec/defra_ruby/validators_spec.rb
265
- - spec/examples.txt
266
- - spec/spec_helper.rb
267
- - spec/support/defra_ruby_validators.rb
268
- - spec/support/helpers/text_generator.rb
269
- - spec/support/helpers/translator.rb
270
- - spec/support/i18n.rb
271
- - spec/support/pry.rb
272
- - spec/support/shared_examples/validators/characters_validator.rb
273
- - spec/support/shared_examples/validators/invalid_record.rb
274
- - spec/support/shared_examples/validators/length_validator.rb
275
- - spec/support/shared_examples/validators/presence_validator.rb
276
- - spec/support/shared_examples/validators/selection_validator.rb
277
- - spec/support/shared_examples/validators/valid_record.rb
278
- - spec/support/shared_examples/validators/validator.rb
279
- - spec/support/simplecov.rb
280
156
  homepage: https://github.com/DEFRA/defra-ruby-validators
281
157
  licenses:
282
158
  - The Open Government Licence (OGL) Version 3
283
159
  metadata:
284
160
  allowed_push_host: https://rubygems.org
285
- post_install_message:
161
+ rubygems_mfa_required: 'true'
162
+ post_install_message:
286
163
  rdoc_options: []
287
164
  require_paths:
288
165
  - lib
@@ -290,43 +167,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
290
167
  requirements:
291
168
  - - ">="
292
169
  - !ruby/object:Gem::Version
293
- version: '0'
170
+ version: '3.1'
294
171
  required_rubygems_version: !ruby/object:Gem::Requirement
295
172
  requirements:
296
173
  - - ">="
297
174
  - !ruby/object:Gem::Version
298
175
  version: '0'
299
176
  requirements: []
300
- rubygems_version: 3.1.2
301
- signing_key:
177
+ rubygems_version: 3.3.7
178
+ signing_key:
302
179
  specification_version: 4
303
180
  summary: Defra ruby on rails validations
304
- test_files:
305
- - spec/spec_helper.rb
306
- - spec/defra_ruby/validators_spec.rb
307
- - spec/defra_ruby/validators/past_date_validator_spec.rb
308
- - spec/defra_ruby/validators/companies_house_service_spec.rb
309
- - spec/defra_ruby/validators/configuration_spec.rb
310
- - spec/defra_ruby/validators/phone_number_validator_spec.rb
311
- - spec/defra_ruby/validators/position_validator_spec.rb
312
- - spec/defra_ruby/validators/grid_reference_validator_spec.rb
313
- - spec/defra_ruby/validators/business_type_validator_spec.rb
314
- - spec/defra_ruby/validators/companies_house_number_validator_spec.rb
315
- - spec/defra_ruby/validators/token_validator_spec.rb
316
- - spec/defra_ruby/validators/true_false_validator_spec.rb
317
- - spec/defra_ruby/validators/location_validator_spec.rb
318
- - spec/defra_ruby/validators/email_validator_spec.rb
319
- - spec/examples.txt
320
- - spec/support/simplecov.rb
321
- - spec/support/i18n.rb
322
- - spec/support/pry.rb
323
- - spec/support/defra_ruby_validators.rb
324
- - spec/support/helpers/translator.rb
325
- - spec/support/helpers/text_generator.rb
326
- - spec/support/shared_examples/validators/selection_validator.rb
327
- - spec/support/shared_examples/validators/invalid_record.rb
328
- - spec/support/shared_examples/validators/presence_validator.rb
329
- - spec/support/shared_examples/validators/characters_validator.rb
330
- - spec/support/shared_examples/validators/length_validator.rb
331
- - spec/support/shared_examples/validators/valid_record.rb
332
- - spec/support/shared_examples/validators/validator.rb
181
+ test_files: []
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- module Test
6
- BusinessTypeValidatable = Struct.new(:business_type) do
7
- include ActiveModel::Validations
8
-
9
- validates :business_type, "defra_ruby/validators/business_type": true
10
- end
11
- end
12
-
13
- module DefraRuby
14
- module Validators
15
- RSpec.describe BusinessTypeValidator do
16
-
17
- valid_type = %w[soleTrader limitedCompany partnership limitedLiabilityPartnership localAuthority charity].sample
18
- invalid_type = "coven"
19
-
20
- it_behaves_like("a validator")
21
- it_behaves_like(
22
- "a selection validator",
23
- BusinessTypeValidator,
24
- Test::BusinessTypeValidatable,
25
- :business_type,
26
- valid: valid_type, invalid: invalid_type
27
- )
28
-
29
- context "when the value is overseas" do
30
- validatable = Test::BusinessTypeValidatable.new("overseas")
31
-
32
- context "when overseas_allowed is enabled" do
33
- before do
34
- allow_any_instance_of(DefraRuby::Validators::BaseValidator).to receive(:options).and_return(allow_overseas: true)
35
- end
36
-
37
- it_behaves_like "a valid record", validatable
38
- end
39
-
40
- context "when overseas_allowed is not enabled" do
41
- before do
42
- allow_any_instance_of(DefraRuby::Validators::BaseValidator).to receive(:options).and_return({})
43
- end
44
-
45
- error_message = Helpers::Translator.error_message(BusinessTypeValidator, :inclusion)
46
-
47
- it_behaves_like "an invalid record",
48
- validatable: validatable,
49
- attribute: :business_type,
50
- error: :inclusion,
51
- error_message: error_message
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,124 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper"
4
-
5
- module Test
6
- CompaniesHouseNumberValidatable = Struct.new(:company_no) do
7
- include ActiveModel::Validations
8
-
9
- validates :company_no, "defra_ruby/validators/companies_house_number": true
10
- end
11
-
12
- CompaniesHouseCompanyTypeAndNumberValidatable = Struct.new(:company_no) do
13
- include ActiveModel::Validations
14
-
15
- validates :company_no, "defra_ruby/validators/companies_house_number": { company_type: "ltd" }
16
- end
17
- end
18
-
19
- module DefraRuby
20
- module Validators
21
- RSpec.describe CompaniesHouseNumberValidator do
22
-
23
- valid_numbers = %w[10997904 09764739 SC534714 IP00141R]
24
- invalid_format_number = "foobar42"
25
- unknown_number = "99999999"
26
- inactive_number = "07281919"
27
-
28
- it_behaves_like "a validator"
29
-
30
- describe "#validate_each" do
31
- context "when given a valid company number" do
32
- before do
33
- allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:active)
34
- end
35
-
36
- valid_numbers.each do |company_no|
37
- context "like #{company_no}" do
38
- it_behaves_like "a valid record", Test::CompaniesHouseNumberValidatable.new(company_no)
39
- end
40
- end
41
- end
42
-
43
- context "when given an invalid company number" do
44
- context "because it is blank" do
45
- validatable = Test::CompaniesHouseNumberValidatable.new
46
- error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :blank)
47
-
48
- it_behaves_like "an invalid record",
49
- validatable: validatable,
50
- attribute: :company_no,
51
- error: :blank,
52
- error_message: error_message
53
- end
54
-
55
- context "because the format is wrong" do
56
- validatable = Test::CompaniesHouseNumberValidatable.new(invalid_format_number)
57
- error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :invalid_format)
58
-
59
- it_behaves_like "an invalid record",
60
- validatable: validatable,
61
- attribute: :company_no,
62
- error: :invalid_format,
63
- error_message: error_message
64
- end
65
-
66
- context "because it's not found on companies house" do
67
- before do
68
- allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:not_found)
69
- end
70
-
71
- validatable = Test::CompaniesHouseNumberValidatable.new(unknown_number)
72
- error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :not_found)
73
-
74
- it_behaves_like "an invalid record",
75
- validatable: validatable,
76
- attribute: :company_no,
77
- error: :not_found,
78
- error_message: error_message
79
- end
80
-
81
- context "because it's not 'active' on companies house" do
82
- before do
83
- allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:inactive)
84
- end
85
-
86
- validatable = Test::CompaniesHouseNumberValidatable.new(inactive_number)
87
- error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :inactive)
88
-
89
- it_behaves_like "an invalid record",
90
- validatable: validatable,
91
- attribute: :company_no,
92
- error: :inactive,
93
- error_message: error_message
94
- end
95
-
96
- context "with a company_type option" do
97
- let(:company_no) { valid_numbers.first }
98
-
99
- it "calls the companies house service with the `ltd` param" do
100
- expect(CompaniesHouseService).to receive(:new).with(company_no, "ltd")
101
-
102
- Test::CompaniesHouseCompanyTypeAndNumberValidatable.new(company_no).valid?
103
- end
104
- end
105
- end
106
-
107
- context "when there is an error connecting with companies house" do
108
- before do
109
- allow_any_instance_of(CompaniesHouseService).to receive(:status).and_raise(StandardError)
110
- end
111
-
112
- validatable = Test::CompaniesHouseNumberValidatable.new(valid_numbers.sample)
113
- error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :error)
114
-
115
- it_behaves_like "an invalid record",
116
- validatable: validatable,
117
- attribute: :company_no,
118
- error: :error,
119
- error_message: error_message
120
- end
121
- end
122
- end
123
- end
124
- end