]> source.dussan.org Git - redmine.git/commitdiff
Handle unsuccessful destroys in TimelogController. #5700
authorEric Davis <edavis@littlestreamsoftware.com>
Sun, 20 Jun 2010 19:30:51 +0000 (19:30 +0000)
committerEric Davis <edavis@littlestreamsoftware.com>
Sun, 20 Jun 2010 19:30:51 +0000 (19:30 +0000)
Contributed by Jan

git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3805 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/controllers/timelog_controller.rb
config/locales/de.yml
config/locales/en.yml
test/functional/timelog_controller_test.rb

index 160c19974b56d0ca0b7373c6a96ab7b69a09df5a..73ff58b82b8ceb2f624c18217107ce1be594bc1b 100644 (file)
@@ -225,8 +225,11 @@ class TimelogController < ApplicationController
   def destroy
     (render_404; return) unless @time_entry
     (render_403; return) unless @time_entry.editable_by?(User.current)
-    @time_entry.destroy
-    flash[:notice] = l(:notice_successful_delete)
+    if @time_entry.destroy && @time_entry.destroyed?
+      flash[:notice] = l(:notice_successful_delete)
+    else
+      flash[:error] = l(:notice_unable_delete_time_entry)
+    end
     redirect_to :back
   rescue ::ActionController::RedirectBackError
     redirect_to :action => 'details', :project_id => @time_entry.project
index 0e7e4c074eaf46934e43f23c4645d3f5a367d74c..16b00d00be922cda03db374e30d1177f617b8ad8 100644 (file)
@@ -175,6 +175,7 @@ de:
   notice_account_pending: "Ihr Konto wurde erstellt und wartet jetzt auf die Genehmigung des Administrators."
   notice_default_data_loaded: Die Standard-Konfiguration wurde erfolgreich geladen.
   notice_unable_delete_version: Die Version konnte nicht gelöscht werden.
+  notice_unable_delete_time_entry: Der Zeiterfassungseintrag konnte nicht gelöscht werden.
   notice_issue_done_ratios_updated: Der Ticket-Fortschritt wurde aktualisiert.
 
   error_can_t_load_default_data: "Die Standard-Konfiguration konnte nicht geladen werden: {{value}}"
index 91ef3fa976374ed4718e42dd7b05925466b49017..9d875e4b43145acf3ae57449ef9a160b08c3a718 100644 (file)
@@ -153,6 +153,7 @@ en:
   notice_account_pending: "Your account was created and is now pending administrator approval."
   notice_default_data_loaded: Default configuration successfully loaded.
   notice_unable_delete_version: Unable to delete version.
+  notice_unable_delete_time_entry: Unable to delete time log entry.
   notice_issue_done_ratios_updated: Issue done ratios updated.
   
   error_can_t_load_default_data: "Default configuration could not be loaded: {{value}}"
index 880527319f9144a7b5ab21119992cc326aaf0cba..9e30a0ae82ce92c18334dc8456c4b26fbc7a01b9 100644 (file)
@@ -116,9 +116,27 @@ class TimelogControllerTest < ActionController::TestCase
     @request.session[:user_id] = 2
     post :destroy, :id => 1
     assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_equal I18n.t(:notice_successful_delete), flash[:notice]
     assert_nil TimeEntry.find_by_id(1)
   end
   
+  def test_destroy_should_fail
+    # simulate that this fails (e.g. due to a plugin), see #5700
+    TimeEntry.class_eval do
+      before_destroy :stop_callback_chain
+      def stop_callback_chain ; return false ; end
+    end
+
+    @request.session[:user_id] = 2
+    post :destroy, :id => 1
+    assert_redirected_to :action => 'details', :project_id => 'ecookbook'
+    assert_equal I18n.t(:notice_unable_delete_time_entry), flash[:error]
+    assert_not_nil TimeEntry.find_by_id(1)
+
+    # remove the simulation
+    TimeEntry.before_destroy.reject! {|callback| callback.method == :stop_callback_chain }
+  end
+  
   def test_report_no_criteria
     get :report, :project_id => 1
     assert_response :success