diff --git a/spec/features/admin/emails/newsletters_spec.rb b/spec/features/admin/emails/newsletters_spec.rb index 94f93556e..b953c140a 100644 --- a/spec/features/admin/emails/newsletters_spec.rb +++ b/spec/features/admin/emails/newsletters_spec.rb @@ -8,33 +8,56 @@ feature "Admin newsletter emails" do create(:budget) end - scenario "Show" do - newsletter = create(:newsletter, subject: "This is a subject", - segment_recipient: 'all_users', - from: "no-reply@consul.dev", - body: "This is a body") + context "Show" do + scenario "Valid newsletter" do + newsletter = create(:newsletter, subject: "This is a subject", + segment_recipient: 'all_users', + from: "no-reply@consul.dev", + body: "This is a body") - visit admin_newsletter_path(newsletter) + visit admin_newsletter_path(newsletter) - expect(page).to have_content "This is a subject" - expect(page).to have_content I18n.t("admin.segment_recipient.#{newsletter.segment_recipient}") - expect(page).to have_content "no-reply@consul.dev" - expect(page).to have_content "This is a body" + expect(page).to have_content "This is a subject" + expect(page).to have_content I18n.t("admin.segment_recipient.#{newsletter.segment_recipient}") + expect(page).to have_content "no-reply@consul.dev" + expect(page).to have_content "This is a body" + end + + scenario "Invalid newsletter" do + invalid_newsletter = create(:newsletter) + invalid_newsletter.update_attribute(:segment_recipient, 'invalid_segment') + + visit admin_newsletter_path(invalid_newsletter) + + expect(page).to have_content("Recipients user segment is invalid") + end end - scenario "Index" do - 3.times { create(:newsletter) } + context "Index" do + scenario "Valid newsletters" do + 3.times { create(:newsletter) } - visit admin_newsletters_path + visit admin_newsletters_path - expect(page).to have_css(".newsletter", count: 3) + expect(page).to have_css(".newsletter", count: 3) - Newsletter.all.each do |newsletter| - within("#newsletter_#{newsletter.id}") do - expect(page).to have_content newsletter.subject - expect(page).to have_content I18n.t("admin.segment_recipient.#{newsletter.segment_recipient}") + Newsletter.all.each do |newsletter| + segment_recipient = I18n.t("admin.segment_recipient.#{newsletter.segment_recipient}") + within("#newsletter_#{newsletter.id}") do + expect(page).to have_content newsletter.subject + expect(page).to have_content segment_recipient + end end end + + scenario "Invalid newsletter" do + invalid_newsletter = create(:newsletter) + invalid_newsletter.update_attribute(:segment_recipient, 'invalid_segment') + + visit admin_newsletters_path + + expect(page).to have_content("Recipients user segment is invalid") + end end scenario "Create" do @@ -103,24 +126,33 @@ feature "Admin newsletter emails" do expect(page).to have_content error_message end - scenario "Send newsletter email", :js do - newsletter = create(:newsletter) - visit admin_newsletter_path(newsletter) + context "Send newsletter", :js do + scenario "Sends newsletter emails", :js do + newsletter = create(:newsletter) + visit admin_newsletter_path(newsletter) - click_link "Send" + click_link "Send" - total_users = newsletter.list_of_recipients.count - page.accept_confirm("Are you sure you want to send this newsletter to #{total_users} users?") + total_users = newsletter.list_of_recipients.count + page.accept_confirm("Are you sure you want to send this newsletter to #{total_users} users?") - expect(page).to have_content "Newsletter sent successfully" + expect(page).to have_content "Newsletter sent successfully" + end + + scenario "Invalid newsletter cannot be sent", :js do + invalid_newsletter = create(:newsletter) + invalid_newsletter.update_attribute(:segment_recipient, 'invalid_segment') + visit admin_newsletter_path(invalid_newsletter) + + expect(page).not_to have_link("Send") + end end scenario "Select list of users to send newsletter" do UserSegments::SEGMENTS.each do |user_segment| visit new_admin_newsletter_path - fill_in_newsletter_form - select I18n.t("admin.segment_recipient.#{user_segment}"), from: 'newsletter_segment_recipient' + fill_in_newsletter_form(segment_recipient: I18n.t("admin.segment_recipient.#{user_segment}")) click_button "Create Newsletter" expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_segment}"))