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| %>
<%= 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 %>
|
<% 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