defra_ruby_validators 2.4.1 → 2.5.1
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 +5 -5
- data/README.md +9 -2
- data/lib/defra_ruby/validators/companies_house_number_validator.rb +9 -5
- data/lib/defra_ruby/validators/companies_house_service.rb +26 -12
- data/lib/defra_ruby/validators/version.rb +1 -1
- metadata +22 -174
- data/spec/defra_ruby/validators/business_type_validator_spec.rb +0 -56
- data/spec/defra_ruby/validators/companies_house_number_validator_spec.rb +0 -108
- data/spec/defra_ruby/validators/companies_house_service_spec.rb +0 -70
- data/spec/defra_ruby/validators/configuration_spec.rb +0 -49
- data/spec/defra_ruby/validators/email_validator_spec.rb +0 -46
- data/spec/defra_ruby/validators/grid_reference_validator_spec.rb +0 -57
- data/spec/defra_ruby/validators/location_validator_spec.rb +0 -56
- data/spec/defra_ruby/validators/past_date_validator_spec.rb +0 -35
- data/spec/defra_ruby/validators/phone_number_validator_spec.rb +0 -59
- data/spec/defra_ruby/validators/position_validator_spec.rb +0 -47
- data/spec/defra_ruby/validators/token_validator_spec.rb +0 -45
- data/spec/defra_ruby/validators/true_false_validator_spec.rb +0 -37
- data/spec/defra_ruby/validators_spec.rb +0 -12
- data/spec/spec_helper.rb +0 -87
- data/spec/support/defra_ruby_validators.rb +0 -16
- data/spec/support/helpers/text_generator.rb +0 -17
- data/spec/support/helpers/translator.rb +0 -15
- data/spec/support/i18n.rb +0 -8
- data/spec/support/pry.rb +0 -7
- data/spec/support/shared_examples/validators/characters_validator.rb +0 -29
- data/spec/support/shared_examples/validators/invalid_record.rb +0 -29
- data/spec/support/shared_examples/validators/length_validator.rb +0 -29
- data/spec/support/shared_examples/validators/presence_validator.rb +0 -29
- data/spec/support/shared_examples/validators/selection_validator.rb +0 -40
- data/spec/support/shared_examples/validators/valid_record.rb +0 -12
- data/spec/support/shared_examples/validators/validator.rb +0 -8
- data/spec/support/simplecov.rb +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 3a8cefa4eee1eb9fcc363935f64760eb88aafd35d29ac09cfd3663105aafa3eb
|
4
|
+
data.tar.gz: 0dbc80e1d0c36fc4452257e6ade5377d83f04b860f9ec0375975526aca43f961
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0417b991688a935460cbd8e96d28dd8d1496838d7aa5d56420f9a0e5ac701d652b278657a1a733c905e1f3b8ae6880e659b58071e90673af351224c9a3445ed2
|
7
|
+
data.tar.gz: 88fb21c5eb3ca1cc365ce4b52aeb8171540ec1cc5776b32cab5122fccb978215f46ea92ff13ceedde13fedd4b700d8f757a74db50f08e4e0e45e049c6ab2dfde
|
data/README.md
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
# Defra Ruby Validators
|
2
2
|
|
3
|
-
|
3
|
+

