Browse Source

Update rake task add tests for multiple merging orgs

pull/1801/head
Kat 3 years ago
parent
commit
61c9fc5c1c
  1. 2
      lib/tasks/merge_organisations.rake
  2. 4
      spec/lib/tasks/merge_organisations_spec.rb
  3. 52
      spec/services/merge/merge_organisations_service_spec.rb

2
lib/tasks/merge_organisations.rake

@ -2,7 +2,7 @@ namespace :merge do
desc "Merge organisations into one" desc "Merge organisations into one"
task :merge_organisations, %i[absorbing_organisation_id merging_organisation_ids] => :environment do |_task, args| task :merge_organisations, %i[absorbing_organisation_id merging_organisation_ids] => :environment do |_task, args|
absorbing_organisation_id = args[:absorbing_organisation_id] absorbing_organisation_id = args[:absorbing_organisation_id]
merging_organisation_ids = args[:merging_organisation_ids]&.split(",")&.map(&:to_i) merging_organisation_ids = args[:merging_organisation_ids]&.split(" ")&.map(&:to_i)
raise "Usage: rake merge:merge_organisations[absorbing_organisation_id, merging_organisation_ids]" if merging_organisation_ids.blank? || absorbing_organisation_id.blank? raise "Usage: rake merge:merge_organisations[absorbing_organisation_id, merging_organisation_ids]" if merging_organisation_ids.blank? || absorbing_organisation_id.blank?

4
spec/lib/tasks/merge_organisations_spec.rb

@ -28,13 +28,13 @@ RSpec.describe "emails" do
end end
it "raises an error when only merging organisations are given" do it "raises an error when only merging organisations are given" do
expect { task.invoke(nil, "1,2") }.to raise_error(RuntimeError, "Usage: rake merge:merge_organisations[absorbing_organisation_id, merging_organisation_ids]") expect { task.invoke(nil, "1 2") }.to raise_error(RuntimeError, "Usage: rake merge:merge_organisations[absorbing_organisation_id, merging_organisation_ids]")
end end
it "raises runs the service with correct organisation IDs" do it "raises runs the service with correct organisation IDs" do
expect(Merge::MergeOrganisationsService).to receive(:new).with(absorbing_organisation_id: 1, merging_organisation_ids: [2, 3]).once expect(Merge::MergeOrganisationsService).to receive(:new).with(absorbing_organisation_id: 1, merging_organisation_ids: [2, 3]).once
expect(merge_organisations_service).to receive(:call).once expect(merge_organisations_service).to receive(:call).once
task.invoke(1, "2,3") task.invoke(1, "2 3")
end end
end end
end end

52
spec/services/merge/merge_organisations_service_spec.rb

@ -45,7 +45,7 @@ RSpec.describe Merge::MergeOrganisationsService do
absorbing_organisation.reload absorbing_organisation.reload
expect(absorbing_organisation.holds_own_stock).to eq(false) expect(absorbing_organisation.holds_own_stock).to eq(false)
# expect(merging_organisation.merge_date).to eq(nil) expect(merging_organisation.merge_date).to eq(nil)
expect(merging_organisation_user.organisation).to eq(merging_organisation) expect(merging_organisation_user.organisation).to eq(merging_organisation)
end end
@ -205,5 +205,55 @@ RSpec.describe Merge::MergeOrganisationsService do
end end
end end
end end
context "when merging a multiple organisations into an existing organisation" do
let(:merging_organisation) { create(:organisation, holds_own_stock: true, name: "fake org") }
let(:merging_organisation_too) { create(:organisation, holds_own_stock: true, name: "second org") }
let(:merging_organisation_ids) { [merging_organisation.id, merging_organisation_too.id] }
let!(:merging_organisation_user) { create(:user, organisation: merging_organisation, name: "fake name", email: "fake@email.com") }
before do
create_list(:user, 5, organisation: merging_organisation_too)
end
it "moves the users from merging organisations to absorbing organisation" do
expect(Rails.logger).to receive(:info).with(/Merged users from second org:/)
expect(Rails.logger).to receive(:info).with("New schemes from fake org:\nNew schemes from second org:\n")
merge_organisations_service.call
merging_organisation_user.reload
expect(merging_organisation_user.organisation).to eq(absorbing_organisation)
end
it "sets merge date on merged organisations" do
merge_organisations_service.call
merging_organisation.reload
merging_organisation_too.reload
expect(merging_organisation.merge_date.to_date).to eq(Time.zone.today)
expect(merging_organisation_too.merge_date.to_date).to eq(Time.zone.today)
end
it "combines organisation data" do
merge_organisations_service.call
absorbing_organisation.reload
expect(absorbing_organisation.holds_own_stock).to eq(true)
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.holds_own_stock).to eq(false)
expect(merging_organisation.merge_date).to eq(nil)
expect(merging_organisation_user.organisation).to eq(merging_organisation)
end
end
end end
end end

Loading…
Cancel
Save