Commit 32803349237935f84c821addb58a0995bda34097
1 parent
9a4dd080
Exists in
master
and in
1 other branch
Give admins the ability to destroy all problems associated with an app
Showing
6 changed files
with
48 additions
and
0 deletions
Show diff stats
app/controllers/problems_controller.rb
| ... | ... | @@ -124,6 +124,14 @@ class ProblemsController < ApplicationController |
| 124 | 124 | redirect_to :back |
| 125 | 125 | end |
| 126 | 126 | |
| 127 | + def destroy_all | |
| 128 | + nb_problem_destroy = ProblemDestroy.execute(app.problems) | |
| 129 | + flash[:success] = "#{I18n.t(:n_errs_have, :count => nb_problem_destroy)} been deleted." | |
| 130 | + redirect_to :back | |
| 131 | + rescue ActionController::RedirectBackError | |
| 132 | + redirect_to app_path(app) | |
| 133 | + end | |
| 134 | + | |
| 127 | 135 | def search |
| 128 | 136 | ps = Problem.search(params[:search]).for_apps(app_scope).in_env(params[:environment]).all_else_unresolved(params[:all_errs]).ordered_by(params_sort, params_order) |
| 129 | 137 | selected_problems = params[:problems] || [] | ... | ... |
app/views/apps/edit.html.haml
| 1 | 1 | - content_for :title, 'Edit App' |
| 2 | 2 | - content_for :action_bar do |
| 3 | 3 | = link_to_copy_attributes_from_other_app |
| 4 | + = link_to 'delete all errs', destroy_all_app_problems_path(app), :method => :post, | |
| 5 | + :data => { :confirm => t('apps.confirm_destroy_all_problems') }, :class => 'button' | |
| 4 | 6 | = link_to 'delete application', app_path(app), :method => :delete, |
| 5 | 7 | :data => { :confirm => t('apps.confirm_delete') }, :class => 'button' |
| 6 | 8 | = link_to('cancel', app_path(app), :class => 'button') | ... | ... |
config/locales/en.yml
| ... | ... | @@ -84,6 +84,7 @@ en: |
| 84 | 84 | confirm_delete: "Permanently delete this user?" |
| 85 | 85 | apps: |
| 86 | 86 | confirm_delete: "Permanently delete this app?" |
| 87 | + confirm_destroy_all_problems: "Permanently delete all of this app's errors?" | |
| 87 | 88 | index: |
| 88 | 89 | notify: Notification Service |
| 89 | 90 | tracker: Tracker | ... | ... |
config/routes.rb
spec/controllers/problems_controller_spec.rb
| ... | ... | @@ -415,6 +415,34 @@ describe ProblemsController do |
| 415 | 415 | }.to change(Problem, :count).by(-1) |
| 416 | 416 | end |
| 417 | 417 | end |
| 418 | + | |
| 419 | + describe "POST /apps/:app_id/problems/destroy_all" do | |
| 420 | + before do | |
| 421 | + sign_in Fabricate(:admin) | |
| 422 | + @app = Fabricate(:app) | |
| 423 | + @problem1 = Fabricate(:problem, :app=>@app) | |
| 424 | + @problem2 = Fabricate(:problem, :app=>@app) | |
| 425 | + end | |
| 426 | + | |
| 427 | + it "destroys all problems" do | |
| 428 | + expect { | |
| 429 | + post :destroy_all, :app_id => @app.id | |
| 430 | + }.to change(Problem, :count).by(-2) | |
| 431 | + expect(controller.app).to eq @app | |
| 432 | + end | |
| 433 | + | |
| 434 | + it "should display a message" do | |
| 435 | + put :destroy_all, :app_id => @app.id | |
| 436 | + expect(request.flash[:success]).to match(/been deleted/) | |
| 437 | + end | |
| 438 | + | |
| 439 | + it "should redirect back to the app page" do | |
| 440 | + request.env["Referer"] = edit_app_path(@app) | |
| 441 | + put :destroy_all, :app_id => @app.id | |
| 442 | + expect(response).to redirect_to(edit_app_path(@app)) | |
| 443 | + end | |
| 444 | + end | |
| 445 | + | |
| 418 | 446 | end |
| 419 | 447 | |
| 420 | 448 | end | ... | ... |
spec/views/apps/edit.html.haml_spec.rb
| ... | ... | @@ -12,6 +12,11 @@ describe "apps/edit.html.haml" do |
| 12 | 12 | view.content_for(:action_bar) |
| 13 | 13 | end |
| 14 | 14 | |
| 15 | + it "should confirm the 'reset' link" do | |
| 16 | + render | |
| 17 | + expect(action_bar).to have_selector('a.button[data-confirm="%s"]' % I18n.t('apps.confirm_destroy_all_problems')) | |
| 18 | + end | |
| 19 | + | |
| 15 | 20 | it "should confirm the 'destroy' link" do |
| 16 | 21 | render |
| 17 | 22 | expect(action_bar).to have_selector('a.button[data-confirm="%s"]' % I18n.t('apps.confirm_delete')) | ... | ... |