require "rails_helper" describe Dashboard::Mailer do let!(:action) do create(:dashboard_action, :proposed_action, :active, day_offset: 0, published_proposal: true) end let!(:resource) do create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: true) end before do Setting["feature.dashboard.notification_emails"] = true Setting["mailer_from_name"] = "CONSUL" Setting["mailer_from_address"] = "noreply@consul.dev" end describe "#forward" do let!(:proposal) { create(:proposal) } before do ActionMailer::Base.deliveries.clear end it "Disables notification emails delivery using setting, does not affect the forward email" do Setting["feature.dashboard.notification_emails"] = nil Dashboard::Mailer.forward(proposal).deliver_now expect(ActionMailer::Base.deliveries.count).to eq(1) end it "sends forward email" do Dashboard::Mailer.forward(proposal).deliver_now email = open_last_email expect(email).to deliver_from("CONSUL ") expect(email).to deliver_to(proposal.author) expect(email).to have_subject(proposal.title) expect(email).to have_body_text("Support this proposal") expect(email).to have_body_text("Share in") expect(email).to have_body_text(proposal_path(proposal)) end end describe "#new_actions_notification_on_create" do before do ActionMailer::Base.deliveries.clear end let!(:proposal) { build(:proposal, :draft) } it "Disables notification email delivery using setting" do Setting["feature.dashboard.notification_emails"] = nil action.update!(published_proposal: false) resource.update!(published_proposal: false) proposal.save! expect(ActionMailer::Base.deliveries.count).to eq(0) end it "sends emails if new actions detected when creating a proposal" do Setting["org_name"] = "CONSUL" action.update!(published_proposal: false) resource.update!(published_proposal: false) proposal.save! email = open_last_email expect(email).to deliver_from("CONSUL ") expect(email).to deliver_to(proposal.author) expect(email).to have_subject("Your draft citizen proposal is created") expect(email).to have_body_text("Hi #{proposal.author.name}!") expect(email).to have_body_text("Your #{proposal.title} proposal has been " \ "successfully created.") expect(email).to have_body_text("Take advantage that your proposal is not public yet and " \ "get ready to contact a lot of people.") expect(email).to have_body_text("When you are ready publish your citizen proposal from this") expect(email).to have_link "link", href: proposal_dashboard_url(proposal) expect(email).to have_body_text("We know that creating a proposal with a hook and getting " \ "the necessary support can seem complicated. But don't " \ "worry because we are going to help you!") expect(email).to have_body_text("You have a tool that will be your new best ally: " \ "The Citizen Proposals panel.") expect(email).to have_body_text("Enter every day in the panel of your proposal to use the " \ "tips and resources that we will share with you.") expect(email).to have_body_text("These tips, actions and resources will give you ideas and " \ "also practical solutions to get more support and a wider " \ "community. Dont forget them!") expect(email).to have_body_text("As you gain more support, you will unlock new and better " \ "resources. At the moment, you have an e-mail template to " \ "send massively to all your contacts, a poster to print, " \ "among other features and rewards that you will discover. " \ "Dont stop adding support and we will not stop rewarding " \ "and helping you!") expect(email).to have_body_text("You have #{Setting["months_to_archive_proposals"]} months " \ "since you publish the proposal to get " \ "#{Setting["votes_for_proposal_success"]} support and your " \ "proposal can become a reality. But the first days are the " \ "most important. It is a challenge. Get ready!") expect(email).to have_body_text("And for you to start with all the motivation,") expect(email).to have_body_text("here you have several resources and a whole list of " \ "tips that will come to you every day to prepare the " \ "broadcast!") expect(email).to have_body_text("Go ahead, discover them!") end end describe "#new_actions_notification_on_published" do before do ActionMailer::Base.deliveries.clear create(:dashboard_action, :resource, :active, day_offset: 0, published_proposal: true) create(:dashboard_action, :proposed_action, :active, day_offset: 0, published_proposal: true) end let!(:proposal) { build(:proposal, :draft) } it "Disables notification email delivery using setting" do Setting["feature.dashboard.notification_emails"] = nil proposal.save! proposal.publish expect(ActionMailer::Base.deliveries.count).to eq(0) end it "sends emails when detect new actions when publish a proposal" do proposal.save! proposal.publish email = open_last_email expect(email).to deliver_from("CONSUL ") expect(email).to deliver_to(proposal.author) expect(email).to have_subject("Your citizen proposal is already " \ "published. Don't stop spreading!") expect(email).to have_body_text("Congratulations #{proposal.author.name}! Your proposal " \ "#{proposal.title} has been created successfully.") expect(email).to have_body_text("And now, go for your first 100 supports!") expect(email).to have_body_text("Why 100?") expect(email).to have_body_text("Our experience tells us that the first day is fundamental. " \ "Because in addition to having the energy to launch " \ "something new, being a newly published proposal, you will " \ "have the important visibility of being among the new " \ "proposals highlighted.") expect(email).to have_body_text("Get 100 supports on the first day, and you will have " \ "a first community to back you up.") expect(email).to have_body_text("That is why we challenge you to get it, but not without " \ "a lot of help!") expect(email).to have_body_text("Remember that in your Proposal Panel you have new " \ "resources available and recommendations for " \ "dissemination actions.") expect(email).to have_body_text("Come in every day to see your progress and use the tips " \ "and resources we will share with you. They are ideas and " \ "also practical solutions to get the support you need.") expect(email).to have_body_text("As you get more support, you will unlock new and better " \ "resources. Do not stop adding support and we will not stop " \ "rewarding and helping you!") expect(email).to have_body_text("And for you to start at full speed...") expect(email).to have_body_text("Here is a great resource at your disposal!") expect(email).to have_body_text("You will also find this new recommended dissemination " \ "action...") expect(email).to have_body_text("You sure have more resources to use!") expect(email).to have_body_text("Go ahead, discover them!") end end end