From 27a64dddcee735b78eaa5a825ec4791004548281 Mon Sep 17 00:00:00 2001 From: Kat Date: Wed, 26 Jul 2023 10:22:57 +0100 Subject: [PATCH] Add more tests for merging relationships --- .../merge/merge_organisations_service_spec.rb | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/spec/services/merge/merge_organisations_service_spec.rb b/spec/services/merge/merge_organisations_service_spec.rb index 10cff2aa9..330ea4624 100644 --- a/spec/services/merge/merge_organisations_service_spec.rb +++ b/spec/services/merge/merge_organisations_service_spec.rb @@ -254,6 +254,49 @@ RSpec.describe Merge::MergeOrganisationsService do expect(merging_organisation.merge_date).to eq(nil) expect(merging_organisation_user.organisation).to eq(merging_organisation) end + + context "and merging organisation relationships" do + let(:other_organisation) { create(:organisation) } + let!(:merging_organisation_relationship) { create(:organisation_relationship, parent_organisation: merging_organisation) } + let!(:absorbing_organisation_relationship) { create(:organisation_relationship, parent_organisation: absorbing_organisation) } + + before do + create(:organisation_relationship, parent_organisation: merging_organisation, child_organisation: absorbing_organisation) + create(:organisation_relationship, parent_organisation: merging_organisation, child_organisation: other_organisation) + create(:organisation_relationship, parent_organisation: absorbing_organisation, child_organisation: other_organisation) + create(:organisation_relationship, parent_organisation: merging_organisation, child_organisation: merging_organisation_too) + end + + it "combines organisation relationships" do + merge_organisations_service.call + + absorbing_organisation.reload + expect(absorbing_organisation.child_organisations).to include(other_organisation) + expect(absorbing_organisation.child_organisations).to include(absorbing_organisation_relationship.child_organisation) + expect(absorbing_organisation.child_organisations).to include(merging_organisation_relationship.child_organisation) + expect(absorbing_organisation.child_organisations).not_to include(merging_organisation) + expect(absorbing_organisation.parent_organisations).not_to include(merging_organisation) + expect(absorbing_organisation.child_organisations).not_to include(merging_organisation_too) + expect(absorbing_organisation.parent_organisations).not_to include(merging_organisation_too) + expect(absorbing_organisation.parent_organisations.count).to eq(0) + expect(absorbing_organisation.child_organisations.count).to eq(3) + end + + it "rolls back if there's an error" do + allow(Organisation).to receive(:find).with([merging_organisation_ids]).and_return(Organisation.find(merging_organisation_ids)) + allow(Organisation).to receive(:find).with(absorbing_organisation.id).and_return(absorbing_organisation) + allow(absorbing_organisation).to receive(:save!).and_raise(ActiveRecord::RecordInvalid) + expect(Rails.logger).to receive(:error).with("Organisation merge failed with: Record invalid") + merge_organisations_service.call + + absorbing_organisation.reload + expect(absorbing_organisation.child_organisations.count).to eq(2) + expect(absorbing_organisation.parent_organisations.count).to eq(1) + expect(absorbing_organisation.child_organisations).to include(other_organisation) + expect(absorbing_organisation.parent_organisations).to include(merging_organisation) + expect(absorbing_organisation.child_organisations).to include(absorbing_organisation_relationship.child_organisation) + end + end end end end