9799: Fix show/hide "cancel container req" button: check ArvadosBase#editable?, and...
authorTom Clegg <tom@curoverse.com>
Tue, 30 Aug 2016 15:36:28 +0000 (11:36 -0400)
committerTom Clegg <tom@curoverse.com>
Wed, 31 Aug 2016 02:01:54 +0000 (22:01 -0400)
apps/workbench/app/models/container_work_unit.rb
apps/workbench/test/integration/application_layout_test.rb
apps/workbench/test/test_helper.rb
apps/workbench/test/unit/work_unit_test.rb

index 944dc02a5578224d2e85696a817862db088f0925..42a4f4bd5b6110f9ad65260ba66c2b2037de8642 100644 (file)
@@ -46,13 +46,17 @@ class ContainerWorkUnit < ProxyWorkUnit
   end
 
   def can_cancel?
-    @proxied.is_a?(ContainerRequest) && state_label.in?(["Queued", "Locked", "Running"]) && priority > 0
+    @proxied.is_a?(ContainerRequest) && @proxied.state == "Committed" && @proxied.priority > 0 && @proxied.editable?
   end
 
   def container_uuid
     get(:container_uuid)
   end
 
+  def priority
+    @proxied.priority
+  end
+
   # For the following properties, use value from the @container if exists
   # This applies to a ContainerRequest with container_uuid
 
@@ -92,10 +96,6 @@ class ContainerWorkUnit < ProxyWorkUnit
     get_combined(:runtime_constraints)
   end
 
-  def priority
-    get_combined(:priority)
-  end
-
   def log_collection
     get_combined(:log)
   end
@@ -155,7 +155,7 @@ class ContainerWorkUnit < ProxyWorkUnit
     end
   end
 
-  # End combined propeties
+  # End combined properties
 
   protected
   def get_combined key
index 686b63b526aaeadd9a04508ed87e2b6a93cfa214..81ddda6c2160b919d2faea833ef7c915e9d912c3 100644 (file)
@@ -303,13 +303,11 @@ class ApplicationLayoutTest < ActionDispatch::IntegrationTest
 
       assert_text 'created_at'
       if cancelable
-        assert page.has_button?('Cancel'), 'No Cancel button'
+        assert_selector 'button', text: 'Cancel'
         click_button 'Cancel'
         wait_for_ajax
-        assert page.has_no_button?('Cancel'), 'Cancel button not expected after clicking'
-      else
-        assert page.has_no_button?('Cancel'), 'Cancel button not expected'
       end
+      assert_no_selector 'button', text: 'Cancel'
     end
   end
 
index 78ef2d21f1a15a106c000710c440984b5a210b16..73bfda6ae626c79b165634e1b81a6076b7809fcb 100644 (file)
@@ -32,14 +32,16 @@ class ActiveSupport::TestCase
   # in integration tests -- they do not yet inherit this setting
   fixtures :all
   def use_token token_name
-    was = Thread.current[:arvados_api_token]
+    user_was = Thread.current[:user]
+    token_was = Thread.current[:arvados_api_token]
     auth = api_fixture('api_client_authorizations')[token_name.to_s]
     Thread.current[:arvados_api_token] = auth['api_token']
     if block_given?
       begin
         yield
       ensure
-        Thread.current[:arvados_api_token] = was
+        Thread.current[:user] = user_was
+        Thread.current[:arvados_api_token] = token_was
       end
     end
   end
index 304dc8ba328aefb6f38708a96b833b1c1e4bf6b8..68bc2fdaddc59c5e0ef0c67e06815684bb4fb344 100644 (file)
@@ -104,4 +104,18 @@ class WorkUnitTest < ActiveSupport::TestCase
       end
     end
   end
+
+  test 'can_cancel?' do
+    use_token 'active' do
+      assert find_fixture(Job, 'running').work_unit.can_cancel?
+      refute find_fixture(Container, 'running').work_unit.can_cancel?
+      assert find_fixture(ContainerRequest, 'running').work_unit.can_cancel?
+    end
+    use_token 'spectator' do
+      refute find_fixture(ContainerRequest, 'running_anonymous_accessible').work_unit.can_cancel?
+    end
+    use_token 'admin' do
+      assert find_fixture(ContainerRequest, 'running_anonymous_accessible').work_unit.can_cancel?
+    end
+  end
 end