The `type: :feature` is automatically detected by RSpec because these tests are inside the `spec/features` folder. Using `feature` re-adds a `type: :feature` to these files, which will result in a conflict when we upgrade to Rails 5.1's system tests. Because of this change, we also need to change `background` to `before` or else these tests will fail.
242 lines
8.0 KiB
Ruby
242 lines
8.0 KiB
Ruby
require "rails_helper"
|
|
|
|
describe "Admin Notifications" do
|
|
|
|
before do
|
|
admin = create(:administrator)
|
|
login_as(admin.user)
|
|
create(:budget)
|
|
end
|
|
|
|
it_behaves_like "translatable",
|
|
"admin_notification",
|
|
"edit_admin_admin_notification_path",
|
|
%w[title body]
|
|
|
|
context "Show" do
|
|
scenario "Valid Admin Notification" do
|
|
notification = create(:admin_notification, title: "Notification title",
|
|
body: "Notification body",
|
|
link: "https://www.decide.madrid.es/vota",
|
|
segment_recipient: :all_users)
|
|
|
|
visit admin_admin_notification_path(notification)
|
|
|
|
expect(page).to have_content("Notification title")
|
|
expect(page).to have_content("Notification body")
|
|
expect(page).to have_content("https://www.decide.madrid.es/vota")
|
|
expect(page).to have_content("All users")
|
|
end
|
|
|
|
scenario "Notification with invalid segment recipient" do
|
|
invalid_notification = create(:admin_notification)
|
|
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
|
|
|
|
visit admin_admin_notification_path(invalid_notification)
|
|
|
|
expect(page).to have_content("Recipients user segment is invalid")
|
|
end
|
|
end
|
|
|
|
context "Index" do
|
|
scenario "Valid Admin Notifications", :with_frozen_time do
|
|
draft = create(:admin_notification, segment_recipient: :all_users, title: "Not yet sent")
|
|
sent = create(:admin_notification, :sent, segment_recipient: :administrators,
|
|
title: "Sent one")
|
|
|
|
visit admin_admin_notifications_path
|
|
|
|
expect(page).to have_css(".admin_notification", count: 2)
|
|
|
|
within("#admin_notification_#{draft.id}") do
|
|
expect(page).to have_content("Not yet sent")
|
|
expect(page).to have_content("All users")
|
|
expect(page).to have_content("Draft")
|
|
end
|
|
|
|
within("#admin_notification_#{sent.id}") do
|
|
expect(page).to have_content("Sent one")
|
|
expect(page).to have_content("Administrators")
|
|
expect(page).to have_content(I18n.l(Date.current))
|
|
end
|
|
end
|
|
|
|
scenario "Notifications with invalid segment recipient" do
|
|
invalid_notification = create(:admin_notification)
|
|
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
|
|
|
|
visit admin_admin_notifications_path
|
|
|
|
expect(page).to have_content("Recipients user segment is invalid")
|
|
end
|
|
end
|
|
|
|
scenario "Create" do
|
|
visit admin_admin_notifications_path
|
|
click_link "New notification"
|
|
|
|
fill_in_admin_notification_form(segment_recipient: "Proposal authors",
|
|
title: "This is a title",
|
|
body: "This is a body",
|
|
link: "http://www.dummylink.dev")
|
|
|
|
click_button "Create notification"
|
|
|
|
expect(page).to have_content "Notification created successfully"
|
|
expect(page).to have_content "Proposal authors"
|
|
expect(page).to have_content "This is a title"
|
|
expect(page).to have_content "This is a body"
|
|
expect(page).to have_content "http://www.dummylink.dev"
|
|
end
|
|
|
|
context "Update" do
|
|
scenario "A draft notification can be updated" do
|
|
notification = create(:admin_notification)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
click_link "Edit"
|
|
end
|
|
|
|
|
|
fill_in_admin_notification_form(segment_recipient: "All users",
|
|
title: "Other title",
|
|
body: "Other body",
|
|
link: "")
|
|
|
|
click_button "Update notification"
|
|
|
|
expect(page).to have_content "Notification updated successfully"
|
|
expect(page).to have_content "All users"
|
|
expect(page).to have_content "Other title"
|
|
expect(page).to have_content "Other body"
|
|
expect(page).not_to have_content "http://www.dummylink.dev"
|
|
end
|
|
|
|
scenario "Sent notification can not be updated" do
|
|
notification = create(:admin_notification, :sent)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
expect(page).not_to have_link("Edit")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Destroy" do
|
|
scenario "A draft notification can be destroyed" do
|
|
notification = create(:admin_notification)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
click_link "Delete"
|
|
end
|
|
|
|
expect(page).to have_content "Notification deleted successfully"
|
|
expect(page).to have_css(".notification", count: 0)
|
|
end
|
|
|
|
scenario "Sent notification can not be destroyed" do
|
|
notification = create(:admin_notification, :sent)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
expect(page).not_to have_link("Delete")
|
|
end
|
|
end
|
|
end
|
|
|
|
context "Visualize" do
|
|
scenario "A draft notification can be previewed" do
|
|
notification = create(:admin_notification, segment_recipient: :administrators)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
click_link "Preview"
|
|
end
|
|
|
|
expect(page).to have_content "This is how the users will see the notification:"
|
|
expect(page).to have_content "Administrators (1 users will be notified)"
|
|
end
|
|
|
|
scenario "A sent notification can be viewed" do
|
|
notification = create(:admin_notification, :sent, recipients_count: 7,
|
|
segment_recipient: :administrators)
|
|
|
|
visit admin_admin_notifications_path
|
|
within("#admin_notification_#{notification.id}") do
|
|
click_link "View"
|
|
end
|
|
|
|
expect(page).to have_content "This is how the users see the notification:"
|
|
expect(page).to have_content "Administrators (7 users got notified)"
|
|
end
|
|
end
|
|
|
|
scenario "Errors on create" do
|
|
visit new_admin_admin_notification_path
|
|
|
|
click_button "Create notification"
|
|
|
|
expect(page).to have_content error_message
|
|
end
|
|
|
|
scenario "Errors on update" do
|
|
notification = create(:admin_notification)
|
|
visit edit_admin_admin_notification_path(notification)
|
|
|
|
fill_in "Title", with: ""
|
|
click_button "Update notification"
|
|
|
|
expect(page).to have_content error_message
|
|
end
|
|
|
|
context "Send notification", :js do
|
|
scenario "A draft Admin notification can be sent", :js do
|
|
2.times { create(:user) }
|
|
notification = create(:admin_notification, segment_recipient: :all_users)
|
|
total_users = notification.list_of_recipients.count
|
|
confirm_message = "Are you sure you want to send this notification to #{total_users} users?"
|
|
|
|
visit admin_admin_notification_path(notification)
|
|
|
|
accept_confirm { click_link "Send notification" }
|
|
|
|
expect(page).to have_content "Notification sent successfully"
|
|
|
|
User.find_each do |user|
|
|
expect(user.notifications.count).to eq(1)
|
|
end
|
|
end
|
|
|
|
scenario "A sent Admin notification can not be sent", :js do
|
|
notification = create(:admin_notification, :sent)
|
|
|
|
visit admin_admin_notification_path(notification)
|
|
|
|
expect(page).not_to have_link("Send")
|
|
end
|
|
|
|
scenario "Admin notification with invalid segment recipient cannot be sent", :js do
|
|
invalid_notification = create(:admin_notification)
|
|
invalid_notification.update_attribute(:segment_recipient, "invalid_segment")
|
|
visit admin_admin_notification_path(invalid_notification)
|
|
|
|
expect(page).not_to have_link("Send")
|
|
end
|
|
end
|
|
|
|
scenario "Select list of users to send notification" do
|
|
UserSegments::SEGMENTS.each do |user_segment|
|
|
segment_recipient = I18n.t("admin.segment_recipient.#{user_segment}")
|
|
|
|
visit new_admin_admin_notification_path
|
|
|
|
fill_in_admin_notification_form(segment_recipient: segment_recipient)
|
|
click_button "Create notification"
|
|
|
|
expect(page).to have_content(I18n.t("admin.segment_recipient.#{user_segment}"))
|
|
end
|
|
end
|
|
end
|