8 changed files with 180 additions and 11 deletions
@ -0,0 +1,9 @@
|
||||
class AddMissingFieldsToScheme < ActiveRecord::Migration[7.0] |
||||
def change |
||||
change_table :schemes, bulk: true do |t| |
||||
t.column :arrangement_type, :string |
||||
t.column :old_id, :string |
||||
t.column :old_visible_id, :integer |
||||
end |
||||
end |
||||
end |
@ -0,0 +1,25 @@
|
||||
<scheme:scheme xmlns:scheme="dclg:scheme"> |
||||
<scheme:id>0ae7ad6dc0f1cf7ef33c18cc8c108bebc1b4923e</scheme:id> |
||||
<scheme:name id-field="Y">Location 1</scheme:name> |
||||
<scheme:local-authority-name>134</scheme:local-authority-name> |
||||
<scheme:postcode>S44 6EJ</scheme:postcode> |
||||
<scheme:required>true</scheme:required> |
||||
<scheme:sensitive>false</scheme:sensitive> |
||||
<scheme:total-units>5</scheme:total-units> |
||||
<scheme:sp-grant>True</scheme:sp-grant> |
||||
<scheme:scheme-type>7</scheme:scheme-type> |
||||
<scheme:unit-type>6</scheme:unit-type> |
||||
<scheme:reg-home-type>1</scheme:reg-home-type> |
||||
<scheme:support-type>2</scheme:support-type> |
||||
<scheme:mobility-type>A</scheme:mobility-type> |
||||
<scheme:intended-stay>P</scheme:intended-stay> |
||||
<scheme:client-group-1>M</scheme:client-group-1> |
||||
<scheme:client-group-2/> |
||||
<scheme:start-date>1900-01-01</scheme:start-date> |
||||
<scheme:end-date>2050-12-31</scheme:end-date> |
||||
<scheme:mgmtgroup>6d6d7618b58affe2a150a5ef2e9f4765fa6cd05d</scheme:mgmtgroup> |
||||
<scheme:status>Approved</scheme:status> |
||||
<scheme:visible-id>10</scheme:visible-id> |
||||
<scheme:user-stamp>1</scheme:user-stamp> |
||||
<scheme:date-stamp>08:12.0</scheme:date-stamp> |
||||
</scheme:scheme> |
@ -0,0 +1,23 @@
|
||||
<scheme:scheme xmlns:scheme="dclg:scheme"> |
||||
<scheme:id>0bb3836b70b4dd9903263d5a764a5c45b964a89d</scheme:id> |
||||
<scheme:name id-field="Y">Location 2</scheme:name> |
||||
<scheme:local-authority-name>134</scheme:local-authority-name> |
||||
<scheme:postcode>NG19 8SW</scheme:postcode> |
||||
<scheme:required>false</scheme:required> |
||||
<scheme:sensitive>false</scheme:sensitive> |
||||
<scheme:total-units>11</scheme:total-units> |
||||
<scheme:scheme-type>7</scheme:scheme-type> |
||||
<scheme:unit-type>6</scheme:unit-type> |
||||
<scheme:reg-home-type>1</scheme:reg-home-type> |
||||
<scheme:support-type>0</scheme:support-type> |
||||
<scheme:mobility-type>W</scheme:mobility-type> |
||||
<scheme:sp-grant>False</scheme:sp-grant> |
||||
<scheme:intended-stay>P</scheme:intended-stay> |
||||
<scheme:client-group-1>M</scheme:client-group-1> |
||||
<scheme:client-group-2/> |
||||
<scheme:start-date>2014-04-07</scheme:start-date> |
||||
<scheme:end-date/> |
||||
<scheme:mgmtgroup>6d6d7618b58affe2a150a5ef2e9f4765fa6cd05d</scheme:mgmtgroup> |
||||
<scheme:status>Approved</scheme:status> |
||||
<scheme:visible-id>001</scheme:visible-id> |
||||
</scheme:scheme> |
@ -0,0 +1,9 @@
|
||||
<mgmtgroup:mgmtgroup xmlns:mgmtgroup="dclg:mgmtgroup"> |
||||
<mgmtgroup:id>6d6d7618b58affe2a150a5ef2e9f4765fa6cd05d</mgmtgroup:id> |
||||
<mgmtgroup:name id-field="Y">Management Group</mgmtgroup:name> |
||||
<mgmtgroup:arrangement_type>O</mgmtgroup:arrangement_type> |
||||
<mgmtgroup:agent>456</mgmtgroup:agent> |
||||
<mgmtgroup:institution>7c5bd5fb549c09z2c55d9cb90d7ba84927e64618</mgmtgroup:institution> |
||||
<mgmtgroup:status>Approved</mgmtgroup:status> |
||||
<mgmtgroup:visible-id>123</mgmtgroup:visible-id> |
||||
</mgmtgroup:mgmtgroup> |
@ -0,0 +1,63 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Imports::SchemeImportService do |
||||
subject(:scheme_service) { described_class.new(storage_service, logger) } |
||||
|
||||
let(:storage_service) { instance_double(StorageService) } |
||||
let(:logger) { instance_double(ActiveSupport::Logger) } |
||||
|
||||
let(:fixture_directory) { "spec/fixtures/imports/schemes" } |
||||
let(:scheme_id) { "6d6d7618b58affe2a150a5ef2e9f4765fa6cd05d" } |
||||
|
||||
let!(:owning_org) { FactoryBot.create(:organisation, old_org_id: "7c5bd5fb549c09z2c55d9cb90d7ba84927e64618") } |
||||
let!(:managing_org) { FactoryBot.create(:organisation, old_visible_id: 456) } |
||||
|
||||
def open_file(directory, filename) |
||||
File.open("#{directory}/#{filename}.xml") |
||||
end |
||||
|
||||
context "when importing case logs" do |
||||
let(:remote_folder) { "mgmtgroups" } |
||||
|
||||
before do |
||||
# Stub the S3 file listing and download |
||||
allow(storage_service).to receive(:list_files) |
||||
.and_return(%W[#{remote_folder}/#{scheme_id}.xml]) |
||||
allow(storage_service).to receive(:get_file_io) |
||||
.with("#{remote_folder}/#{scheme_id}.xml") |
||||
.and_return(open_file(fixture_directory, scheme_id), open_file(fixture_directory, scheme_id)) |
||||
end |
||||
|
||||
it "successfully create all case logs" do |
||||
expect(logger).not_to receive(:error) |
||||
expect(logger).not_to receive(:warn) |
||||
expect(logger).not_to receive(:info) |
||||
expect { scheme_service.create_schemes(remote_folder) } |
||||
.to change(Scheme, :count).by(1) |
||||
end |
||||
end |
||||
|
||||
context "when importing a specific scheme" do |
||||
let(:scheme_file) { open_file(fixture_directory, scheme_id) } |
||||
let(:scheme_xml) { Nokogiri::XML(scheme_file) } |
||||
|
||||
it "matches expected values" do |
||||
scheme = scheme_service.create_scheme(scheme_xml) |
||||
expect(scheme.owning_organisation).to eq(owning_org) |
||||
expect(scheme.managing_organisation).to eq(managing_org) |
||||
expect(scheme.old_id).to eq("6d6d7618b58affe2a150a5ef2e9f4765fa6cd05d") |
||||
expect(scheme.old_visible_id).to eq(123) |
||||
expect(scheme.service_name).to eq("Management Group") |
||||
expect(scheme.arrangement_type).to eq("O") |
||||
end |
||||
|
||||
context "and the scheme status is not approved" do |
||||
before { scheme_xml.at_xpath("//mgmtgroup:status").content = "Temporary" } |
||||
|
||||
it "does not create the scheme" do |
||||
scheme = scheme_service.create_scheme(scheme_xml) |
||||
expect(scheme).to be_nil |
||||
end |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue