From 83068fab94e26f17fb6538360c1d38175e026aa1 Mon Sep 17 00:00:00 2001 From: Arpit Jalan Date: Tue, 21 Oct 2014 19:36:55 +0530 Subject: [PATCH] FEATURE: show full name in emails --- app/mailers/user_notifications.rb | 15 +++++++++++---- spec/mailers/user_notifications_spec.rb | 24 ++++++++++++++++++++---- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/app/mailers/user_notifications.rb b/app/mailers/user_notifications.rb index 3f4d8015d..f016d4d1b 100644 --- a/app/mailers/user_notifications.rb +++ b/app/mailers/user_notifications.rb @@ -126,7 +126,8 @@ class UserNotifications < ActionMailer::Base send_notification_email( title: post.topic.title, post: post, - from_alias: post.user.username, + username: post.user.username, + from_alias: SiteSetting.enable_names ? post.user.name : post.user.username, allow_reply_by_email: true, use_site_subject: true, add_re_to_subject: true, @@ -170,7 +171,11 @@ class UserNotifications < ActionMailer::Base return unless @notification = opts[:notification] return unless @post = opts[:post] - username = @notification.data_hash[:original_username] + user_name = @notification.data_hash[:original_username] + if @post && SiteSetting.enable_names + user_name = User.find_by(id: @post.user_id).name + end + notification_type = opts[:notification_type] || Notification.types[@notification.notification_type].to_s return if user.mailing_list_mode && !@post.topic.private_message? && @@ -185,7 +190,8 @@ class UserNotifications < ActionMailer::Base send_notification_email( title: title, post: @post, - from_alias: username, + username: @notification.data_hash[:original_username], + from_alias: user_name, allow_reply_by_email: allow_reply_by_email, use_site_subject: use_site_subject, add_re_to_subject: add_re_to_subject, @@ -202,6 +208,7 @@ class UserNotifications < ActionMailer::Base allow_reply_by_email = opts[:allow_reply_by_email] use_site_subject = opts[:use_site_subject] add_re_to_subject = opts[:add_re_to_subject] && post.post_number > 1 + username = opts[:username] from_alias = opts[:from_alias] notification_type = opts[:notification_type] user = opts[:user] @@ -254,7 +261,7 @@ class UserNotifications < ActionMailer::Base post_id: post.id, topic_id: post.topic_id, context: context, - username: from_alias, + username: username, add_unsubscribe_link: true, allow_reply_by_email: allow_reply_by_email, use_site_subject: use_site_subject, diff --git a/spec/mailers/user_notifications_spec.rb b/spec/mailers/user_notifications_spec.rb index baca811de..706bc9f69 100644 --- a/spec/mailers/user_notifications_spec.rb +++ b/spec/mailers/user_notifications_spec.rb @@ -71,16 +71,21 @@ describe UserNotifications do end describe '.user_replied' do + let(:response_by_user) { Fabricate(:user, name: "John Doe") } let(:category) { Fabricate(:category, name: 'India') } let(:topic) { Fabricate(:topic, category: category) } let(:post) { Fabricate(:post, topic: topic) } - let(:response) { Fabricate(:post, topic: post.topic)} + let(:response) { Fabricate(:post, topic: post.topic, user: response_by_user)} let(:user) { Fabricate(:user) } let(:notification) { Fabricate(:notification, user: user) } it 'generates a correct email' do + SiteSetting.stubs(:enable_names).returns(true) mail = UserNotifications.user_replied(response.user, post: response, notification: notification) + # from should include full user name + expect(mail[:from].display_names).to eql(['John Doe']) + # subject should include category name expect(mail.subject).to match(/India/) @@ -109,14 +114,19 @@ describe UserNotifications do end describe '.user_posted' do + let(:response_by_user) { Fabricate(:user, name: "John Doe") } let(:post) { Fabricate(:post) } - let(:response) { Fabricate(:post, topic: post.topic)} + let(:response) { Fabricate(:post, topic: post.topic, user: response_by_user)} let(:user) { Fabricate(:user) } let(:notification) { Fabricate(:notification, user: user) } it 'generates a correct email' do + SiteSetting.stubs(:enable_names).returns(false) mail = UserNotifications.user_posted(response.user, post: response, notification: notification) + # from should not include full user name if "show user full names" is disabled + expect(mail[:from].display_names).to_not eql(['John Doe']) + # subject should not include category name expect(mail.subject).not_to match(/Uncategorized/) @@ -133,14 +143,19 @@ describe UserNotifications do end describe '.user_private_message' do + let(:response_by_user) { Fabricate(:user, name: "John Doe") } let(:topic) { Fabricate(:private_message_topic) } - let(:response) { Fabricate(:post, topic: topic)} + let(:response) { Fabricate(:post, topic: topic, user: response_by_user)} let(:user) { Fabricate(:user) } let(:notification) { Fabricate(:notification, user: user) } it 'generates a correct email' do + SiteSetting.stubs(:enable_names).returns(true) mail = UserNotifications.user_private_message(response.user, post: response, notification: notification) + # from should include full user name + expect(mail[:from].display_names).to eql(['John Doe']) + # subject should include "[PM]" expect(mail.subject).to match("[PM]") @@ -224,7 +239,8 @@ describe UserNotifications do end it "has a from alias" do - expects_build_with(has_entry(:from_alias, "#{username}")) + SiteSetting.stubs(:enable_names).returns(true) + expects_build_with(has_entry(:from_alias, "#{user.name}")) end it "should explain how to respond" do