companies_house_input_gateway 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/base.rb +9 -0
- data/lib/companies_house_input_gateway/client.rb +46 -0
- data/lib/companies_house_input_gateway/config.rb +35 -0
- data/lib/companies_house_input_gateway/constants.rb +21 -0
- data/lib/companies_house_input_gateway/errors/api_error.rb +18 -0
- data/lib/companies_house_input_gateway/errors/companies_house_gateway_error.rb +20 -0
- data/lib/companies_house_input_gateway/errors/invalid_request_error.rb +12 -0
- data/lib/companies_house_input_gateway/errors/invalid_response_error.rb +6 -0
- data/lib/companies_house_input_gateway/form_validator.rb +29 -0
- data/lib/companies_house_input_gateway/forms/form_abstract_builder.rb +61 -0
- data/lib/companies_house_input_gateway/forms/form_company_data_request.rb +20 -0
- data/lib/companies_house_input_gateway/forms/form_confirmation_statement.rb +21 -0
- data/lib/companies_house_input_gateway/forms/form_get_submission_status.rb +21 -0
- data/lib/companies_house_input_gateway/forms/form_returnof_allotment_shares.rb +21 -0
- data/lib/companies_house_input_gateway/forms/form_submission.rb +39 -0
- data/lib/companies_house_input_gateway/middleware/check_response.rb +30 -0
- data/lib/companies_house_input_gateway/request.rb +57 -0
- data/lib/companies_house_input_gateway/requests/abstract_performer.rb +52 -0
- data/lib/companies_house_input_gateway/requests/company_data_request.rb +9 -0
- data/lib/companies_house_input_gateway/requests/confirmation_statement.rb +11 -0
- data/lib/companies_house_input_gateway/requests/get_submission_status.rb +9 -0
- data/lib/companies_house_input_gateway/requests/returnof_allotment_shares.rb +11 -0
- data/lib/companies_house_input_gateway/util.rb +28 -0
- data/lib/companies_house_input_gateway/validations/company_data_request.rb +20 -0
- data/lib/companies_house_input_gateway/validations/confirmation_statement.rb +96 -0
- data/lib/companies_house_input_gateway/validations/form_submission.rb +23 -0
- data/lib/companies_house_input_gateway/validations/get_submission_status.rb +24 -0
- data/lib/companies_house_input_gateway/validations/returnof_allotment_shares.rb +41 -0
- data/lib/companies_house_input_gateway/version.rb +5 -0
- data/lib/companies_house_input_gateway/xml_forms_binder.rb +81 -0
- data/lib/companies_house_input_gateway.rb +76 -0
- data/spec/client_spec.rb +59 -0
- data/spec/companies_house_input_gateway_spec.rb +47 -0
- data/spec/data_samples.rb +147 -0
- data/spec/fixtures/bad_response.xml +35 -0
- data/spec/fixtures/response_company_data_request.xml +330 -0
- data/spec/fixtures/response_confirmation_statement.xml +28 -0
- data/spec/fixtures/response_get_submission_status.xml +40 -0
- data/spec/fixtures/response_returnof_allotment_shares.xml +28 -0
- data/spec/form_validator_spec.rb +61 -0
- data/spec/request_spec.rb +132 -0
- data/spec/spec_helper.rb +32 -0
- metadata +206 -0
@@ -0,0 +1,96 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CompaniesHouseInputGateway
|
4
|
+
module Validations
|
5
|
+
ConfirmationStatement = Dry::Validation.Schema do
|
6
|
+
configure do
|
7
|
+
config.messages_file = File.join(Base.root, './errors.yml')
|
8
|
+
|
9
|
+
def shareholders_names_presence?(shareholdings)
|
10
|
+
check = shareholdings.map do |holdings|
|
11
|
+
holdings[:shareholders].any? do |i|
|
12
|
+
((i[:name][:surname] && i[:name][:forename]) && !i[:name][:amalgamated_name]) ||
|
13
|
+
(!(i[:name][:surname] || i[:name][:forename]) && i[:name][:amalgamated_name])
|
14
|
+
end
|
15
|
+
end
|
16
|
+
check.all?
|
17
|
+
end
|
18
|
+
|
19
|
+
def other_foreign_country?(shareholdings)
|
20
|
+
check = shareholdings.map do |holdings|
|
21
|
+
check = holdings[:shareholders].any? do |i|
|
22
|
+
next true unless i[:address]
|
23
|
+
|
24
|
+
!(i[:address][:country] && i[:address][:other_foreign_country])
|
25
|
+
end
|
26
|
+
end
|
27
|
+
check.all?
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
optional(:trading_on_market).filled(:bool?)
|
32
|
+
optional(:dtr_5_applies).filled(:bool?)
|
33
|
+
optional(:psc_exempt_as_trading_on_regulated_market).filled(:bool?)
|
34
|
+
optional(:psc_exempt_as_shares_admitted_on_market).filled(:bool?)
|
35
|
+
optional(:psc_exempt_as_trading_on_uk_regulated_market).filled(:bool?)
|
36
|
+
required(:review_date).filled(:date?)
|
37
|
+
|
38
|
+
optional(:sic_codes).schema do
|
39
|
+
required(:sic_code).each(:str?)
|
40
|
+
end
|
41
|
+
# optional(:statement_of_capital).schema do
|
42
|
+
# required(:capital).each do
|
43
|
+
# schema do
|
44
|
+
# required(:total_amount_unpaid).filled(:decimal?)
|
45
|
+
# required(:total_number_of_issued_shares).filled(:decimal?)
|
46
|
+
# required(:share_currency).filled(:str?)
|
47
|
+
# required(:total_aggregate_nominal_value).filled(:decimal?)
|
48
|
+
# required(:shares).each do
|
49
|
+
# schema do
|
50
|
+
# required(:share_class).filled(:str?)
|
51
|
+
# required(:prescribed_particulars).filled(:str?)
|
52
|
+
# required(:num_shares).filled(:decimal?)
|
53
|
+
# required(:aggregate_nominal_value).filled(:decimal?)
|
54
|
+
# end
|
55
|
+
# end
|
56
|
+
# end
|
57
|
+
# end
|
58
|
+
# end
|
59
|
+
|
60
|
+
# required(:shareholdings).each do
|
61
|
+
# schema do
|
62
|
+
# required(:share_class).filled(:str?)
|
63
|
+
# required(:number_held).filled(:decimal?)
|
64
|
+
# required(:transfers).each do
|
65
|
+
# schema do
|
66
|
+
# required(:date_of_transfer).filled(:date?)
|
67
|
+
# required(:number_shares_transferred).filled(:decimal?)
|
68
|
+
# end
|
69
|
+
# end
|
70
|
+
#
|
71
|
+
# optional(:shareholders).each do
|
72
|
+
# schema do
|
73
|
+
# required(:name).schema do
|
74
|
+
# optional(:surname).filled(:str?)
|
75
|
+
# optional(:forename).filled(:str?)
|
76
|
+
# optional(:amalgamated_name).filled(:str?)
|
77
|
+
# end
|
78
|
+
# optional(:address).schema do
|
79
|
+
# required(:premise).filled(:str?)
|
80
|
+
# required(:street).filled(:str?)
|
81
|
+
# required(:thoroughfare).filled(:str?)
|
82
|
+
# required(:post_town).filled(:str?)
|
83
|
+
# required(:county).filled(:str?)
|
84
|
+
# optional(:country).filled(included_in?: CompaniesHouseInputGateway::Constants::COUNTRIES)
|
85
|
+
# optional(:other_foreign_country).filled(:str?)
|
86
|
+
# end
|
87
|
+
# end
|
88
|
+
# end
|
89
|
+
# end
|
90
|
+
# end
|
91
|
+
required(:state_confirmation).filled(:bool?)
|
92
|
+
# required(:shareholdings).filled(:shareholders_names_presence?)
|
93
|
+
# required(:shareholdings).filled(:other_foreign_country?)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CompaniesHouseInputGateway
|
4
|
+
module Validations
|
5
|
+
FormSubmission = Dry::Validation.Schema do
|
6
|
+
configure do
|
7
|
+
config.messages_file = File.join(Base.root, './errors.yml')
|
8
|
+
|
9
|
+
def company_number_format?(value)
|
10
|
+
value ? value.match(/^([\d]*\d){8}$/) : true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
required(:date_signed).filled(:date?)
|
15
|
+
required(:company_number).filled(:str?)
|
16
|
+
required(:company_name).filled(:str?)
|
17
|
+
required(:company_authentication_code).filled(:str?)
|
18
|
+
required(:package_reference).filled(:str?)
|
19
|
+
required(:submission_number).filled(:str?, size?: 6)
|
20
|
+
required(:company_number).filled(:company_number_format?)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CompaniesHouseInputGateway
|
4
|
+
module Validations
|
5
|
+
GetSubmissionStatus = Dry::Validation.Schema do
|
6
|
+
configure do
|
7
|
+
config.messages_file = File.join(Base.root, './errors.yml')
|
8
|
+
|
9
|
+
def company_number_format?(value)
|
10
|
+
value ? value.match(/^([\d]*\d){8}$/) : true
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
optional(:company_number).maybe(:str?)
|
15
|
+
optional(:submission_number).filled(:str?)
|
16
|
+
required(:presenter_id).filled(:str?)
|
17
|
+
optional(:company_number).filled(:company_number_format?)
|
18
|
+
|
19
|
+
rule(company_number_or_submission_number_presence: %i[company_number submission_number]) do |company_number, submission_number|
|
20
|
+
company_number.filled?.then(submission_number.none?) & submission_number.filled?.then(company_number.none?)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CompaniesHouseInputGateway
|
4
|
+
module Validations
|
5
|
+
ReturnofAllotmentShares = Dry::Validation.Schema do
|
6
|
+
required(:start_period_shares_allotted).filled(:date?)
|
7
|
+
optional(:end_period_shares_allotted).filled(:date?)
|
8
|
+
|
9
|
+
required(:statement_of_capital).schema do
|
10
|
+
required(:capital).each do
|
11
|
+
schema do
|
12
|
+
required(:total_amount_unpaid).filled(:str?)
|
13
|
+
required(:total_number_of_issued_shares).filled(:str?)
|
14
|
+
required(:share_currency).filled(:str?)
|
15
|
+
required(:total_aggregate_nominal_value).filled(:str?)
|
16
|
+
required(:shares).each do
|
17
|
+
schema do
|
18
|
+
required(:share_class).filled(:str?)
|
19
|
+
required(:prescribed_particulars).filled(:str?)
|
20
|
+
required(:num_shares).filled(:str?)
|
21
|
+
required(:aggregate_nominal_value).filled(:str?)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
required(:allotment).each do
|
29
|
+
schema do
|
30
|
+
required(:share_class).filled(:str?)
|
31
|
+
required(:num_shares).filled(:str?)
|
32
|
+
required(:amount_paid_due_per_share).filled(:str?)
|
33
|
+
required(:amount_unpaid_per_share).filled(:str?)
|
34
|
+
required(:share_currency).filled(:str?)
|
35
|
+
required(:share_value).filled(:str?)
|
36
|
+
optional(:consideration).filled(:str?)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module CompaniesHouseInputGateway
|
4
|
+
class XmlFormsBinder
|
5
|
+
def initialize(request_type, config, request_data = {})
|
6
|
+
@request_type = request_type
|
7
|
+
@request_data = request_data
|
8
|
+
@config = config
|
9
|
+
end
|
10
|
+
|
11
|
+
def build_request_xml(submission_form, transaction_id = (Time.now.to_f * 100).to_i)
|
12
|
+
# transaction_id = (Time.now.to_f * 100).to_i
|
13
|
+
builder = Nokogiri::XML::Builder.new do |xml|
|
14
|
+
xml.GovTalkMessage(header_namespace) do
|
15
|
+
xml.EnvelopeVersion '1.0'
|
16
|
+
xml.Header do
|
17
|
+
message_details(xml, request_type, transaction_id)
|
18
|
+
sender_authentication(xml)
|
19
|
+
end
|
20
|
+
xml.GovTalkDetails do
|
21
|
+
xml.Keys
|
22
|
+
end
|
23
|
+
xml.Body do
|
24
|
+
build_form(xml, request_type, @request_data, submission_form)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
builder.doc
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
attr_reader :request_type, :request_data, :config
|
34
|
+
|
35
|
+
def header_namespace
|
36
|
+
{
|
37
|
+
'xmlns' => 'http://www.govtalk.gov.uk/CM/envelope',
|
38
|
+
'xmlns:dsig' => 'http://www.w3.org/2000/09/xmldsig#',
|
39
|
+
'xmlns:gt' => 'http://www.govtalk.gov.uk/schemas/govtalk/core',
|
40
|
+
'xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
|
41
|
+
'xsi:schemaLocation' => 'http://www.govtalk.gov.uk/CM/envelope http://xmlgw.companieshouse.gov.uk/v2-1/schema/Egov_ch-v2-0.xsd'
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def build_form(xml, request_type, _request_data, submission_form)
|
46
|
+
request_form = Forms.const_get(:"Form#{Util.camelize request_type}").new(xml: xml, data: @request_data[:request_data])
|
47
|
+
|
48
|
+
if submission_form
|
49
|
+
submission_form = Forms::FormSubmission.new(xml: xml, data: @request_data[:submission_data])
|
50
|
+
return submission_form.build_form(request_type, request_form)
|
51
|
+
end
|
52
|
+
|
53
|
+
request_form.build_form(request_type, xml)
|
54
|
+
end
|
55
|
+
|
56
|
+
def message_details(xml, request_type, transaction_id)
|
57
|
+
request_class = Util.camelize(request_type)
|
58
|
+
request_class = request_class == 'ReturnofAllotmentShares' ? 'ReturnOfAllotmentShares' : request_class
|
59
|
+
|
60
|
+
xml.MessageDetails do
|
61
|
+
xml.Class request_class
|
62
|
+
xml.Qualifier 'request'
|
63
|
+
xml.TransactionID transaction_id
|
64
|
+
xml.GatewayTest @config[:gateway].to_i
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def sender_authentication(xml)
|
69
|
+
xml.SenderDetails do
|
70
|
+
xml.IDAuthentication do
|
71
|
+
xml.SenderID Util.create_digest(@config[:sender_id])
|
72
|
+
xml.Authentication do
|
73
|
+
xml.Method 'clear'
|
74
|
+
xml.Value Util.create_digest(@config[:password])
|
75
|
+
end
|
76
|
+
end
|
77
|
+
xml.EmailAddress @config[:email] if @config[:email]
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'faraday_middleware'
|
4
|
+
require 'nokogiri'
|
5
|
+
require 'dry-validation'
|
6
|
+
|
7
|
+
require 'base'
|
8
|
+
require 'companies_house_input_gateway/version'
|
9
|
+
require 'companies_house_input_gateway/constants'
|
10
|
+
require 'companies_house_input_gateway/util'
|
11
|
+
require 'companies_house_input_gateway/config'
|
12
|
+
require 'companies_house_input_gateway/request'
|
13
|
+
require 'companies_house_input_gateway/client'
|
14
|
+
require 'companies_house_input_gateway/form_validator'
|
15
|
+
require 'companies_house_input_gateway/xml_forms_binder'
|
16
|
+
require 'companies_house_input_gateway/middleware/check_response'
|
17
|
+
|
18
|
+
require 'companies_house_input_gateway/errors/companies_house_gateway_error'
|
19
|
+
require 'companies_house_input_gateway/errors/invalid_request_error'
|
20
|
+
require 'companies_house_input_gateway/errors/invalid_response_error'
|
21
|
+
require 'companies_house_input_gateway/errors/api_error'
|
22
|
+
|
23
|
+
require 'companies_house_input_gateway/requests/abstract_performer'
|
24
|
+
require 'companies_house_input_gateway/requests/returnof_allotment_shares'
|
25
|
+
require 'companies_house_input_gateway/requests/confirmation_statement'
|
26
|
+
require 'companies_house_input_gateway/requests/get_submission_status'
|
27
|
+
require 'companies_house_input_gateway/requests/company_data_request'
|
28
|
+
|
29
|
+
require 'companies_house_input_gateway/forms/form_abstract_builder'
|
30
|
+
require 'companies_house_input_gateway/forms/form_submission'
|
31
|
+
require 'companies_house_input_gateway/forms/form_returnof_allotment_shares'
|
32
|
+
require 'companies_house_input_gateway/forms/form_confirmation_statement'
|
33
|
+
require 'companies_house_input_gateway/forms/form_get_submission_status'
|
34
|
+
require 'companies_house_input_gateway/forms/form_company_data_request'
|
35
|
+
|
36
|
+
require 'companies_house_input_gateway/validations/returnof_allotment_shares'
|
37
|
+
require 'companies_house_input_gateway/validations/form_submission'
|
38
|
+
require 'companies_house_input_gateway/validations/confirmation_statement'
|
39
|
+
require 'companies_house_input_gateway/validations/get_submission_status'
|
40
|
+
require 'companies_house_input_gateway/validations/company_data_request'
|
41
|
+
|
42
|
+
module CompaniesHouseInputGateway
|
43
|
+
def self.configure(&block)
|
44
|
+
@config = Config.new(&block)
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.perform_check(*args)
|
48
|
+
client.perform_check(*args)
|
49
|
+
end
|
50
|
+
|
51
|
+
Constants::SUPPORTED_REQUESTS.each do |name|
|
52
|
+
class_eval <<-EOM
|
53
|
+
def self.#{Util.underscore(name)}(*args)
|
54
|
+
client.send(:#{Util.underscore(name)}, *args)
|
55
|
+
end
|
56
|
+
EOM
|
57
|
+
end
|
58
|
+
|
59
|
+
# Require configuration before use
|
60
|
+
def self.config
|
61
|
+
if @config
|
62
|
+
@config
|
63
|
+
else
|
64
|
+
msg = 'No config found. Use CompaniesHouseGateway.configure to set '
|
65
|
+
'username and password. See ' \
|
66
|
+
'https://github.com/irbux/companies_house_input_gateway' \
|
67
|
+
'for details.'
|
68
|
+
raise CompaniesHouseGatewayError, msg
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.client
|
73
|
+
@client ||= Client.new(config)
|
74
|
+
end
|
75
|
+
private_class_method :client
|
76
|
+
end
|
data/spec/client_spec.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
shared_examples 'it delegates to the check' do |method_name|
|
6
|
+
it "delegates #{method_name} to " +
|
7
|
+
CompaniesHouseInputGateway::Util.camelize(method_name).to_s do
|
8
|
+
expect_any_instance_of(CompaniesHouseInputGateway::Requests
|
9
|
+
.const_get(CompaniesHouseInputGateway::Util.camelize(method_name)))
|
10
|
+
.to receive(:perform).once
|
11
|
+
client.send(method_name, {})
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe CompaniesHouseInputGateway::Client do
|
16
|
+
let(:client) { described_class.new(config) }
|
17
|
+
let(:config) { CompaniesHouseInputGateway::Config.new }
|
18
|
+
|
19
|
+
describe '#new' do
|
20
|
+
context 'without a config' do
|
21
|
+
before { configure_companies_house_input_gateway }
|
22
|
+
subject(:new_client) { described_class.new }
|
23
|
+
|
24
|
+
describe '#config' do
|
25
|
+
subject { super().config }
|
26
|
+
it { should_not == CompaniesHouseInputGateway.config }
|
27
|
+
end
|
28
|
+
it 'has the attributes of the global config' do
|
29
|
+
new_client.config[:sender_id] ==
|
30
|
+
CompaniesHouseInputGateway.config[:sender_id]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'with a config' do
|
35
|
+
before { config[:first_name] = 'test' }
|
36
|
+
subject(:new_client) { described_class.new(config) }
|
37
|
+
|
38
|
+
describe '#config' do
|
39
|
+
subject { super().config }
|
40
|
+
it { should_not == config }
|
41
|
+
end
|
42
|
+
it 'has the attributes of the passed in config' do
|
43
|
+
new_client.config[:sender_id] == config[:sender_id]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
describe '#perform_check' do
|
49
|
+
it 'delegates to an instance of Request' do
|
50
|
+
expect_any_instance_of(CompaniesHouseInputGateway::Request)
|
51
|
+
.to receive(:perform).once
|
52
|
+
client.perform_check({}, {})
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
it_behaves_like 'it delegates to the check', :returnof_allotment_shares
|
57
|
+
it_behaves_like 'it delegates to the check', :confirmation_statement
|
58
|
+
it_behaves_like 'it delegates to the check', :get_submission_status
|
59
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
shared_examples 'it delegates to the client' do |method_name|
|
6
|
+
before { configure_companies_house_input_gateway }
|
7
|
+
let(:data) { 'data' }
|
8
|
+
|
9
|
+
it "delegates #{method_name} to the client" do
|
10
|
+
expect_any_instance_of(CompaniesHouseInputGateway::Client)
|
11
|
+
.to receive(method_name).with(data)
|
12
|
+
CompaniesHouseInputGateway.send(method_name, data)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe CompaniesHouseInputGateway do
|
17
|
+
before { CompaniesHouseInputGateway.instance_variable_set(:@config, nil) }
|
18
|
+
|
19
|
+
describe '#configure' do
|
20
|
+
subject { CompaniesHouseInputGateway.config }
|
21
|
+
CompaniesHouseInputGateway::Config::DEFAULT_OPTIONS.keys.each do |key|
|
22
|
+
context "setting #{key}" do
|
23
|
+
before do
|
24
|
+
CompaniesHouseInputGateway.configure { |config| config[key] = key }
|
25
|
+
end
|
26
|
+
|
27
|
+
describe [key] do
|
28
|
+
subject { super()[key] }
|
29
|
+
it { should == key }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe '#config' do
|
36
|
+
subject(:config) { CompaniesHouseInputGateway.config }
|
37
|
+
|
38
|
+
it "raises an error if CompaniesHouseInputGateway hasn't been configured" do
|
39
|
+
expect { config }
|
40
|
+
.to raise_error CompaniesHouseInputGateway::CompaniesHouseGatewayError
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it_behaves_like 'it delegates to the client', :returnof_allotment_shares
|
45
|
+
it_behaves_like 'it delegates to the client', :confirmation_statement
|
46
|
+
it_behaves_like 'it delegates to the client', :get_submission_status
|
47
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
returnof_allotment_shares = {
|
4
|
+
submission_data: {
|
5
|
+
date_signed: Date.parse('2015-07-01'),
|
6
|
+
company_number: '11111111',
|
7
|
+
company_name: 'EXAMPLE COMPANY',
|
8
|
+
company_authentication_code: '123456',
|
9
|
+
package_reference: '0012',
|
10
|
+
submission_number: '100068'
|
11
|
+
},
|
12
|
+
request_data: {
|
13
|
+
start_period_shares_allotted: Date.parse('2016-05-13'),
|
14
|
+
end_period_shares_allotted: Date.parse('2016-05-13'),
|
15
|
+
statement_of_capital: {
|
16
|
+
capital: [{
|
17
|
+
total_amount_unpaid: 50.to_s,
|
18
|
+
total_number_of_issued_shares: 200.to_s,
|
19
|
+
share_currency: 'GBP',
|
20
|
+
total_aggregate_nominal_value: 224.6912.to_s,
|
21
|
+
shares: [
|
22
|
+
{ share_class: 'Ordinary A', prescribed_particulars: 'A Particulars', num_shares: 100.to_s, aggregate_nominal_value: 112.3456.to_s },
|
23
|
+
{ share_class: 'Ordinary B', prescribed_particulars: 'B Particulars', num_shares: 100.to_s, aggregate_nominal_value: 112.3456.to_s }
|
24
|
+
]
|
25
|
+
}]
|
26
|
+
},
|
27
|
+
allotment: [
|
28
|
+
{
|
29
|
+
share_class: 'Ordinary A',
|
30
|
+
num_shares: 100.to_s,
|
31
|
+
amount_paid_due_per_share: 6.to_s,
|
32
|
+
amount_unpaid_per_share: 4.to_s,
|
33
|
+
share_currency: 'GBP',
|
34
|
+
share_value: 1.123456.to_s,
|
35
|
+
consideration: 'Text for A Consideration'
|
36
|
+
},
|
37
|
+
{ share_class: 'Ordinary B',
|
38
|
+
num_shares: 100.to_s,
|
39
|
+
amount_paid_due_per_share: 6.to_s,
|
40
|
+
amount_unpaid_per_share: 4.to_s,
|
41
|
+
share_currency: 'GBP',
|
42
|
+
share_value: 1.123456.to_s,
|
43
|
+
consideration: 'Text for B Consideration' }
|
44
|
+
]
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
confirmation_statement = {
|
49
|
+
submission_data: {
|
50
|
+
date_signed: Date.parse('2015-07-01'),
|
51
|
+
company_number: '11111111',
|
52
|
+
company_name: 'EXAMPLE COMPANY',
|
53
|
+
company_authentication_code: '123456',
|
54
|
+
package_reference: '0012',
|
55
|
+
submission_number: '100070'
|
56
|
+
},
|
57
|
+
request_data: {
|
58
|
+
trading_on_market: true,
|
59
|
+
dtr_5_applies: false,
|
60
|
+
psc_exempt_as_trading_on_regulated_market: false,
|
61
|
+
psc_exempt_as_shares_admitted_on_market: false,
|
62
|
+
psc_exempt_as_trading_on_uk_regulated_market: false,
|
63
|
+
review_date: Time.now.to_date,
|
64
|
+
sic_codes: { sic_code: %w[10410 01130] },
|
65
|
+
statement_of_capital: {
|
66
|
+
capital: [{
|
67
|
+
total_amount_unpaid: 50.to_d,
|
68
|
+
total_number_of_issued_shares: 100.to_d,
|
69
|
+
share_currency: 'GBP',
|
70
|
+
total_aggregate_nominal_value: 112.3456.to_d,
|
71
|
+
shares: [{
|
72
|
+
share_class: 'Ordinary A',
|
73
|
+
prescribed_particulars: 'A Particulars',
|
74
|
+
num_shares: 200.to_d,
|
75
|
+
aggregate_nominal_value: 112.3456.to_d
|
76
|
+
}]
|
77
|
+
}]
|
78
|
+
},
|
79
|
+
shareholdings: [
|
80
|
+
{
|
81
|
+
share_class: 'Ordinary A',
|
82
|
+
number_held: 100.to_d,
|
83
|
+
transfers: [
|
84
|
+
{ date_of_transfer: Time.now.to_date, number_shares_transferred: 1000.to_d }
|
85
|
+
],
|
86
|
+
shareholders: [
|
87
|
+
{
|
88
|
+
name: { surname: 'Master', forename: 'Ruby' },
|
89
|
+
address: {
|
90
|
+
premise: 'AddressLine 1',
|
91
|
+
street: 'AddressLine2',
|
92
|
+
thoroughfare: 'AddressLine3',
|
93
|
+
post_town: 'PostCode12345',
|
94
|
+
county: 'Address County',
|
95
|
+
country: 'POL'
|
96
|
+
}
|
97
|
+
}
|
98
|
+
]
|
99
|
+
|
100
|
+
},
|
101
|
+
{
|
102
|
+
share_class: 'Ordinary A',
|
103
|
+
number_held: 100.to_d,
|
104
|
+
transfers: [
|
105
|
+
{ date_of_transfer: Time.now.to_date, number_shares_transferred: 1000.to_d }
|
106
|
+
],
|
107
|
+
shareholders: [
|
108
|
+
{
|
109
|
+
name: { amalgamated_name: 'Mater Go Lang' },
|
110
|
+
address: {
|
111
|
+
premise: 'AddressLine 1',
|
112
|
+
street: 'AddressLine2',
|
113
|
+
thoroughfare: 'AddressLine3',
|
114
|
+
post_town: 'PostCode12345',
|
115
|
+
county: 'Address County',
|
116
|
+
country: 'POL'
|
117
|
+
}
|
118
|
+
}
|
119
|
+
]
|
120
|
+
}
|
121
|
+
],
|
122
|
+
state_confirmation: true
|
123
|
+
}
|
124
|
+
}
|
125
|
+
|
126
|
+
get_submission_status = {
|
127
|
+
request_data: {
|
128
|
+
# company_number: "11111111", # we can request either by company number or by particular submission number
|
129
|
+
submission_number: '100086',
|
130
|
+
presenter_id: '74d3658da6d7cecf1cfdb1b413c661f2'
|
131
|
+
}
|
132
|
+
}
|
133
|
+
|
134
|
+
company_data_request = {
|
135
|
+
request_data: {
|
136
|
+
company_number: '11111111',
|
137
|
+
company_authentication_code: '100031',
|
138
|
+
made_up_date: Date.parse('2016-05-13')
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
REQUEST_DATA = {
|
143
|
+
returnof_allotment_shares: returnof_allotment_shares,
|
144
|
+
confirmation_statement: confirmation_statement,
|
145
|
+
get_submission_status: get_submission_status,
|
146
|
+
company_data_request: company_data_request
|
147
|
+
}.freeze
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8" ?>
|
2
|
+
<GovTalkMessage xsi:schemaLocation="http://www.govtalk.gov.uk/CM/envelope http://xmlgw.companieshouse.gov.uk/v1-1/schema/Egov_ch-v2-0.xsd" xmlns="http://www.govtalk.gov.uk/CM/envelope" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#" xmlns:gt="http://www.govtalk.gov.uk/schemas/govtalk/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
|
3
|
+
<EnvelopeVersion>1.0</EnvelopeVersion>
|
4
|
+
<Header>
|
5
|
+
<MessageDetails>
|
6
|
+
<Class>Document</Class>
|
7
|
+
<Qualifier>error</Qualifier>
|
8
|
+
<TransactionID>139335771961</TransactionID>
|
9
|
+
<GatewayTimestamp>2014-02-25T19:48:40-00:00</GatewayTimestamp>
|
10
|
+
</MessageDetails>
|
11
|
+
<SenderDetails>
|
12
|
+
<IDAuthentication>
|
13
|
+
<SenderID>XMLGatewayTestUserID</SenderID>
|
14
|
+
<Authentication>
|
15
|
+
<Method>CHMD5</Method>
|
16
|
+
<Value>760b2d181e070027c70761eaf1e93f05</Value>
|
17
|
+
</Authentication>
|
18
|
+
</IDAuthentication>
|
19
|
+
</SenderDetails>
|
20
|
+
</Header>
|
21
|
+
<GovTalkDetails>
|
22
|
+
<Keys/>
|
23
|
+
<GovTalkErrors>
|
24
|
+
<Error>
|
25
|
+
<RaisedBy>Document</RaisedBy>
|
26
|
+
<Number>604</Number>
|
27
|
+
<Type>fatal</Type>
|
28
|
+
<Text>Error text</Text>
|
29
|
+
<Location></Location>
|
30
|
+
</Error>
|
31
|
+
</GovTalkErrors>
|
32
|
+
</GovTalkDetails>
|
33
|
+
<Body>
|
34
|
+
</Body>
|
35
|
+
</GovTalkMessage>
|