2891: Workbench error page shows login status.
authorBrett Smith <brett@curoverse.com>
Fri, 20 Jun 2014 18:33:18 +0000 (14:33 -0400)
committerBrett Smith <brett@curoverse.com>
Mon, 23 Jun 2014 17:17:28 +0000 (13:17 -0400)
The tests here check that an error page shows the usual user
information for someone logged in, and renders okay for someone who
isn't.

apps/workbench/app/controllers/application_controller.rb
apps/workbench/test/integration/errors_test.rb [new file with mode: 0644]

index 59ba2c5b73e176fc57c9c4d0dabc923f07a38ae8..521e48eabd5f5cfae0caea961d03ff797724e20a 100644 (file)
@@ -53,13 +53,21 @@ class ApplicationController < ActionController::Base
     else
       @errors = [e.to_s]
     end
-    self.render_error status: 422
+    if e.is_a? ArvadosApiClient::NotLoggedInException
+      self.render_error status: 422
+    else
+      thread_with_optional_api_token do
+        self.render_error status: 422
+      end
+    end
   end
 
   def render_not_found(e=ActionController::RoutingError.new("Path not found"))
     logger.error e.inspect
     @errors = ["Path not found"]
-    self.render_error status: 404
+    thread_with_optional_api_token do
+      self.render_error status: 404
+    end
   end
 
   def find_objects_for_index
diff --git a/apps/workbench/test/integration/errors_test.rb b/apps/workbench/test/integration/errors_test.rb
new file mode 100644 (file)
index 0000000..092041d
--- /dev/null
@@ -0,0 +1,19 @@
+require 'integration_helper'
+
+class ErrorsTest < ActionDispatch::IntegrationTest
+  BAD_UUID = "zzzzz-zzzzz-zzzzzzzzzzzzzzz"
+
+  test "error page renders user navigation" do
+    visit(page_with_token("active", "/collections/#{BAD_UUID}"))
+    assert(page.has_text?(@@API_AUTHS["active"]["email"]),
+           "User information missing from error page")
+    assert(page.has_no_text?(/log ?in/i),
+           "Logged in user prompted to log in on error page")
+  end
+
+  test "error page renders without login" do
+    visit "/collections/download/#{BAD_UUID}/#{@@API_AUTHS['active']['api_token']}"
+    assert(page.has_no_text?(/\b500\b/),
+           "Error page without login returned 500")
+  end
+end