et_fake_ccd 1.0.2 → 1.0.3
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 +4 -4
- data/Gemfile.lock +8 -8
- data/lib/et_fake_ccd/command/start_multiple_command.rb +23 -0
- data/lib/et_fake_ccd/commands.rb +1 -0
- data/lib/et_fake_ccd/ecm_service.rb +75 -0
- data/lib/et_fake_ccd/root_app.rb +2 -0
- data/lib/et_fake_ccd/service/ecm_app.rb +64 -0
- data/lib/et_fake_ccd/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 046a15f5ec00b9ee6bc4040f1355a8a11a13284dd08dc0e336d0f3d45e76323d
|
4
|
+
data.tar.gz: eb43a97b2993b04d99e528a0acfde42a8c1a36a05032581ae334d4f3f6c653e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c6a761f55be8b5ead977131d1b1e2ea00b7e05c2032ac053a5bb41c0223bbce8cc2ab23e02e9561614bcda0950d37384849ad237f6c5625a246b0ad425879bf
|
7
|
+
data.tar.gz: 0db76474da029c262c7256f69f0a8c51753263d65eac40e81152e9be13b734658233410906383298a2b473915a387169ea332f786ddb7dbdb5d7b5f48d8a86f6
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
et_fake_ccd (1.0.
|
4
|
+
et_fake_ccd (1.0.3)
|
5
5
|
activemodel (>= 5.2.3)
|
6
6
|
iodine (~> 0.7)
|
7
7
|
json-schema (~> 2.5)
|
@@ -13,9 +13,9 @@ PATH
|
|
13
13
|
GEM
|
14
14
|
remote: https://rubygems.org/
|
15
15
|
specs:
|
16
|
-
activemodel (6.0.2.
|
17
|
-
activesupport (= 6.0.2.
|
18
|
-
activesupport (6.0.2.
|
16
|
+
activemodel (6.0.2.2)
|
17
|
+
activesupport (= 6.0.2.2)
|
18
|
+
activesupport (6.0.2.2)
|
19
19
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
20
20
|
i18n (>= 0.7, < 2)
|
21
21
|
minitest (~> 5.1)
|
@@ -31,10 +31,10 @@ GEM
|
|
31
31
|
json-schema (2.8.1)
|
32
32
|
addressable (>= 2.4)
|
33
33
|
minitest (5.14.0)
|
34
|
-
public_suffix (4.0.
|
34
|
+
public_suffix (4.0.4)
|
35
35
|
rack (2.2.2)
|
36
36
|
rake (13.0.1)
|
37
|
-
roda (3.
|
37
|
+
roda (3.30.0)
|
38
38
|
rack
|
39
39
|
rotp (5.1.0)
|
40
40
|
addressable (~> 2.5)
|
@@ -54,9 +54,9 @@ GEM
|
|
54
54
|
thor (1.0.1)
|
55
55
|
thread_safe (0.3.6)
|
56
56
|
tilt (2.0.10)
|
57
|
-
tzinfo (1.2.
|
57
|
+
tzinfo (1.2.7)
|
58
58
|
thread_safe (~> 0.1)
|
59
|
-
zeitwerk (2.
|
59
|
+
zeitwerk (2.3.0)
|
60
60
|
|
61
61
|
PLATFORMS
|
62
62
|
ruby
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'active_model'
|
2
|
+
module EtFakeCcd
|
3
|
+
module Command
|
4
|
+
class StartMultipleCommand
|
5
|
+
include ActiveModel::Model
|
6
|
+
include ActiveModel::Attributes
|
7
|
+
|
8
|
+
# @!attribute case_ref_number_count
|
9
|
+
# @return [Integer] The number of case references to generate
|
10
|
+
attribute :case_ref_number_count
|
11
|
+
|
12
|
+
# @!attribute case_type_id
|
13
|
+
# @return [String] The ccd case type id (e.g. Manchester, Glasgow)
|
14
|
+
attribute :case_type_id
|
15
|
+
|
16
|
+
def self.from_json(json)
|
17
|
+
case_ref_number_count = json.dig('case_details', 'case_data', 'caseRefNumberCount')
|
18
|
+
case_type_id = json.dig('case_details', 'case_type_id')
|
19
|
+
new case_ref_number_count: case_ref_number_count, case_type_id: case_type_id
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/et_fake_ccd/commands.rb
CHANGED
@@ -4,3 +4,4 @@ require 'et_fake_ccd/command/create_case_command'
|
|
4
4
|
require 'et_fake_ccd/command/create_bulk_action_case_command'
|
5
5
|
require 'et_fake_ccd/command/upload_document_command'
|
6
6
|
require 'et_fake_ccd/command/upload_documents_to_case_command'
|
7
|
+
require 'et_fake_ccd/command/start_multiple_command'
|
@@ -0,0 +1,75 @@
|
|
1
|
+
module EtFakeCcd
|
2
|
+
#noinspection RubyStringKeysInHashInspection
|
3
|
+
class EcmService
|
4
|
+
OFFICE_CODE_LOOKUP = {
|
5
|
+
'Manchester' => '24',
|
6
|
+
'Glasgow' => '41'
|
7
|
+
}
|
8
|
+
Response = Struct.new(:case_reference_count, :start_reference, :multiple_reference)
|
9
|
+
# @param [EtFakeCcd::Command::StartMultipleCommand] command
|
10
|
+
# @return [EtFakeCcd::EcmService::Response] The response
|
11
|
+
def self.start_multiple(command)
|
12
|
+
new(command).call
|
13
|
+
end
|
14
|
+
|
15
|
+
# @param [EtFakeCcd::Command::StartMultipleCommand] command
|
16
|
+
def initialize(command)
|
17
|
+
@command = command
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
adapter.reserve_reference_numbers_for(command.case_type_id, quantity: command.case_ref_number_count)
|
22
|
+
start_reference = adapter.last_case_reference(command.case_type_id) - command.case_ref_number_count
|
23
|
+
formatted_ref = "#{office_code_for(command.case_type_id)}#{start_reference.to_s.rjust(5, '0')}/#{Time.now.year}"
|
24
|
+
formatted_multiple = "#{office_code_for(command.case_type_id)}#{adapter.build_multiple_reference(command.case_type_id).to_s.rjust(5, '0')}/#{Time.now.year}"
|
25
|
+
Response.new(command.case_ref_number_count, formatted_ref, formatted_multiple).freeze
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def adapter
|
31
|
+
Thread.current[:ecm_service_adapter] ||= InMemoryAdapter.new
|
32
|
+
end
|
33
|
+
|
34
|
+
def office_code_for(case_type_id)
|
35
|
+
office_code = OFFICE_CODE_LOOKUP[case_type_id]
|
36
|
+
raise "Case type id #{case_type_id} has no office lookup defined in the fake ccd server" if office_code.nil?
|
37
|
+
|
38
|
+
office_code
|
39
|
+
end
|
40
|
+
|
41
|
+
# @return [EtFakeCcd::Command::StartMultipleCommand] command
|
42
|
+
attr_reader :command
|
43
|
+
|
44
|
+
class InMemoryAdapter
|
45
|
+
def initialize
|
46
|
+
self.data = {}
|
47
|
+
end
|
48
|
+
|
49
|
+
def last_case_reference(case_type_id)
|
50
|
+
last_ref = data.dig(case_type_id, :case_reference)
|
51
|
+
raise "Case reference not generated for #{case_type_id}" if last_ref.nil?
|
52
|
+
|
53
|
+
last_ref
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def reserve_reference_numbers_for(case_type_id, quantity:)
|
58
|
+
data[case_type_id] ||= {}
|
59
|
+
data[case_type_id][:case_reference] ||= 0
|
60
|
+
data[case_type_id][:case_reference] += quantity
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_multiple_reference(case_type_id)
|
64
|
+
data[case_type_id] ||= {}
|
65
|
+
data[case_type_id][:multiple_reference] ||= 0
|
66
|
+
data[case_type_id][:multiple_reference] += 1
|
67
|
+
end
|
68
|
+
|
69
|
+
private
|
70
|
+
|
71
|
+
attr_accessor :data
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
data/lib/et_fake_ccd/root_app.rb
CHANGED
@@ -6,6 +6,7 @@ require "et_fake_ccd/service/document_store_app"
|
|
6
6
|
require "et_fake_ccd/service/authentication_web_app"
|
7
7
|
require "et_fake_ccd/service/case_management_web_app"
|
8
8
|
require "et_fake_ccd/service/api_gateway_web_app"
|
9
|
+
require "et_fake_ccd/service/ecm_app"
|
9
10
|
module EtFakeCcd
|
10
11
|
class RootApp < Roda
|
11
12
|
plugin :multi_run
|
@@ -16,6 +17,7 @@ module EtFakeCcd
|
|
16
17
|
run "authentication-web", Service::AuthenticationWebApp
|
17
18
|
run "case-management-web", Service::CaseManagementWebApp
|
18
19
|
run "api-gateway", Service::ApiGatewayWebApp
|
20
|
+
run "ecm", Service::EcmApp
|
19
21
|
|
20
22
|
route do |r|
|
21
23
|
r.multi_run
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'roda'
|
2
|
+
require 'json'
|
3
|
+
require 'et_fake_ccd/commands'
|
4
|
+
require 'et_fake_ccd/auth_service'
|
5
|
+
require 'et_fake_ccd/ecm_service'
|
6
|
+
module EtFakeCcd
|
7
|
+
module Service
|
8
|
+
class EcmApp < Roda
|
9
|
+
plugin :request_headers
|
10
|
+
plugin :halt
|
11
|
+
route do |r|
|
12
|
+
r.is "startMultiple" do
|
13
|
+
r.post do
|
14
|
+
unless EtFakeCcd::AuthService.validate_service_token(r.headers['ServiceAuthorization'].gsub(/\ABearer /, '')) && EtFakeCcd::AuthService.validate_user_token(r.headers['Authorization'].gsub(/\ABearer /, ''))
|
15
|
+
r.halt 403, forbidden_error_for(r)
|
16
|
+
break
|
17
|
+
end
|
18
|
+
json = JSON.parse(r.body.read)
|
19
|
+
command = ::EtFakeCcd::Command::StartMultipleCommand.from_json json
|
20
|
+
if command.valid?
|
21
|
+
response = ::EtFakeCcd::EcmService.start_multiple(command)
|
22
|
+
start_multiple_response(response)
|
23
|
+
else
|
24
|
+
r.halt 422, render_error_for(command, r)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def render_error403(r)
|
33
|
+
r.halt 403, forbidden_error_for(r)
|
34
|
+
end
|
35
|
+
|
36
|
+
def start_multiple_response(response)
|
37
|
+
j = {
|
38
|
+
"caseRefNumberCount": response.case_reference_count,
|
39
|
+
"startCaseRefNumber": response.start_reference,
|
40
|
+
"multipleRefNumber": response.multiple_reference
|
41
|
+
}
|
42
|
+
JSON.generate(j)
|
43
|
+
end
|
44
|
+
|
45
|
+
def render_error_for(command, request)
|
46
|
+
j = {
|
47
|
+
"exception": "uk.gov.hmcts.ccd.endpoint.exceptions.CaseValidationException",
|
48
|
+
"timestamp": "2019-07-01T16:02:28.045",
|
49
|
+
"status": 422,
|
50
|
+
"error": "Unprocessable Entity",
|
51
|
+
"message": "Start multiple command validation failed",
|
52
|
+
"path": request.path,
|
53
|
+
"details": {
|
54
|
+
"field_errors": command.errors.details[:data].map {|e| e[:field_error]}
|
55
|
+
},
|
56
|
+
"callbackErrors": nil,
|
57
|
+
"callbackWarnings": nil
|
58
|
+
}
|
59
|
+
|
60
|
+
JSON.generate(j)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/et_fake_ccd/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: et_fake_ccd
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gary Taylor
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-04-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: roda
|
@@ -184,12 +184,14 @@ files:
|
|
184
184
|
- lib/et_fake_ccd/command/create_case_command.rb
|
185
185
|
- lib/et_fake_ccd/command/lease_command.rb
|
186
186
|
- lib/et_fake_ccd/command/login_user_command.rb
|
187
|
+
- lib/et_fake_ccd/command/start_multiple_command.rb
|
187
188
|
- lib/et_fake_ccd/command/upload_document_command.rb
|
188
189
|
- lib/et_fake_ccd/command/upload_documents_to_case_command.rb
|
189
190
|
- lib/et_fake_ccd/commands.rb
|
190
191
|
- lib/et_fake_ccd/config.rb
|
191
192
|
- lib/et_fake_ccd/data_store_service.rb
|
192
193
|
- lib/et_fake_ccd/document_store_service.rb
|
194
|
+
- lib/et_fake_ccd/ecm_service.rb
|
193
195
|
- lib/et_fake_ccd/iodine.rb
|
194
196
|
- lib/et_fake_ccd/request_store_service.rb
|
195
197
|
- lib/et_fake_ccd/root_app.rb
|
@@ -199,6 +201,7 @@ files:
|
|
199
201
|
- lib/et_fake_ccd/service/case_management_web_app.rb
|
200
202
|
- lib/et_fake_ccd/service/data_store_app.rb
|
201
203
|
- lib/et_fake_ccd/service/document_store_app.rb
|
204
|
+
- lib/et_fake_ccd/service/ecm_app.rb
|
202
205
|
- lib/et_fake_ccd/service/sidam_app.rb
|
203
206
|
- lib/et_fake_ccd/validator/otp_validator.rb
|
204
207
|
- lib/et_fake_ccd/version.rb
|