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