diff --git a/app/controllers/dashboard/polls_controller.rb b/app/controllers/dashboard/polls_controller.rb index 2f735146e..89dff143b 100644 --- a/app/controllers/dashboard/polls_controller.rb +++ b/app/controllers/dashboard/polls_controller.rb @@ -35,6 +35,16 @@ class Dashboard::PollsController < Dashboard::BaseController end end + def destroy + if ::Poll::Voter.where(poll: poll).any? + redirect_to proposal_dashboard_polls_path(proposal), alert: t("dashboard.polls.poll.unable_notice") + else + poll.destroy + + redirect_to proposal_dashboard_polls_path(proposal), notice: t("dashboard.polls.poll.success_notice") + end + end + private def poll diff --git a/app/views/dashboard/polls/_poll.html.erb b/app/views/dashboard/polls/_poll.html.erb index d41fa54e1..8396c0ad7 100644 --- a/app/views/dashboard/polls/_poll.html.erb +++ b/app/views/dashboard/polls/_poll.html.erb @@ -1,8 +1,8 @@

- <%= link_to poll.title, - proposal_poll_path(proposal, poll), + <%= link_to poll.title, + proposal_poll_path(proposal, poll), target: "_blank" %>

@@ -19,7 +19,7 @@ edit_proposal_dashboard_poll_path(proposal, poll), class: "button hollow" %> <% else %> <%= link_to t("dashboard.polls.poll.view_results"), - results_proposal_poll_path(proposal, poll), + results_proposal_poll_path(proposal, poll), class: "button", target: "_blank" %> <% end %>
@@ -31,5 +31,11 @@ class: "js-submit-on-change" %> <% end %>

<%= t("dashboard.polls.poll.show_results_help") %>

+ + <%= link_to t("dashboard.polls.poll.delete"), + proposal_dashboard_poll_path(proposal, poll), + method: :delete, + "data-confirm": t("dashboard.polls.poll.alert_notice"), + class: "delete" %>
diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index 28a4beecc..fd4539e94 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -558,6 +558,10 @@ en: edit_poll: Edit survey show_results: Show results show_results_help: If you check this box the results will be public and all users will be able to see them + delete: Delete survey + alert_notice: This action will remove the survey and all its associated questions. + success_notice: Survey deleted successfully + unable_notice: You cannot destroy a survey that has responses form: name: Survey title add_question: Add question diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index 3c2d1985b..3cc269cfe 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -558,6 +558,10 @@ es: edit_poll: Editar encuesta show_results: Mostrar resultados show_results_help: Si marcas esta casilla los resultados serán públicos y todos los usuarios podrán verlos + delete: Eliminar encuesta + alert_notice: Esta acción eliminará la encuesta y todas sus preguntas asociadas. + success_notice: Encuesta eliminada correctamente + unable_notice: No se pueden eliminar encuestas con respuestas form: name: Título de la encuesta add_question: Añadir pregunta diff --git a/config/routes/proposal.rb b/config/routes/proposal.rb index 6ead4dff3..f9f8d0aa6 100644 --- a/config/routes/proposal.rb +++ b/config/routes/proposal.rb @@ -11,7 +11,7 @@ resources :proposals do resources :achievements, only: [:index], controller: "dashboard/achievements" resources :successful_supports, only: [:index], controller: "dashboard/successful_supports" resources :supports, only: [:index], controller: "dashboard/supports" - resources :polls, except: [:show, :destroy], controller: "dashboard/polls" + resources :polls, except: [:show], controller: "dashboard/polls" resources :mailing, only: [:index, :new, :create], controller: "dashboard/mailing" resources :poster, only: [:index, :new], controller: "dashboard/poster" resources :actions, only: [], controller: "dashboard/actions" do diff --git a/spec/features/dashboard/polls_spec.rb b/spec/features/dashboard/polls_spec.rb index d9e57a589..5b5c6c3a3 100644 --- a/spec/features/dashboard/polls_spec.rb +++ b/spec/features/dashboard/polls_spec.rb @@ -153,6 +153,34 @@ describe "Polls" do end end + scenario "Can destroy poll without responses", :js do + poll = create(:poll, related: proposal) + + visit proposal_dashboard_polls_path(proposal) + + within("#poll_#{poll.id}") do + accept_confirm { click_link "Delete survey" } + end + + expect(page).to have_content("Survey deleted successfully") + expect(page).not_to have_content(poll.name) + end + + scenario "Can't destroy poll with responses", :js do + poll = create(:poll, related: proposal) + create(:poll_question, poll: poll) + create(:poll_voter, poll: poll) + + visit proposal_dashboard_polls_path(proposal) + + within("#poll_#{poll.id}") do + accept_confirm { click_link "Delete survey" } + end + + expect(page).to have_content("You cannot destroy a survey that has responses") + expect(page).to have_content(poll.name) + end + scenario "View results not available for upcoming polls" do poll = create(:poll, related: proposal, starts_at: 1.week.from_now)