diff --git a/app/controllers/dashboard/actions_controller.rb b/app/controllers/dashboard/actions_controller.rb
index 3f22889c3..32495f0fa 100644
--- a/app/controllers/dashboard/actions_controller.rb
+++ b/app/controllers/dashboard/actions_controller.rb
@@ -35,6 +35,14 @@ class Dashboard::ActionsController < Dashboard::BaseController
redirect_to request.referer
end
+ def unexecute
+ authorize! :dashboard, proposal
+
+ Dashboard::ExecutedAction.where(proposal: proposal, action: dashboard_action).first.destroy
+
+ redirect_to request.referer
+ end
+
private
def dashboard_action
diff --git a/app/views/dashboard/_proposed_action.html.erb b/app/views/dashboard/_proposed_action.html.erb
index e055e5a98..8064def1b 100644
--- a/app/views/dashboard/_proposed_action.html.erb
+++ b/app/views/dashboard/_proposed_action.html.erb
@@ -1,7 +1,12 @@
<% if proposed_action.proposals.where(id: proposal.id).any? %>
-
+ <%= link_to unexecute_proposal_dashboard_action_path(proposal, proposed_action),
+ id: "#{dom_id(proposed_action)}_unexecute",
+ method: :post,
+ class: "checked-link" do %>
+
+ <% end %>
<% else %>
<%= link_to execute_proposal_dashboard_action_path(proposal, proposed_action),
id: "#{dom_id(proposed_action)}_execute",
diff --git a/config/routes/proposal.rb b/config/routes/proposal.rb
index 55013e868..6ead4dff3 100644
--- a/config/routes/proposal.rb
+++ b/config/routes/proposal.rb
@@ -17,6 +17,7 @@ resources :proposals do
resources :actions, only: [], controller: "dashboard/actions" do
member do
post :execute
+ post :unexecute
get :new_request
post :create_request
end
diff --git a/spec/features/dashboard/dashboard_spec.rb b/spec/features/dashboard/dashboard_spec.rb
index 4e200f39f..25ac6922f 100644
--- a/spec/features/dashboard/dashboard_spec.rb
+++ b/spec/features/dashboard/dashboard_spec.rb
@@ -131,6 +131,17 @@ feature "Proposal's dashboard" do
expect(page).not_to have_selector(:css, "#dashboard_action_#{action.id}_execute")
end
+ scenario "Dashboard progress can unexecute proposed action" do
+ action = create(:dashboard_action, :proposed_action, :active)
+ executed_action = create(:dashboard_executed_action, proposal: proposal, action: action)
+
+ visit progress_proposal_dashboard_path(proposal)
+ expect(page).to have_content(action.title)
+
+ find(:css, "#dashboard_action_#{action.id}_unexecute").click
+ expect(page).to have_selector(:css, "#dashboard_action_#{action.id}_execute")
+ end
+
scenario "Dashboard progress dont show proposed actions with published_proposal: true" do
action = create(:dashboard_action, :proposed_action, :active, published_proposal: true)