Patch looks good, and works for the most part (against most objects I
tested including providers, hardware profiles, templates, etc). Two
entities that it didn't work for were users and pools.
eg navigate to the users admin, create a new user, open that user's
details in a new tab, delete the user in the first tab, and then refresh
the user's details. Instead of redirecting to the users list and
displaying an error it displays an alternate user.
Additionally doing the same w/ pools results in redirecting problem.
Once the pools/users use cases are taken care of, I'll ack.
Thanks,
-Mo
On 03/23/2011 08:58 AM, mtaylor(a)redhat.com wrote:
From: Martyn Taylor<mtaylor(a)redhat.com>
---
src/app/controllers/application_controller.rb | 6 +++++
src/features/error_handling.feature | 21 ++++++++++++++++++++
.../step_definitions/error_handling_steps.rb | 4 +++
3 files changed, 31 insertions(+), 0 deletions(-)
create mode 100644 src/features/error_handling.feature
create mode 100644 src/features/step_definitions/error_handling_steps.rb
diff --git a/src/app/controllers/application_controller.rb
b/src/app/controllers/application_controller.rb
index a720939..380cfac 100644
--- a/src/app/controllers/application_controller.rb
+++ b/src/app/controllers/application_controller.rb
@@ -35,6 +35,7 @@ class ApplicationController< ActionController::Base
rescue_from PermissionError, :with => :handle_perm_error
rescue_from ActionError, :with => :handle_action_error
rescue_from PartialSuccessError, :with => :handle_partial_success_error
+ rescue_from ActiveRecord::RecordNotFound, :with =>
:handle_active_record_not_found_error
helper_method :check_privilege
@@ -136,6 +137,11 @@ class ApplicationController< ActionController::Base
end
end
+ def handle_active_record_not_found_error(error)
+ redirect_to :back
+ flash[:notice] = "The record you tried to access does not exist, it may have
been deleted"
+ end
+
private
def json_error_hash(msg, status)
json = {}
diff --git a/src/features/error_handling.feature b/src/features/error_handling.feature
new file mode 100644
index 0000000..bc5d171
--- /dev/null
+++ b/src/features/error_handling.feature
@@ -0,0 +1,21 @@
+Feature: Error Handling
+ In order to order to perform operations upon site objects
+ As a user
+ I must be able to correctly view any object errors
+
+ Background:
+ Given I am an authorised user
+ And I am logged in
+
+ @allow-rescue
+ Scenario: Display Record Not Found error for a deleted object
+ Given there are the following conductor hardware profiles:
+ | name | memory | cpu |storage | architecture |
+ | m1-small | 1740 | 2 | 160 | i386 |
+ | m1-large | 4096 | 4 | 850 | x86_64 |
+ | m1-xlarge | 8192 | 8 | 1690 | x86_64 |
+ And I am on the hardware profiles page
+ When another user deletes hardware profile "m1-small"
+ And I follow "m1-small"
+ Then I should be on the hardware profiles page
+ And I should see "The record you tried to access does not exist, it may have
been deleted"
\ No newline at end of file
diff --git a/src/features/step_definitions/error_handling_steps.rb
b/src/features/step_definitions/error_handling_steps.rb
new file mode 100644
index 0000000..6889de0
--- /dev/null
+++ b/src/features/step_definitions/error_handling_steps.rb
@@ -0,0 +1,4 @@
+When /^another user deletes hardware profile "([^"]*)"$/ do |name|
+ hwp = HardwareProfile.find_by_name(name)
+ hwp.delete
+end
\ No newline at end of file