diff --git a/app/controllers/admin/system_emails_controller.rb b/app/controllers/admin/system_emails_controller.rb
index 7a20877d5..c7d1c8dd0 100644
--- a/app/controllers/admin/system_emails_controller.rb
+++ b/app/controllers/admin/system_emails_controller.rb
@@ -31,7 +31,7 @@ class Admin::SystemEmailsController < Admin::BaseController
end
def send_pending
- Notification.send_pending
+ Notification.delay.send_pending
flash[:notice] = t("admin.system_emails.preview_pending.send_pending_notification")
redirect_to admin_system_emails_path
diff --git a/app/views/admin/system_emails/index.html.erb b/app/views/admin/system_emails/index.html.erb
index 4d135d615..573e8a848 100644
--- a/app/views/admin/system_emails/index.html.erb
+++ b/app/views/admin/system_emails/index.html.erb
@@ -5,7 +5,7 @@
| <%= t("admin.shared.title") %> |
<%= t("admin.shared.description") %> |
- <%= t("admin.shared.actions") %> |
+ <%= t("admin.shared.actions") %> |
@@ -27,6 +27,10 @@
admin_system_email_preview_pending_path(system_email_title),
class: "button" %>
<% end %>
+ <%= link_to t("admin.system_emails.preview_pending.send_pending"),
+ admin_system_email_send_pending_path(system_email_title),
+ class: "button",
+ method: :put %>
<% end %>
diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml
index 7871b377b..52dafc762 100644
--- a/config/locales/en/admin.yml
+++ b/config/locales/en/admin.yml
@@ -655,6 +655,9 @@ en:
action: Preview Pending
preview_of: Preview of %{name}
pending_to_be_sent: This is the content pending to be sent
+ moderate_pending: Moderate notification send
+ send_pending: Send pending
+ send_pending_notification: Pending notifications sent succesfully
proposal_notification_digest:
title: Proposal Notification Digest
description: Gathers all proposal notifications for an user in a single message, to avoid too much emails.
diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml
index c6761b568..bae2c43c1 100644
--- a/config/locales/es/admin.yml
+++ b/config/locales/es/admin.yml
@@ -656,6 +656,9 @@ es:
action: Previsualizar Pendientes
preview_of: Vista previa de %{name}
pending_to_be_sent: Este es todo el contenido pendiente de enviar
+ moderate_pending: Moderar envío de notificación
+ send_pending : Enviar pendientes
+ send_pending_notification: Notificaciones pendientes enviadas correctamente
proposal_notification_digest:
title: Resumen de Notificationes de Propuestas
description: Reune todas las notificaciones de propuestas en un único mensaje, para evitar demasiados emails.
diff --git a/config/routes/admin.rb b/config/routes/admin.rb
index 150d1b28a..31138e48c 100644
--- a/config/routes/admin.rb
+++ b/config/routes/admin.rb
@@ -168,6 +168,8 @@ namespace :admin do
resources :system_emails, only: [:index] do
get :view
get :preview_pending
+ put :moderate_pending
+ put :send_pending
end
resources :emails_download, only: :index do
diff --git a/spec/features/admin/system_emails_spec.rb b/spec/features/admin/system_emails_spec.rb
index dd14e87bc..239e6183a 100644
--- a/spec/features/admin/system_emails_spec.rb
+++ b/spec/features/admin/system_emails_spec.rb
@@ -65,6 +65,49 @@ feature "System Emails" do
expect(page).to have_link('Proposal B Title', href: proposal_url(proposal_b,
anchor: 'tab-notifications'))
end
+
+ scenario "#moderate_pending" do
+ proposal1 = create(:proposal, title: 'Proposal A')
+ proposal2 = create(:proposal, title: 'Proposal B')
+ proposal_notification1 = create(:proposal_notification, proposal: proposal1,
+ title: 'Proposal A Title',
+ body: 'Proposal A Notification Body')
+ proposal_notification2 = create(:proposal_notification, proposal: proposal2)
+ create(:notification, notifiable: proposal_notification1, emailed_at: nil)
+ create(:notification, notifiable: proposal_notification2, emailed_at: nil)
+
+ visit admin_system_email_preview_pending_path('proposal_notification_digest')
+
+ within("#proposal_notification_#{proposal_notification1.id}") do
+ click_on "Moderate notification send"
+ end
+
+ visit admin_system_email_preview_pending_path('proposal_notification_digest')
+
+ expect(Notification.count).to equal(1)
+ expect(Activity.last.actionable_type).to eq('ProposalNotification')
+ expect(page).not_to have_content("Proposal A Title")
+ end
+
+ scenario "#send_pending" do
+ proposal = create(:proposal)
+ proposal_notification = create(:proposal_notification, proposal: proposal,
+ title: 'Proposal A Title',
+ body: 'Proposal A Notification Body')
+ voter = create(:user, :level_two)
+ create(:notification, notifiable: proposal_notification, user: voter, emailed_at: nil)
+ create(:follow, user: voter, followable: proposal)
+
+ visit admin_system_emails_path
+
+ click_on "Send pending"
+
+ email = open_last_email
+ expect(email).to deliver_to(voter)
+ expect(email).to have_body_text(proposal_notification.body)
+
+ expect(page).to have_content("Pending notifications sent succesfully")
+ end
end
end