So tests won't fail when an institution changes the default organization name. The tests are also easier to understand now, since it's more obvious where the "CONSUL" text is coming from.
508 lines
19 KiB
Ruby
508 lines
19 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Emails" do
|
|
before do
|
|
reset_mailer
|
|
end
|
|
|
|
context "On Staging Environment" do
|
|
scenario "emails are delivered to configured recipient" do
|
|
interceptor = RecipientInterceptor.new("recipient@consul.dev", subject_prefix: "[staging]")
|
|
Mail.register_interceptor(interceptor)
|
|
|
|
sign_up
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("[staging] Confirmation instructions")
|
|
expect(email).to deliver_to("recipient@consul.dev")
|
|
expect(email).not_to deliver_to("manuela@consul.dev")
|
|
|
|
Mail.unregister_interceptor(interceptor)
|
|
end
|
|
end
|
|
|
|
scenario "Signup Email" do
|
|
sign_up
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Confirmation instructions")
|
|
expect(email).to deliver_to("manuela@consul.dev")
|
|
expect(email).to have_body_text(user_confirmation_path)
|
|
end
|
|
|
|
scenario "Reset password" do
|
|
reset_password
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Instructions for resetting your password")
|
|
expect(email).to deliver_to("manuela@consul.dev")
|
|
expect(email).to have_body_text(edit_user_password_path)
|
|
end
|
|
|
|
context "Proposal comments" do
|
|
let(:user) { create(:user, email_on_comment: true) }
|
|
let(:proposal) { create(:proposal, author: user) }
|
|
|
|
scenario "Send email on proposal comment" do
|
|
comment_on(proposal)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has commented on your citizen proposal")
|
|
expect(email).to deliver_to(proposal.author)
|
|
expect(email).to have_body_text(proposal_path(proposal))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own proposal comments" do
|
|
comment_on(proposal, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about proposal comment unless set in preferences" do
|
|
user.update!(email_on_comment: false)
|
|
comment_on(proposal)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
context "Debate comments" do
|
|
let(:user) { create(:user, email_on_comment: true) }
|
|
let(:debate) { create(:debate, author: user) }
|
|
|
|
scenario "Send email on debate comment" do
|
|
comment_on(debate)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has commented on your debate")
|
|
expect(email).to deliver_to(debate.author)
|
|
expect(email).to have_body_text(debate_path(debate))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own debate comments" do
|
|
comment_on(debate, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about debate comment unless set in preferences" do
|
|
user.update!(email_on_comment: false)
|
|
comment_on(debate)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
context "Budget investments comments" do
|
|
let(:user) { create(:user, email_on_comment: true) }
|
|
let(:investment) { create(:budget_investment, author: user, budget: create(:budget)) }
|
|
|
|
scenario "Send email on budget investment comment" do
|
|
comment_on(investment)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has commented on your investment")
|
|
expect(email).to deliver_to(investment.author)
|
|
expect(email).to have_body_text(budget_investment_path(investment, budget_id: investment.budget_id))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own budget investments comments" do
|
|
comment_on(investment, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about budget investment comment unless set in preferences" do
|
|
user.update!(email_on_comment: false)
|
|
comment_on(investment)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
context "Topic comments" do
|
|
let(:user) { create(:user, email_on_comment: true) }
|
|
let(:proposal) { create(:proposal) }
|
|
let(:topic) { create(:topic, author: user, community: proposal.community) }
|
|
|
|
scenario "Send email on topic comment" do
|
|
comment_on(topic)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has commented on your topic")
|
|
expect(email).to deliver_to(topic.author)
|
|
expect(email).to have_body_text(community_topic_path(topic, community_id: topic.community_id))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own topic comments" do
|
|
comment_on(topic, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about topic comment unless set in preferences" do
|
|
user.update!(email_on_comment: false)
|
|
comment_on(topic)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
context "Poll comments" do
|
|
let(:user) { create(:user, email_on_comment: true) }
|
|
let(:poll) { create(:poll, author: user) }
|
|
|
|
scenario "Send email on poll comment" do
|
|
comment_on(poll)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has commented on your poll")
|
|
expect(email).to deliver_to(poll.author)
|
|
expect(email).to have_body_text(poll_path(poll))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own poll comments" do
|
|
comment_on(poll, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about poll question comment unless set in preferences" do
|
|
user.update!(email_on_comment: false)
|
|
comment_on(poll)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
context "Comment replies" do
|
|
let(:user) { create(:user, email_on_comment_reply: true) }
|
|
|
|
scenario "Send email on comment reply", :js do
|
|
reply_to(user)
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has responded to your comment")
|
|
expect(email).to deliver_to(user)
|
|
expect(email).not_to have_body_text(debate_path(Comment.first.commentable))
|
|
expect(email).to have_body_text(comment_path(Comment.last))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
|
|
scenario "Do not send email about own replies to own comments", :js do
|
|
reply_to(user, user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
|
|
scenario "Do not send email about comment reply unless set in preferences", :js do
|
|
user.update!(email_on_comment_reply: false)
|
|
reply_to(user)
|
|
expect { open_last_email }.to raise_error("No email has been sent!")
|
|
end
|
|
end
|
|
|
|
scenario "Email depending on user's locale" do
|
|
visit root_path(locale: :es)
|
|
|
|
click_link "Registrarse"
|
|
fill_in_signup_form
|
|
click_button "Registrarse"
|
|
|
|
email = open_last_email
|
|
expect(email).to deliver_to("manuela@consul.dev")
|
|
expect(email).to have_body_text(user_confirmation_path)
|
|
expect(email).to have_subject("Instrucciones de confirmación")
|
|
end
|
|
|
|
context "Direct Message" do
|
|
scenario "Receiver email" do
|
|
sender = create(:user, :level_two)
|
|
receiver = create(:user, :level_two)
|
|
|
|
direct_message = create_direct_message(sender, receiver)
|
|
|
|
email = unread_emails_for(receiver.email).first
|
|
|
|
expect(email).to have_subject("You have received a new private message")
|
|
expect(email).to have_body_text(direct_message.title)
|
|
expect(email).to have_body_text(direct_message.body)
|
|
expect(email).to have_body_text(direct_message.sender.name)
|
|
expect(email).to have_body_text(/#{user_path(direct_message.sender_id)}/)
|
|
end
|
|
|
|
scenario "Sender email" do
|
|
sender = create(:user, :level_two)
|
|
receiver = create(:user, :level_two)
|
|
|
|
direct_message = create_direct_message(sender, receiver)
|
|
|
|
email = unread_emails_for(sender.email).first
|
|
|
|
expect(email).to have_subject("You have sent a new private message")
|
|
expect(email).to have_body_text(direct_message.title)
|
|
expect(email).to have_body_text(direct_message.body)
|
|
expect(email).to have_body_text(direct_message.receiver.name)
|
|
end
|
|
|
|
pending "In the copy sent to the sender, display the receiver's name"
|
|
end
|
|
|
|
context "Proposal notification digest" do
|
|
scenario "notifications for proposals that I'm following" do
|
|
Setting["org_name"] = "CONSUL"
|
|
user = create(:user, email_digest: true)
|
|
|
|
proposal1 = create(:proposal, followers: [user])
|
|
proposal2 = create(:proposal, followers: [user])
|
|
proposal3 = create(:proposal)
|
|
|
|
reset_mailer
|
|
|
|
notification1 = create_proposal_notification(proposal1)
|
|
notification2 = create_proposal_notification(proposal2)
|
|
|
|
email_digest = EmailDigest.new(user)
|
|
email_digest.deliver(Time.current)
|
|
email_digest.mark_as_emailed
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Proposal notifications in CONSUL")
|
|
expect(email).to deliver_to(user.email)
|
|
|
|
expect(email).to have_body_text(proposal1.title)
|
|
expect(email).to have_body_text(notification1.notifiable.title)
|
|
expect(email).to have_body_text(notification1.notifiable.body)
|
|
expect(email).to have_body_text(proposal1.author.name)
|
|
|
|
expect(email).to have_body_text(/#{proposal_path(proposal1, anchor: "tab-notifications")}/)
|
|
expect(email).to have_body_text(/#{proposal_path(proposal1, anchor: "comments")}/)
|
|
expect(email).to have_body_text(/#{proposal_path(proposal1, anchor: "social-share")}/)
|
|
|
|
expect(email).to have_body_text(proposal2.title)
|
|
expect(email).to have_body_text(notification2.notifiable.title)
|
|
expect(email).to have_body_text(notification2.notifiable.body)
|
|
expect(email).to have_body_text(/#{proposal_path(proposal2, anchor: "tab-notifications")}/)
|
|
expect(email).to have_body_text(/#{proposal_path(proposal2, anchor: "comments")}/)
|
|
expect(email).to have_body_text(/#{proposal_path(proposal2, anchor: "social-share")}/)
|
|
expect(email).to have_body_text(proposal2.author.name)
|
|
|
|
expect(email).not_to have_body_text(proposal3.title)
|
|
expect(email).to have_body_text(/#{account_path}/)
|
|
expect(email).to have_body_text("Visit this proposal and unfollow it to stop receiving notifications.")
|
|
|
|
notification1.reload
|
|
notification2.reload
|
|
expect(notification1.emailed_at).to be
|
|
expect(notification2.emailed_at).to be
|
|
end
|
|
|
|
scenario "notifications moderated are not sent" do
|
|
user = create(:user, email_digest: true)
|
|
notification = create(:notification, :for_proposal_notification)
|
|
|
|
reset_mailer
|
|
|
|
notification.notifiable.moderate_system_email(create(:administrator).user)
|
|
|
|
email_digest = EmailDigest.new(user)
|
|
email_digest.deliver(Time.current)
|
|
email_digest.mark_as_emailed
|
|
|
|
expect { open_last_email }.to raise_error "No email has been sent!"
|
|
end
|
|
|
|
xscenario "Delete all Notifications included in the digest after email sent" do
|
|
end
|
|
end
|
|
|
|
context "User invites" do
|
|
scenario "Send an invitation" do
|
|
Setting["org_name"] = "CONSUL"
|
|
login_as_manager
|
|
visit new_management_user_invite_path
|
|
|
|
fill_in "emails", with: " john@example.com, ana@example.com,isable@example.com "
|
|
click_button "Send invitations"
|
|
|
|
expect(page).to have_content "3 invitations have been sent."
|
|
|
|
expect(unread_emails_for("john@example.com").count).to eq 1
|
|
expect(unread_emails_for("ana@example.com").count).to eq 1
|
|
expect(unread_emails_for("isable@example.com").count).to eq 1
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Invitation to CONSUL")
|
|
expect(email).to have_body_text(/#{new_user_registration_path}/)
|
|
end
|
|
end
|
|
|
|
context "Budgets" do
|
|
let(:author) { create(:user, :level_two) }
|
|
let(:budget) { create(:budget) }
|
|
let!(:heading) { create(:budget_heading, name: "More hospitals", budget: budget) }
|
|
|
|
scenario "Investment created" do
|
|
login_as(author)
|
|
visit new_budget_investment_path(budget_id: budget.id)
|
|
|
|
select heading.name, from: "budget_investment_heading_id"
|
|
fill_in "Title", with: "Build a hospital"
|
|
fill_in "Description", with: "We have lots of people that require medical attention"
|
|
check "budget_investment_terms_of_service"
|
|
|
|
click_button "Create Investment"
|
|
expect(page).to have_content "Investment created successfully"
|
|
|
|
email = open_last_email
|
|
investment = Budget::Investment.last
|
|
|
|
expect(email).to have_subject("Thank you for creating an investment!")
|
|
expect(email).to deliver_to(investment.author.email)
|
|
expect(email).to have_body_text(author.name)
|
|
expect(email).to have_body_text(investment.title)
|
|
expect(email).to have_body_text(investment.budget.name)
|
|
expect(email).to have_body_text(budget_path(budget))
|
|
end
|
|
|
|
scenario "Unfeasible investment" do
|
|
budget.update!(phase: "valuating")
|
|
valuator = create(:valuator)
|
|
investment = create(:budget_investment, author: author, budget: budget, valuators: [valuator])
|
|
|
|
login_as(valuator.user)
|
|
visit edit_valuation_budget_budget_investment_path(budget, investment)
|
|
|
|
choose "budget_investment_feasibility_unfeasible"
|
|
fill_in "budget_investment_unfeasibility_explanation", with: "This is not legal as stated in Article 34.9"
|
|
find_field("budget_investment[valuation_finished]").click
|
|
click_button "Save changes"
|
|
|
|
expect(page).to have_content "Dossier updated"
|
|
investment.reload
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Your investment project '#{investment.code}' has been marked as unfeasible")
|
|
expect(email).to deliver_to(investment.author.email)
|
|
expect(email).to have_body_text(investment.unfeasibility_explanation)
|
|
end
|
|
|
|
scenario "Selected investment" do
|
|
author1 = create(:user)
|
|
author2 = create(:user)
|
|
author3 = create(:user)
|
|
|
|
investment1 = create(:budget_investment, :selected, author: author1, budget: budget)
|
|
investment2 = create(:budget_investment, :selected, author: author2, budget: budget)
|
|
investment3 = create(:budget_investment, :unselected, author: author3, budget: budget)
|
|
|
|
reset_mailer
|
|
budget.email_selected
|
|
|
|
expect(find_email(investment1.author.email)).to be
|
|
expect(find_email(investment2.author.email)).to be
|
|
expect(find_email(investment3.author.email)).not_to be
|
|
|
|
email = open_last_email
|
|
investment = investment2
|
|
expect(email).to have_subject("Your investment project '#{investment.code}' has been selected")
|
|
expect(email).to deliver_to(investment.author.email)
|
|
end
|
|
|
|
scenario "Unselected investment" do
|
|
author1 = create(:user)
|
|
author2 = create(:user)
|
|
author3 = create(:user)
|
|
|
|
investment1 = create(:budget_investment, :unselected, author: author1, budget: budget)
|
|
investment2 = create(:budget_investment, :unselected, author: author2, budget: budget)
|
|
investment3 = create(:budget_investment, :selected, author: author3, budget: budget)
|
|
|
|
reset_mailer
|
|
budget.email_unselected
|
|
|
|
expect(find_email(investment1.author.email)).to be
|
|
expect(find_email(investment2.author.email)).to be
|
|
expect(find_email(investment3.author.email)).not_to be
|
|
|
|
email = open_last_email
|
|
investment = investment2
|
|
expect(email).to have_subject("Your investment project '#{investment.code}' has not been selected")
|
|
expect(email).to deliver_to(investment.author.email)
|
|
end
|
|
end
|
|
|
|
context "Polls" do
|
|
scenario "Send email on poll comment reply", :js do
|
|
user1 = create(:user, email_on_comment_reply: true)
|
|
user2 = create(:user)
|
|
poll = create(:poll, author: create(:user))
|
|
comment = create(:comment, commentable: poll, author: user1)
|
|
|
|
login_as(user2)
|
|
visit poll_path(poll)
|
|
|
|
click_link "Reply"
|
|
|
|
within "#js-comment-form-comment_#{comment.id}" do
|
|
fill_in "Leave your comment", with: "It will be done next week."
|
|
click_button "Publish reply"
|
|
end
|
|
|
|
within "#comment_#{comment.id}" do
|
|
expect(page).to have_content "It will be done next week."
|
|
end
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("Someone has responded to your comment")
|
|
expect(email).to deliver_to(user1)
|
|
expect(email).not_to have_body_text(poll_path(poll))
|
|
expect(email).to have_body_text(comment_path(Comment.last))
|
|
expect(email).to have_body_text("To stop receiving these emails change your settings in")
|
|
expect(email).to have_body_text(account_path)
|
|
end
|
|
end
|
|
|
|
context "Newsletter", :admin do
|
|
scenario "Send newsletter email to selected users" do
|
|
user_with_newsletter_in_segment_1 = create(:user, :with_proposal, newsletter: true)
|
|
user_with_newsletter_in_segment_2 = create(:user, :with_proposal, newsletter: true)
|
|
user_with_newsletter_not_in_segment = create(:user, newsletter: true)
|
|
user_without_newsletter_in_segment = create(:user, :with_proposal, newsletter: false)
|
|
|
|
visit new_admin_newsletter_path
|
|
fill_in_newsletter_form(segment_recipient: "Proposal authors")
|
|
click_button "Create Newsletter"
|
|
|
|
expect(page).to have_content "Newsletter created successfully"
|
|
|
|
click_link "Send"
|
|
|
|
expect(unread_emails_for(user_with_newsletter_in_segment_1.email).count).to eq 1
|
|
expect(unread_emails_for(user_with_newsletter_in_segment_2.email).count).to eq 1
|
|
expect(unread_emails_for(user_with_newsletter_not_in_segment.email).count).to eq 0
|
|
expect(unread_emails_for(user_without_newsletter_in_segment.email).count).to eq 0
|
|
|
|
email = open_last_email
|
|
expect(email).to have_subject("This is a different subject")
|
|
expect(email).to deliver_from("no-reply@consul.dev")
|
|
expect(email.body.encoded).to include("This is a different body")
|
|
end
|
|
end
|
|
|
|
context "Users without email" do
|
|
scenario "should not receive emails" do
|
|
user = create(:user, :verified, email_on_comment: true)
|
|
proposal = create(:proposal, author: user)
|
|
|
|
user_commenting = create(:user)
|
|
comment = create(:comment, commentable: proposal, user: user_commenting)
|
|
user.update!(email: nil)
|
|
|
|
Mailer.comment(comment).deliver_now
|
|
|
|
expect { open_last_email }.to raise_error "No email has been sent!"
|
|
end
|
|
end
|
|
end
|