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