Browse Source

Send absorbing organisation success mail

pull/2078/head
Kat 2 years ago
parent
commit
6dd48a9421
  1. 20
      app/mailers/merge_completion_mailer.rb
  2. 17
      app/services/merge/merge_organisations_service.rb
  3. 29
      spec/mailers/merge_completion_mailer_spec.rb
  4. 50
      spec/services/merge/merge_organisations_service_spec.rb

20
app/mailers/merge_completion_mailer.rb

@ -1,10 +1,24 @@
class MergeCompletionMailer < NotifyMailer
MERGE_COMPLETION_TEMPLATE_ID = "b3b62e72-5ced-4515-8720-08bdc7bac792".freeze
MERGE_COMPLETION_MERGING_ORGANISATION_TEMPLATE_ID = "b3b62e72-5ced-4515-8720-08bdc7bac792".freeze
MERGE_COMPLETION_ABSORBING_ORGANISATION_TEMPLATE_ID = "xxx".freeze
def send_merge_completion_mail(email, merged_organisation_name, absorbing_organisation_name, merge_date)
def send_merged_organisation_success_mail(email, merged_organisation_name, absorbing_organisation_name, merge_date)
send_email(
email,
MERGE_COMPLETION_TEMPLATE_ID,
MERGE_COMPLETION_MERGING_ORGANISATION_TEMPLATE_ID,
{
merged_organisation_name:,
absorbing_organisation_name:,
merge_date: merge_date.to_formatted_s(:govuk_date),
email:,
},
)
end
def send_absorbing_organisation_success_mail(email, merged_organisation_name, absorbing_organisation_name, merge_date)
send_email(
email,
MERGE_COMPLETION_ABSORBING_ORGANISATION_TEMPLATE_ID,
{
merged_organisation_name:,
absorbing_organisation_name:,

17
app/services/merge/merge_organisations_service.rb

@ -153,9 +153,12 @@ private
end
def send_success_emails
@merged_users.each do |organisation_name, users|
users.each do |user|
MergeCompletionMailer.send_merge_completion_mail(user[:email], organisation_name, @absorbing_organisation.name, @merge_date).deliver_later
@absorbing_organisation.users.each do |user|
merged_organisation, merged_user = find_merged_user_and_organization_by_email(user.email)
if merged_user.present?
MergeCompletionMailer.send_merged_organisation_success_mail(merged_user[:email], merged_organisation, @absorbing_organisation.name, @merge_date).deliver_later
else
MergeCompletionMailer.send_absorbing_organisation_success_mail(user.email, @merging_organisations.map(&:name).join(", "), @absorbing_organisation.name, @merge_date).deliver_later
end
end
end
@ -234,4 +237,12 @@ private
deactivation_period.destroy!
end
end
def find_merged_user_and_organization_by_email(provided_email)
@merged_users.each do |org, users|
user = users.find { |u| u[:email] == provided_email }
return org, user if user
end
nil
end
end

29
spec/mailers/merge_completion_mailer_spec.rb

@ -8,18 +8,39 @@ RSpec.describe MergeCompletionMailer do
allow(notify_client).to receive(:send_email).and_return(true)
end
describe "#send_merge_completion_mail" do
describe "#send_merged_organisation_success_mail" do
let(:merge_date) { Time.zone.local(2023, 1, 1) }
it "sends a merge completion E-mail via notify" do
expect(notify_client).to receive(:send_email).with(hash_including({ personalisation: hash_including({
expect(notify_client).to receive(:send_email).with(hash_including({
template_id: MergeCompletionMailer::MERGE_COMPLETION_MERGING_ORGANISATION_TEMPLATE_ID,
personalisation: hash_including({
merged_organisation_name: "merged organisation",
absorbing_organisation_name: "absorbing organisation",
merge_date: "1 January 2023",
email: "user@example.com",
}) }))
}),
}))
described_class.new.send_merge_completion_mail("user@example.com", "merged organisation", "absorbing organisation", merge_date)
described_class.new.send_merged_organisation_success_mail("user@example.com", "merged organisation", "absorbing organisation", merge_date)
end
end
describe "#send_absorbing_organisation_success_mail" do
let(:merge_date) { Time.zone.local(2023, 1, 1) }
it "sends a merge completion E-mail via notify" do
expect(notify_client).to receive(:send_email).with(hash_including({
template_id: MergeCompletionMailer::MERGE_COMPLETION_ABSORBING_ORGANISATION_TEMPLATE_ID,
personalisation: hash_including({
merged_organisation_name: "merged organisation",
absorbing_organisation_name: "absorbing organisation",
merge_date: "1 January 2023",
email: "user@example.com",
}),
}))
described_class.new.send_absorbing_organisation_success_mail("user@example.com", "merged organisation", "absorbing organisation", merge_date)
end
end
end

50
spec/services/merge/merge_organisations_service_spec.rb

@ -4,7 +4,8 @@ RSpec.describe Merge::MergeOrganisationsService do
describe "#call" do
before do
mail_double = instance_double("ActionMailer::MessageDelivery", deliver_later: nil)
allow(MergeCompletionMailer).to receive(:send_merge_completion_mail).and_return(mail_double)
allow(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).and_return(mail_double)
allow(MergeCompletionMailer).to receive(:send_absorbing_organisation_success_mail).and_return(mail_double)
end
context "when merging a single organisation into an existing organisation" do
@ -838,8 +839,21 @@ RSpec.describe Merge::MergeOrganisationsService do
end
it "sends a merge completion E-mail to the merged organisation users" do
expect(MergeCompletionMailer).to receive(:send_merge_completion_mail).with(merging_organisation_user.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_merge_completion_mail).with(merging_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).with(merging_organisation_user.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).with(merging_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).not_to receive(:send_merged_organisation_success_mail).with(absorbing_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today)
expect(MergeCompletionMailer).not_to receive(:send_merged_organisation_success_mail).with(absorbing_organisation_user.email, "fake org", "absorbing org", Time.zone.today)
merge_organisations_service.call
end
it "sends a merge completion E-mail to the original absorbing organisation users" do
expect(MergeCompletionMailer).to receive(:send_absorbing_organisation_success_mail).with(absorbing_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_absorbing_organisation_success_mail).with(absorbing_organisation_user.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).not_to receive(:send_absorbing_organisation_success_mail).with(merging_organisation_user.email, "fake org", "absorbing org", Time.zone.today)
expect(MergeCompletionMailer).not_to receive(:send_absorbing_organisation_success_mail).with(merging_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today)
merge_organisations_service.call
end
@ -848,7 +862,7 @@ RSpec.describe Merge::MergeOrganisationsService do
context "when merging a multiple organisations into an existing organisation" do
subject(:merge_organisations_service) { described_class.new(absorbing_organisation_id: absorbing_organisation.id, merging_organisation_ids: [merging_organisation_ids], merge_date: nil) }
let(:absorbing_organisation) { create(:organisation, holds_own_stock: false) }
let(:absorbing_organisation) { create(:organisation, holds_own_stock: false, name: "absorbing org") }
let(:absorbing_organisation_user) { create(:user, organisation: absorbing_organisation) }
let(:merging_organisation) { create(:organisation, holds_own_stock: true, name: "fake org") }
@ -946,6 +960,34 @@ RSpec.describe Merge::MergeOrganisationsService do
expect(merging_organisation.users.first).to eq(dpo)
expect(merging_organisation.data_protection_confirmation.data_protection_officer).to eq(dpo)
end
it "sends a merge completion E-mail to the merged organisation users" do
expect(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).with(merging_organisation_user.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).with(merging_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).not_to receive(:send_merged_organisation_success_mail).with(absorbing_organisation.data_protection_officers.first.email, "fake org", "absorbing org", Time.zone.today)
expect(MergeCompletionMailer).not_to receive(:send_merged_organisation_success_mail).with(absorbing_organisation_user.email, "fake org", "absorbing org", Time.zone.today)
merging_organisation_too.users.each do |user|
expect(MergeCompletionMailer).to receive(:send_merged_organisation_success_mail).with(user.email, "second org", "absorbing org", Time.zone.today).once
end
merge_organisations_service.call
end
it "sends a merge completion E-mail to the original absorbing organisation users" do
expect(MergeCompletionMailer).to receive(:send_absorbing_organisation_success_mail).with(absorbing_organisation.data_protection_officers.first.email, "fake org, second org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).to receive(:send_absorbing_organisation_success_mail).with(absorbing_organisation_user.email, "fake org, second org", "absorbing org", Time.zone.today).once
expect(MergeCompletionMailer).not_to receive(:send_absorbing_organisation_success_mail).with(merging_organisation_user.email, "fake org, second org", "absorbing org", Time.zone.today)
expect(MergeCompletionMailer).not_to receive(:send_absorbing_organisation_success_mail).with(merging_organisation.data_protection_officers.first.email, "fake org, second org", "absorbing org", Time.zone.today)
merging_organisation_too.users.each do |user|
expect(MergeCompletionMailer).not_to receive(:send_absorbing_organisation_success_mail).with(user.email, "second org", "absorbing org", Time.zone.today)
end
merge_organisations_service.call
end
end
context "and merging organisation relationships" do

Loading…
Cancel
Save