natdeanlewissoftwire
1 year ago
5 changed files with 79 additions and 5 deletions
@ -0,0 +1,5 @@
|
||||
<institution-link:institution-link xmlns:institution-link="dclg:institution-link"> |
||||
<institution-link:id>1</institution-link:id> |
||||
<institution-link:parent-institution>1</institution-link:parent-institution> |
||||
<institution-link:child-institution>2</institution-link:child-institution> |
||||
</institution-link:institution-link> |
@ -0,0 +1,60 @@
|
||||
require "rails_helper" |
||||
|
||||
RSpec.describe Imports::OrganisationRelationshipImportService do |
||||
let(:storage_service) { instance_double(Storage::S3Service) } |
||||
let(:logger) { instance_double(Rails::Rack::Logger) } |
||||
let(:folder_name) { "organisation_relationships" } |
||||
let(:filenames) { %w[my_folder/my_file1.xml my_folder/my_file2.xml] } |
||||
let(:fixture_directory) { "spec/fixtures/imports/institution-link" } |
||||
let!(:child_organisation) { create(:organisation, old_visible_id: 1) } |
||||
let!(:parent_organisation) { create(:organisation, old_visible_id: 2) } |
||||
let!(:grandparent_organisation) { create(:organisation, old_visible_id: 3) } |
||||
|
||||
def create_organisation_relationship_file(fixture_directory, child_organisation_id, parent_organisation_id) |
||||
file = File.open("#{fixture_directory}/test_institution_link.xml") |
||||
doc = Nokogiri::XML(file) |
||||
doc.at_xpath("//institution-link:parent-institution").content = parent_organisation_id if parent_organisation_id |
||||
doc.at_xpath("//institution-link:child-institution").content = child_organisation_id if child_organisation_id |
||||
StringIO.new(doc.to_xml) |
||||
end |
||||
|
||||
context "when importing organisation relationships" do |
||||
subject(:import_service) { described_class.new(storage_service) } |
||||
|
||||
before do |
||||
allow(storage_service).to receive(:list_files) |
||||
.and_return(filenames) |
||||
allow(storage_service).to receive(:get_file_io) |
||||
.with(filenames[0]) |
||||
.and_return(create_organisation_relationship_file(fixture_directory, 1, 2)) |
||||
allow(storage_service).to receive(:get_file_io) |
||||
.with(filenames[1]) |
||||
.and_return(create_organisation_relationship_file(fixture_directory, 2, 3)) |
||||
end |
||||
|
||||
it "successfully create an organisation relationship with the expected data" do |
||||
import_service.create_organisation_relationships(folder_name) |
||||
|
||||
organisation_relationship = OrganisationRelationship.find { |r| r.child_organisation == child_organisation } |
||||
expect(organisation_relationship.child_organisation).to eq(child_organisation) |
||||
expect(organisation_relationship.parent_organisation).to eq(parent_organisation) |
||||
end |
||||
|
||||
it "doesn't re-import duplicates" do |
||||
import_service.create_organisation_relationships(folder_name) |
||||
import_service.create_organisation_relationships(folder_name) |
||||
|
||||
expect(OrganisationRelationship.count).to eq(2) |
||||
end |
||||
|
||||
it "successfully creates multiple organisation relationships" do |
||||
expect(storage_service).to receive(:list_files).with(folder_name) |
||||
expect(storage_service).to receive(:get_file_io).with(filenames[0]).ordered |
||||
expect(storage_service).to receive(:get_file_io).with(filenames[1]).ordered |
||||
|
||||
expect { import_service.create_organisation_relationships(folder_name) }.to change(OrganisationRelationship, :count).by(2) |
||||
expect(OrganisationRelationship).to exist(child_organisation:, parent_organisation:) |
||||
expect(OrganisationRelationship).to exist(child_organisation: parent_organisation, parent_organisation: grandparent_organisation) |
||||
end |
||||
end |
||||
end |
Loading…
Reference in new issue