mirror of
https://github.com/astuto/astuto.git
synced 2025-12-16 03:37:56 +01:00
Add New Comment on your post notifications
This notification is sent only to the post owner, unless this person turned off the notifications. A simple first step into the notifications by mail world :) The mail contains a link to user profile The link to the user profile is required to give an easy access to notifications disabling. Also having a preview for the notify_post_owner method We can `Comment.first` because it is part of the db:seeds method. So there should, in development, always be one.
This commit is contained in:
committed by
Riccardo Graziosi
parent
9dfb13eff6
commit
007d08a051
6
spec/mailers/previews/user_mailer_preview.rb
Normal file
6
spec/mailers/previews/user_mailer_preview.rb
Normal file
@@ -0,0 +1,6 @@
|
||||
# Preview all emails at http://localhost:3000/rails/mailers/user_mailer
|
||||
class UserMailerPreview < ActionMailer::Preview
|
||||
def notify_post_owner
|
||||
UserMailer.notify_post_owner(comment: Comment.first)
|
||||
end
|
||||
end
|
||||
22
spec/mailers/user_mailer_spec.rb
Normal file
22
spec/mailers/user_mailer_spec.rb
Normal file
@@ -0,0 +1,22 @@
|
||||
require "rails_helper"
|
||||
|
||||
RSpec.describe UserMailer, type: :mailer do
|
||||
describe "notify_comment" do
|
||||
let(:user) { FactoryBot.create(:user, email: "notified@example.com", notifications_enabled: true) }
|
||||
let(:post) { FactoryBot.create(:post, user: user)}
|
||||
let(:comment) { FactoryBot.create(:comment, post: post) }
|
||||
let(:mail) { UserMailer.notify_post_owner(comment: comment) }
|
||||
|
||||
it "renders the headers" do
|
||||
expect(mail.subject).to eq("[#{ENV.fetch('APP_NAME')}] - New comment on #{post.title}")
|
||||
expect(mail.to).to eq(["notified@example.com"])
|
||||
expect(mail.from).to eq(["notifications@example.com"])
|
||||
end
|
||||
|
||||
it "renders the body" do
|
||||
expect(mail.body.encoded).to include("Hello, #{user.full_name}")
|
||||
expect(mail.body.encoded).to include("There is a new comment by")
|
||||
expect(mail.body.encoded).to include('Annoyed ? You can <a href="http://localhost:3000/users/edit">turn off notifications here</a>')
|
||||
end
|
||||
end
|
||||
end
|
||||
5
spec/support/action_mailer.rb
Normal file
5
spec/support/action_mailer.rb
Normal file
@@ -0,0 +1,5 @@
|
||||
RSpec.configure do |config|
|
||||
config.before(:each) do
|
||||
ActionMailer::Base.deliveries.clear
|
||||
end
|
||||
end
|
||||
@@ -108,4 +108,34 @@ feature 'comments', type: :system, js: true do
|
||||
|
||||
expect(Comment.where(post_id: post.id).count).to eq(comments_count + 1)
|
||||
end
|
||||
end
|
||||
|
||||
it 'notifies post owner when comment is posted' do
|
||||
log_in_as user
|
||||
visit post_path(post)
|
||||
allow(UserMailer).to receive_message_chain(:notify_post_owner, :deliver_later)
|
||||
|
||||
comment_body = 'this is a comment!'
|
||||
|
||||
find(newCommentBodySelector).fill_in with: comment_body
|
||||
click_button 'Submit'
|
||||
visit post_path(post)
|
||||
|
||||
expect(UserMailer).to have_received(:notify_post_owner)
|
||||
end
|
||||
|
||||
it 'does not notify the post owner if he refused notifications' do
|
||||
post_owner = FactoryBot.create(:user, notifications_enabled: false)
|
||||
post = FactoryBot.create(:post, user: post_owner)
|
||||
log_in_as user
|
||||
visit post_path(post)
|
||||
allow(UserMailer).to receive_message_chain(:notify_post_owner, :deliver_later)
|
||||
|
||||
comment_body = 'this is a comment!'
|
||||
|
||||
find(newCommentBodySelector).fill_in with: comment_body
|
||||
click_button 'Submit'
|
||||
visit post_path(post)
|
||||
|
||||
expect(UserMailer).not_to have_received(:notify_post_owner)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -77,7 +77,7 @@ feature 'sign up', type: :system do
|
||||
expect(page).to have_css('.alert')
|
||||
end
|
||||
|
||||
scenario 'and disables notifications' do
|
||||
scenario 'with disabled notifications' do
|
||||
visit new_user_registration_path
|
||||
fill_in 'Full name', with: user.full_name
|
||||
fill_in 'Email', with: user.email
|
||||
|
||||
Reference in New Issue
Block a user