From d2d152918588eadacf356e6438a7e5e2244cd073 Mon Sep 17 00:00:00 2001 From: Anna Buianova Date: Wed, 3 Feb 2021 22:59:50 +0300 Subject: [PATCH] Email confirmation to abuse reports (#12557) * Notify user that the feedback was received * Feedback response templates * Specs for user feedback notification --- .../feedback_messages_controller.rb | 7 ++++ app/mailers/notify_mailer.rb | 4 ++ .../feedback_response_email.html.erb | 17 ++++++++ .../feedback_response_email.text.erb | 6 +++ spec/mailers/notify_mailer_spec.rb | 22 ++++++++++ spec/requests/feedback_messages_spec.rb | 40 +++++++++++++++++++ 6 files changed, 96 insertions(+) create mode 100644 app/views/mailers/notify_mailer/feedback_response_email.html.erb create mode 100644 app/views/mailers/notify_mailer/feedback_response_email.text.erb diff --git a/app/controllers/feedback_messages_controller.rb b/app/controllers/feedback_messages_controller.rb index e9016e15a..8d512a32f 100644 --- a/app/controllers/feedback_messages_controller.rb +++ b/app/controllers/feedback_messages_controller.rb @@ -20,6 +20,13 @@ class FeedbackMessagesController < ApplicationController ) rate_limiter.track_limit_by_action(:feedback_message_creation) + if user_signed_in? + Rails.cache.fetch("user-#{current_user.id}-feedback-response-sent-at", expires_in: 24.hours) do + NotifyMailer.with(email_to: current_user.email).feedback_response_email.deliver_later + Time.current + end + end + respond_to do |format| format.html { redirect_to feedback_messages_path } format.json { render json: { success: true, message: "Your report is submitted" } } diff --git a/app/mailers/notify_mailer.rb b/app/mailers/notify_mailer.rb index bbae82ce2..5077b71e4 100644 --- a/app/mailers/notify_mailer.rb +++ b/app/mailers/notify_mailer.rb @@ -58,6 +58,10 @@ class NotifyMailer < ApplicationMailer mail(to: @user.email, subject: "You just got a badge") end + def feedback_response_email + mail(to: params[:email_to], subject: "Thanks for your report on #{SiteConfig.community_name}") + end + def feedback_message_resolution_email @user = User.find_by(email: params[:email_to]) @email_body = params[:email_body] diff --git a/app/views/mailers/notify_mailer/feedback_response_email.html.erb b/app/views/mailers/notify_mailer/feedback_response_email.html.erb new file mode 100644 index 000000000..7b811a6b4 --- /dev/null +++ b/app/views/mailers/notify_mailer/feedback_response_email.html.erb @@ -0,0 +1,17 @@ +

+ Hi there, +

+ +

+ Thank you for flagging content that may be in violation of the <%= community_name %> Code of Conduct and/or our Terms of Use. We are looking into your report and will reach out if we require additional information in order to take appropriate action. +

+ +

+ We appreciate your help as we work to foster a positive and inclusive environment for all! +

+ +

+ Thanks, +
+ The <%= community_name %> Team +

diff --git a/app/views/mailers/notify_mailer/feedback_response_email.text.erb b/app/views/mailers/notify_mailer/feedback_response_email.text.erb new file mode 100644 index 000000000..ead6e1920 --- /dev/null +++ b/app/views/mailers/notify_mailer/feedback_response_email.text.erb @@ -0,0 +1,6 @@ +Hi there, +Thank you for flagging content that may be in violation of the <%= community_name %> Code of Conduct and/or our Terms of Use. We are looking into your report and will reach out if we require additional information in order to take appropriate action. +We appreciate your help as we work to foster a positive and inclusive environment for all! + +Thanks, +The <%= community_name %> Team diff --git a/spec/mailers/notify_mailer_spec.rb b/spec/mailers/notify_mailer_spec.rb index 8e2ac7185..273a05c49 100644 --- a/spec/mailers/notify_mailer_spec.rb +++ b/spec/mailers/notify_mailer_spec.rb @@ -311,6 +311,28 @@ RSpec.describe NotifyMailer, type: :mailer do end end + describe "#feedback_response_email" do + let(:email) { described_class.with(email_to: user.email).feedback_response_email } + + it "renders proper subject" do + expect(email.subject).to eq("Thanks for your report on #{SiteConfig.community_name}") + end + + it "renders proper sender" do + expect(email.from).to eq([SiteConfig.email_addresses[:default]]) + expected_from = "#{SiteConfig.community_name} <#{SiteConfig.email_addresses[:default]}>" + expect(email["from"].value).to eq(expected_from) + end + + it "renders proper receiver" do + expect(email.to).to eq([user.email]) + end + + it "renders proper body" do + expect(email.html_part.body).to include("Thank you for flagging content") + end + end + describe "#user_contact_email" do let(:email_params) do { diff --git a/spec/requests/feedback_messages_spec.rb b/spec/requests/feedback_messages_spec.rb index 9d40d2a18..6aa59b441 100644 --- a/spec/requests/feedback_messages_spec.rb +++ b/spec/requests/feedback_messages_spec.rb @@ -49,6 +49,14 @@ RSpec.describe "feedback_messages", type: :request do post feedback_messages_path, params: valid_abuse_report_params, headers: headers end end + + it "doesn't try to send an email" do + expect do + perform_enqueued_jobs do + post feedback_messages_path, params: valid_abuse_report_params, headers: headers + end + end.not_to change { ActionMailer::Base.deliveries.count } + end end context "when feedback is created by chat" do @@ -135,6 +143,38 @@ RSpec.describe "feedback_messages", type: :request do post feedback_messages_path, params: valid_abuse_report_params, headers: headers end end + + it "sends an email when no cache" do + expect do + perform_enqueued_jobs do + post feedback_messages_path, params: valid_abuse_report_params, headers: headers + end + end.to change { ActionMailer::Base.deliveries.count }.by(1) + end + + it "queues a correct email when no cache" do + mailer_class = NotifyMailer + mailer = double + message_delivery = double + allow(mailer_class).to receive(:with).and_return(mailer) + allow(mailer).to receive(:feedback_response_email).and_return(message_delivery) + allow(message_delivery).to receive(:deliver_later) + + post feedback_messages_path, params: valid_abuse_report_params, headers: headers + + expect(mailer_class).to have_received(:with).with(email_to: user.email) + expect(mailer).to have_received(:feedback_response_email) + expect(message_delivery).to have_received(:deliver_later) + end + + it "doesn't queue an email when cache is set" do + allow(Rails.cache).to receive(:read).and_return(Time.current) + expect do + perform_enqueued_jobs do + post feedback_messages_path, params: valid_abuse_report_params, headers: headers + end + end.not_to change { ActionMailer::Base.deliveries.count } + end end context "when a user doesn't qualify to bypass the recaptcha submits a report" do