From c09e6f95d72b9341435bfc6f3bff6b83390fdc45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juanjo=20Baz=C3=A1n?= Date: Mon, 14 Mar 2016 12:53:00 +0100 Subject: [PATCH] users can now delete their own spending proposals via the 'my activity' page --- .../spending_proposals_controller.rb | 6 ++++++ app/models/user.rb | 1 + app/views/users/_spending_proposals.html.erb | 12 ++++++++--- config/locales/en.yml | 2 ++ config/locales/es.yml | 2 ++ config/locales/responders.en.yml | 4 +++- config/locales/responders.es.yml | 4 +++- config/routes.rb | 2 +- spec/features/spending_proposals_spec.rb | 20 +++++++++++++++++++ spec/features/users_spec.rb | 18 ++++++++++++++++- 10 files changed, 64 insertions(+), 7 deletions(-) diff --git a/app/controllers/spending_proposals_controller.rb b/app/controllers/spending_proposals_controller.rb index 7e32b0a93..9b64c462d 100644 --- a/app/controllers/spending_proposals_controller.rb +++ b/app/controllers/spending_proposals_controller.rb @@ -28,6 +28,12 @@ class SpendingProposalsController < ApplicationController end end + def destroy + spending_proposal = current_user.spending_proposals.find(params[:id]) + spending_proposal.destroy + redirect_to user_path(current_user, filter: 'spending_proposals'), notice: t('flash.actions.destroy.spending_proposal') + end + private def spending_proposal_params diff --git a/app/models/user.rb b/app/models/user.rb index 3bf54b3ca..3b58fb607 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -20,6 +20,7 @@ class User < ActiveRecord::Base has_many :debates, -> { with_hidden }, foreign_key: :author_id has_many :proposals, -> { with_hidden }, foreign_key: :author_id has_many :comments, -> { with_hidden } + has_many :spending_proposals, foreign_key: :author_id has_many :failed_census_calls has_many :notifications belongs_to :geozone diff --git a/app/views/users/_spending_proposals.html.erb b/app/views/users/_spending_proposals.html.erb index 479688f86..491f5c831 100644 --- a/app/views/users/_spending_proposals.html.erb +++ b/app/views/users/_spending_proposals.html.erb @@ -1,10 +1,16 @@ - +
<% @spending_proposals.each do |spending_proposal| %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 468889c28..550225fa8 100755 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -445,6 +445,8 @@ en: deleted: Deleted deleted_debate: This debate has been deleted deleted_proposal: This proposal has been deleted + delete_spending_proposal: Delete + confirm_deletion_spending_proposal: Are you sure? This action can not be undone filters: comments: one: 1 Comment diff --git a/config/locales/es.yml b/config/locales/es.yml index b9701cbf5..7e66e1c14 100755 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -445,6 +445,8 @@ es: deleted: Eliminado deleted_debate: Este debate ha sido eliminado deleted_proposal: Este propuesta ha sido eliminada + delete_spending_proposal: Eliminar + confirm_deletion_spending_proposal: "¿Seguro que desea eliminar esta propuesta?" filters: comments: one: 1 Comentario diff --git a/config/locales/responders.en.yml b/config/locales/responders.en.yml index 03a8f0ec8..3f83f746a 100755 --- a/config/locales/responders.en.yml +++ b/config/locales/responders.en.yml @@ -13,4 +13,6 @@ en: notice: "%{resource_name} updated successfully." debate: "Debate updated successfully." proposal: "Proposal updated successfully." - spending_proposal: "Investment project updated succesfully." \ No newline at end of file + spending_proposal: "Investment project updated succesfully." + destroy: + spending_proposal: "Spending proposal deleted succesfully." \ No newline at end of file diff --git a/config/locales/responders.es.yml b/config/locales/responders.es.yml index ee6e011f8..e57dacd31 100644 --- a/config/locales/responders.es.yml +++ b/config/locales/responders.es.yml @@ -13,4 +13,6 @@ es: notice: "%{resource_name} actualizado correctamente." debate: "Debate actualizado correctamente." proposal: "Propuesta actualizada correctamente." - spending_proposal: "Propuesta de inversión actualizada correctamente." \ No newline at end of file + spending_proposal: "Propuesta de inversión actualizada correctamente." + destroy: + spending_proposal: "Propuesta de inversión eliminada." \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index f150db339..680f657ab 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -66,7 +66,7 @@ Rails.application.routes.draw do end scope '/participatory_budget' do - resources :spending_proposals, only: [:index, :new, :create, :show], path: 'investment_projects' + resources :spending_proposals, only: [:index, :new, :create, :show, :destroy], path: 'investment_projects' end resources :stats, only: [:index] diff --git a/spec/features/spending_proposals_spec.rb b/spec/features/spending_proposals_spec.rb index 12d692fcf..0fd31f5f7 100644 --- a/spec/features/spending_proposals_spec.rb +++ b/spec/features/spending_proposals_spec.rb @@ -163,4 +163,24 @@ feature 'Spending proposals' do expect(page).to have_content("You do not have permission to access this page") end + context "Destroy" do + + scenario "User can destroy owned spending proposals" do + user = create(:user, :level_two) + spending_proposal = create(:spending_proposal, author: user) + login_as(user) + + visit user_path(user) + within("#spending_proposal_#{spending_proposal.id}") do + click_link "Delete" + end + + expect(page).to have_content("Spending proposal deleted succesfully.") + + visit user_path(user) + expect(page).not_to have_css("spending_proposal_list") + end + + end + end diff --git a/spec/features/users_spec.rb b/spec/features/users_spec.rb index 4fbaf1937..fdb092856 100644 --- a/spec/features/users_spec.rb +++ b/spec/features/users_spec.rb @@ -203,7 +203,7 @@ feature 'Users' do background do @author = create(:user) - create(:spending_proposal, author: @author, title: 'Build a school') + @spending_proposal = create(:spending_proposal, author: @author, title: 'Build a school') end scenario 'is not shown if no user logged in' do @@ -240,6 +240,22 @@ feature 'Users' do expect(page).to have_content('Build a school') end + scenario 'delete button is shown if logged in user is author' do + login_as(@author) + visit user_path(@author) + within("#spending_proposal_#{@spending_proposal.id}") do + expect(page).to have_content('Delete') + end + end + + scenario 'delete button is not shown if logged in user is admin' do + login_as(create(:administrator).user) + visit user_path(@author) + within("#spending_proposal_#{@spending_proposal.id}") do + expect(page).to_not have_content('Delete') + end + end + end end
<%= link_to spending_proposal.title, spending_proposal %> -
- <%= spending_proposal.description %> + + <% if current_user && current_user.id == spending_proposal.author_id %> + <%= link_to t("users.show.delete_spending_proposal"), + spending_proposal, + method: :delete, + data: { confirm: t("users.show.confirm_deletion_spending_proposal") }, + class: 'button small warning' %> + <% end %>