The same way we did for banners. We needed to add new translation keys so the labels are displayed in the correct language. I've kept the original `title` and `body` attributes so they can be used in other places. While backporting, we also added the original translations because they hadn't been backported yet.
242 lines
8.0 KiB
Ruby
242 lines
8.0 KiB
Ruby
require 'rails_helper'
|
|
|
|
feature "Admin Notifications" do
|
|
|
|
background 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
|