|
4
4
|
[](https://sonarcloud.io/dashboard?id=DEFRA_defra-ruby-validators)
|
5
5
|
[](https://sonarcloud.io/dashboard?id=DEFRA_defra-ruby-validators)
|
6
|
-
[](https://hakiri.io/github/DEFRA/defra-ruby-validators/main)
|
7
6
|
[](https://badge.fury.io/rb/defra_ruby_validators)
|
8
7
|
[](http://www.nationalarchives.gov.uk/doc/open-government-licence/version/3)
|
9
8
|
|
@@ -74,6 +73,14 @@ Add it to your model or form object using
|
|
74
73
|
validates :company_no, "defra_ruby/validators/companies_house_number": true
|
75
74
|
```
|
76
75
|
|
76
|
+
The company number also accepts a `company_type` option. This checks the `type` attribute in the API response. To validate that the company number is for a Limited Company, for example:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
validates :company_no, "defra_ruby/validators/companies_house_number": { company_type: "ltd" }
|
80
|
+
```
|
81
|
+
|
82
|
+
Note: to mock the Companies House service with the `company_type` option, you will need to be running at least v2.2.0 of [defra-ruby-mocks](https://github.com/DEFRA/defra-ruby-mocks#companies-house).
|
83
|
+
|
77
84
|
### Email
|
78
85
|
|
79
86
|
This validator checks the value is present and in a format that meets [RFC 2822](https://tools.ietf.org/html/rfc2822) and [RFC 3696](https://tools.ietf.org/html/rfc3696) (we use [validates_email_format_of](https://github.com/validates-email-format-of/validates_email_format_of) to check the format).
|
@@ -17,7 +17,8 @@ module DefraRuby
|
|
17
17
|
return false unless value_is_present?(record, attribute, value)
|
18
18
|
return false unless format_is_valid?(record, attribute, value)
|
19
19
|
|
20
|
-
|
20
|
+
company_type = options[:company_type]
|
21
|
+
validate_with_companies_house(record, attribute, value, company_type)
|
21
22
|
end
|
22
23
|
|
23
24
|
private
|
@@ -30,25 +31,28 @@ module DefraRuby
|
|
30
31
|
end
|
31
32
|
|
32
33
|
def format_is_valid?(record, attribute, value)
|
33
|
-
|
34
|
+
# All-zero values are invalid, despite matching the main regex
|
35
|
+
return true if value.match?(VALID_COMPANIES_HOUSE_REGISTRATION_NUMBER_REGEX) && !value.match(/^0+$/)
|
34
36
|
|
35
37
|
add_validation_error(record, attribute, :invalid_format)
|
36
38
|
false
|
37
39
|
end
|
38
40
|
|
39
|
-
def validate_with_companies_house(record, attribute, value)
|
40
|
-
case CompaniesHouseService.new(value).status
|
41
|
+
def validate_with_companies_house(record, attribute, value, company_type)
|
42
|
+
case CompaniesHouseService.new(value, company_type).status
|
41
43
|
when :active
|
42
44
|
true
|
43
45
|
when :inactive
|
44
46
|
add_validation_error(record, attribute, :inactive)
|
45
47
|
when :not_found
|
46
48
|
add_validation_error(record, attribute, :not_found)
|
49
|
+
else
|
50
|
+
# Sonarcloud suggested that not having an `else` is a code smell
|
51
|
+
add_validation_error(record, attribute, :error)
|
47
52
|
end
|
48
53
|
rescue StandardError
|
49
54
|
add_validation_error(record, attribute, :error)
|
50
55
|
end
|
51
|
-
|
52
56
|
end
|
53
57
|
end
|
54
58
|
end
|
@@ -5,31 +5,45 @@ require "rest-client"
|
|
5
5
|
module DefraRuby
|
6
6
|
module Validators
|
7
7
|
class CompaniesHouseService
|
8
|
-
def initialize(company_no)
|
8
|
+
def initialize(company_no, company_type = nil)
|
9
9
|
@company_no = company_no
|
10
10
|
@url = "#{DefraRuby::Validators.configuration.companies_house_host}#{@company_no}"
|
11
11
|
@api_key = DefraRuby::Validators.configuration.companies_house_api_key
|
12
|
+
@company_type = company_type
|
12
13
|
end
|
13
14
|
|
14
15
|
def status
|
15
|
-
|
16
|
-
method: :get,
|
17
|
-
url: @url,
|
18
|
-
user: @api_key,
|
19
|
-
password: ""
|
20
|
-
)
|
16
|
+
return :not_found unless company_type_is_allowed?(json_response)
|
21
17
|
|
22
|
-
|
23
|
-
|
24
|
-
status_is_allowed?(json["company_status"]) ? :active : :inactive
|
18
|
+
status_is_allowed?(json_response) ? :active : :inactive
|
25
19
|
rescue RestClient::ResourceNotFound
|
26
20
|
:not_found
|
27
21
|
end
|
28
22
|
|
23
|
+
def json_response
|
24
|
+
@_json_response ||=
|
25
|
+
JSON.parse(
|
26
|
+
RestClient::Request.execute(
|
27
|
+
method: :get,
|
28
|
+
url: @url,
|
29
|
+
user: @api_key,
|
30
|
+
password: ""
|
31
|
+
)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
29
35
|
private
|
30
36
|
|
31
|
-
def status_is_allowed?(
|
32
|
-
%w[active voluntary-arrangement].include?(
|
37
|
+
def status_is_allowed?(json_response)
|
38
|
+
%w[active voluntary-arrangement].include?(json_response["company_status"])
|
39
|
+
end
|
40
|
+
|
41
|
+
def company_type_is_allowed?(json_response)
|
42
|
+
# if a company_type has not been defined in the validator,
|
43
|
+
# we skip this check
|
44
|
+
return true if @company_type.blank?
|
45
|
+
|
46
|
+
@company_type.to_s == json_response["type"]
|
33
47
|
end
|
34
48
|
end
|
35
49
|
end
|
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.
|
4
|
+
version: 2.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Defra
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-06-05 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:
|
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:
|
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:
|
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:
|
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: :
|
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:
|
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: :
|
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:
|
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: :
|
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
|
@@ -249,39 +151,13 @@ files:
|
|
249
151
|
- lib/defra_ruby/validators/true_false_validator.rb
|
250
152
|
- lib/defra_ruby/validators/version.rb
|
251
153
|
- 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/spec_helper.rb
|
266
|
-
- spec/support/defra_ruby_validators.rb
|
267
|
-
- spec/support/helpers/text_generator.rb
|
268
|
-
- spec/support/helpers/translator.rb
|
269
|
-
- spec/support/i18n.rb
|
270
|
-
- spec/support/pry.rb
|
271
|
-
- spec/support/shared_examples/validators/characters_validator.rb
|
272
|
-
- spec/support/shared_examples/validators/invalid_record.rb
|
273
|
-
- spec/support/shared_examples/validators/length_validator.rb
|
274
|
-
- spec/support/shared_examples/validators/presence_validator.rb
|
275
|
-
- spec/support/shared_examples/validators/selection_validator.rb
|
276
|
-
- spec/support/shared_examples/validators/valid_record.rb
|
277
|
-
- spec/support/shared_examples/validators/validator.rb
|
278
|
-
- spec/support/simplecov.rb
|
279
154
|
homepage: https://github.com/DEFRA/defra-ruby-validators
|
280
155
|
licenses:
|
281
156
|
- The Open Government Licence (OGL) Version 3
|
282
157
|
metadata:
|
283
158
|
allowed_push_host: https://rubygems.org
|
284
|
-
|
159
|
+
rubygems_mfa_required: 'true'
|
160
|
+
post_install_message:
|
285
161
|
rdoc_options: []
|
286
162
|
require_paths:
|
287
163
|
- lib
|
@@ -289,43 +165,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
289
165
|
requirements:
|
290
166
|
- - ">="
|
291
167
|
- !ruby/object:Gem::Version
|
292
|
-
version: '
|
168
|
+
version: '3.1'
|
293
169
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
294
170
|
requirements:
|
295
171
|
- - ">="
|
296
172
|
- !ruby/object:Gem::Version
|
297
173
|
version: '0'
|
298
174
|
requirements: []
|
299
|
-
|
300
|
-
|
301
|
-
signing_key:
|
175
|
+
rubygems_version: 3.3.7
|
176
|
+
signing_key:
|
302
177
|
specification_version: 4
|
303
178
|
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/support/simplecov.rb
|
320
|
-
- spec/support/i18n.rb
|
321
|
-
- spec/support/pry.rb
|
322
|
-
- spec/support/defra_ruby_validators.rb
|
323
|
-
- spec/support/helpers/translator.rb
|
324
|
-
- spec/support/helpers/text_generator.rb
|
325
|
-
- spec/support/shared_examples/validators/selection_validator.rb
|
326
|
-
- spec/support/shared_examples/validators/invalid_record.rb
|
327
|
-
- spec/support/shared_examples/validators/presence_validator.rb
|
328
|
-
- spec/support/shared_examples/validators/characters_validator.rb
|
329
|
-
- spec/support/shared_examples/validators/length_validator.rb
|
330
|
-
- spec/support/shared_examples/validators/valid_record.rb
|
331
|
-
- spec/support/shared_examples/validators/validator.rb
|
179
|
+
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,108 +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
|
-
end
|
12
|
-
|
13
|
-
module DefraRuby
|
14
|
-
module Validators
|
15
|
-
RSpec.describe CompaniesHouseNumberValidator do
|
16
|
-
|
17
|
-
valid_numbers = %w[10997904 09764739 SC534714 IP00141R]
|
18
|
-
invalid_format_number = "foobar42"
|
19
|
-
unknown_number = "99999999"
|
20
|
-
inactive_number = "07281919"
|
21
|
-
|
22
|
-
it_behaves_like "a validator"
|
23
|
-
|
24
|
-
describe "#validate_each" do
|
25
|
-
context "when given a valid company number" do
|
26
|
-
before do
|
27
|
-
allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:active)
|
28
|
-
end
|
29
|
-
|
30
|
-
valid_numbers.each do |company_no|
|
31
|
-
context "like #{company_no}" do
|
32
|
-
it_behaves_like "a valid record", Test::CompaniesHouseNumberValidatable.new(company_no)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when given an invalid company number" do
|
38
|
-
context "because it is blank" do
|
39
|
-
validatable = Test::CompaniesHouseNumberValidatable.new
|
40
|
-
error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :blank)
|
41
|
-
|
42
|
-
it_behaves_like "an invalid record",
|
43
|
-
validatable: validatable,
|
44
|
-
attribute: :company_no,
|
45
|
-
error: :blank,
|
46
|
-
error_message: error_message
|
47
|
-
end
|
48
|
-
|
49
|
-
context "because the format is wrong" do
|
50
|
-
validatable = Test::CompaniesHouseNumberValidatable.new(invalid_format_number)
|
51
|
-
error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :invalid_format)
|
52
|
-
|
53
|
-
it_behaves_like "an invalid record",
|
54
|
-
validatable: validatable,
|
55
|
-
attribute: :company_no,
|
56
|
-
error: :invalid_format,
|
57
|
-
error_message: error_message
|
58
|
-
end
|
59
|
-
|
60
|
-
context "because it's not found on companies house" do
|
61
|
-
before do
|
62
|
-
allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:not_found)
|
63
|
-
end
|
64
|
-
|
65
|
-
validatable = Test::CompaniesHouseNumberValidatable.new(unknown_number)
|
66
|
-
error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :not_found)
|
67
|
-
|
68
|
-
it_behaves_like "an invalid record",
|
69
|
-
validatable: validatable,
|
70
|
-
attribute: :company_no,
|
71
|
-
error: :not_found,
|
72
|
-
error_message: error_message
|
73
|
-
end
|
74
|
-
|
75
|
-
context "because it's not 'active' on companies house" do
|
76
|
-
before do
|
77
|
-
allow_any_instance_of(CompaniesHouseService).to receive(:status).and_return(:inactive)
|
78
|
-
end
|
79
|
-
|
80
|
-
validatable = Test::CompaniesHouseNumberValidatable.new(inactive_number)
|
81
|
-
error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :inactive)
|
82
|
-
|
83
|
-
it_behaves_like "an invalid record",
|
84
|
-
validatable: validatable,
|
85
|
-
attribute: :company_no,
|
86
|
-
error: :inactive,
|
87
|
-
error_message: error_message
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
context "when there is an error connecting with companies house" do
|
92
|
-
before do
|
93
|
-
allow_any_instance_of(CompaniesHouseService).to receive(:status).and_raise(StandardError)
|
94
|
-
end
|
95
|
-
|
96
|
-
validatable = Test::CompaniesHouseNumberValidatable.new(valid_numbers.sample)
|
97
|
-
error_message = Helpers::Translator.error_message(CompaniesHouseNumberValidator, :error)
|
98
|
-
|
99
|
-
it_behaves_like "an invalid record",
|
100
|
-
validatable: validatable,
|
101
|
-
attribute: :company_no,
|
102
|
-
error: :error,
|
103
|
-
error_message: error_message
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "webmock/rspec"
|
4
|
-
|
5
|
-
RSpec.describe DefraRuby::Validators::CompaniesHouseService do
|
6
|
-
let(:subject) { described_class.new("09360070") }
|
7
|
-
let(:host) { "https://api.companieshouse.gov.uk/" }
|
8
|
-
|
9
|
-
describe "#status" do
|
10
|
-
context "when the company_no is for an active company" do
|
11
|
-
before do
|
12
|
-
expected_body = { "company_status": "active" }
|
13
|
-
|
14
|
-
stub_request(:any, /.*#{host}.*/).to_return(
|
15
|
-
status: 200,
|
16
|
-
body: expected_body.to_json
|
17
|
-
)
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns :active" do
|
21
|
-
expect(subject.status).to eq(:active)
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
context "when the company_no is not found" do
|
26
|
-
before do
|
27
|
-
stub_request(:any, /.*#{host}.*/).to_return(
|
28
|
-
status: 404
|
29
|
-
)
|
30
|
-
end
|
31
|
-
|
32
|
-
it "returns :not_found" do
|
33
|
-
expect(subject.status).to eq(:not_found)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "when the company_no is inactive" do
|
38
|
-
before do
|
39
|
-
expected_body = { "company_status": "dissolved" }
|
40
|
-
|
41
|
-
stub_request(:any, /.*#{host}.*/).to_return(
|
42
|
-
status: 200,
|
43
|
-
body: expected_body.to_json
|
44
|
-
)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "returns :inactive" do
|
48
|
-
expect(subject.status).to eq(:inactive)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
context "when there is a problem with the Companies House API" do
|
53
|
-
context "and the request times out" do
|
54
|
-
before { stub_request(:any, /.*#{host}.*/).to_timeout }
|
55
|
-
|
56
|
-
it "raises an exception" do
|
57
|
-
expect { subject.status }.to raise_error(StandardError)
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "and request returns an error" do
|
62
|
-
before { stub_request(:any, /.*#{host}.*/).to_raise(SocketError) }
|
63
|
-
|
64
|
-
it "raises an exception" do
|
65
|
-
expect { subject.status }.to raise_error(StandardError)
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|