4307: Workbench: only pipeline components are not editable after start.
authorBrett Smith <brett@curoverse.com>
Thu, 30 Oct 2014 17:45:10 +0000 (13:45 -0400)
committerBrett Smith <brett@curoverse.com>
Thu, 30 Oct 2014 17:45:10 +0000 (13:45 -0400)
This fixes a regression from d7fdbbab.  Closes #4307.

apps/workbench/app/models/pipeline_instance.rb
apps/workbench/test/unit/pipeline_instance_test.rb

index 83328b9e52ce31dd126812ba874de766282fb93c..f575e20d4ea964355dda807bbafd5d21a33892e9 100644 (file)
@@ -52,7 +52,11 @@ class PipelineInstance < ArvadosBase
   end
 
   def attribute_editable?(name, ever=nil)
-    (ever or %w(New Ready).include?(state)) and super
+    if name.to_s == "components"
+      (ever or %w(New Ready).include?(state)) and super
+    else
+      super
+    end
   end
 
   def attributes_for_display
index 95ad8fa7cd11bf4abaabd7d04712945071255d28..4cad6e64b604b06858267055a60f81a25d13c096 100644 (file)
@@ -1,31 +1,49 @@
 require 'test_helper'
 
 class PipelineInstanceTest < ActiveSupport::TestCase
+  def attribute_editable_for?(token_name, pi_name, attr_name, ever=nil)
+    use_token token_name
+    find_fixture(PipelineInstance, pi_name).attribute_editable?(attr_name, ever)
+  end
+
   test "admin can edit name" do
-    use_token :admin
-    assert(find_fixture(PipelineInstance, "new_pipeline_in_subproject")
-             .attribute_editable?("name"),
+    assert(attribute_editable_for?(:admin, "new_pipeline_in_subproject",
+                                   "name"),
            "admin not allowed to edit pipeline instance name")
   end
 
   test "project owner can edit name" do
-    use_token :active
-    assert(find_fixture(PipelineInstance, "new_pipeline_in_subproject")
-             .attribute_editable?("name"),
+    assert(attribute_editable_for?(:active, "new_pipeline_in_subproject",
+                                   "name"),
            "project owner not allowed to edit pipeline instance name")
   end
 
   test "project admin can edit name" do
-    use_token :subproject_admin
-    assert(find_fixture(PipelineInstance, "new_pipeline_in_subproject")
-             .attribute_editable?("name"),
+    assert(attribute_editable_for?(:subproject_admin,
+                                   "new_pipeline_in_subproject", "name"),
            "project admin not allowed to edit pipeline instance name")
   end
 
   test "project viewer cannot edit name" do
-    use_token :project_viewer
-    refute(find_fixture(PipelineInstance, "new_pipeline_in_subproject")
-             .attribute_editable?("name"),
+    refute(attribute_editable_for?(:project_viewer,
+                                   "new_pipeline_in_subproject", "name"),
            "project viewer allowed to edit pipeline instance name")
   end
+
+  test "name editable on completed pipeline" do
+    assert(attribute_editable_for?(:active, "has_component_with_completed_jobs",
+                                   "name"),
+           "name not editable on complete pipeline")
+  end
+
+  test "components editable on new pipeline" do
+    assert(attribute_editable_for?(:active, "new_pipeline", "components"),
+           "components not editable on new pipeline")
+  end
+
+  test "components not editable on completed pipeline" do
+    refute(attribute_editable_for?(:active, "has_component_with_completed_jobs",
+                                   "components"),
+           "components not editable on new pipeline")
+  end
 end