X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/3dfc071494cbb0386ecd7269c72a435fc7f9cc24..ff7b22c70cd77073d9bdbebac0bf03d43745ed0c:/apps/workbench/test/functional/pipeline_instances_controller_test.rb diff --git a/apps/workbench/test/functional/pipeline_instances_controller_test.rb b/apps/workbench/test/functional/pipeline_instances_controller_test.rb index 20886b5ab6..a14d419e12 100644 --- a/apps/workbench/test/functional/pipeline_instances_controller_test.rb +++ b/apps/workbench/test/functional/pipeline_instances_controller_test.rb @@ -69,7 +69,7 @@ class PipelineInstancesControllerTest < ActionController::TestCase end end - test "component rendering copes with unexpeceted components format" do + test "component rendering copes with unexpected components format" do get(:show, {id: api_fixture("pipeline_instances")["components_is_jobspec"]["uuid"]}, session_for(:active)) @@ -86,4 +86,72 @@ class PipelineInstancesControllerTest < ActionController::TestCase assert assigns(:object).components[:foo][:job][:started_at].is_a? Time assert assigns(:object).components[:foo][:job][:finished_at].is_a? Time end + + # The next two tests ensure that a pipeline instance can be copied + # when the template has components that do not exist in the + # instance (ticket #4000). + + test "copy pipeline instance with components=use_latest" do + post(:copy, + { + id: api_fixture('pipeline_instances')['pipeline_with_newer_template']['uuid'], + components: 'use_latest', + script: 'use_latest', + pipeline_instance: { + state: 'RunningOnServer' + } + }, + session_for(:active)) + assert_response 302 + assert_not_nil assigns(:object) + + # Component 'foo' has script parameters only in the pipeline instance. + # Component 'bar' is present only in the pipeline_template. + # Test that the copied pipeline instance includes parameters for + # component 'foo' from the source instance, and parameters for + # component 'bar' from the source template. + # + assert_not_nil assigns(:object).components[:foo] + foo = assigns(:object).components[:foo] + assert_not_nil foo[:script_parameters] + assert_not_nil foo[:script_parameters][:input] + assert_equal 'foo instance input', foo[:script_parameters][:input][:title] + + assert_not_nil assigns(:object).components[:bar] + bar = assigns(:object).components[:bar] + assert_not_nil bar[:script_parameters] + assert_not_nil bar[:script_parameters][:input] + assert_equal 'bar template input', bar[:script_parameters][:input][:title] + end + + test "copy pipeline instance on newer template works with script=use_same" do + post(:copy, + { + id: api_fixture('pipeline_instances')['pipeline_with_newer_template']['uuid'], + components: 'use_latest', + script: 'use_same', + pipeline_instance: { + state: 'RunningOnServer' + } + }, + session_for(:active)) + assert_response 302 + assert_not_nil assigns(:object) + + # Test that relevant component parameters were copied from both + # the source instance and source template, respectively (see + # previous test) + # + assert_not_nil assigns(:object).components[:foo] + foo = assigns(:object).components[:foo] + assert_not_nil foo[:script_parameters] + assert_not_nil foo[:script_parameters][:input] + assert_equal 'foo instance input', foo[:script_parameters][:input][:title] + + assert_not_nil assigns(:object).components[:bar] + bar = assigns(:object).components[:bar] + assert_not_nil bar[:script_parameters] + assert_not_nil bar[:script_parameters][:input] + assert_equal 'bar template input', bar[:script_parameters][:input][:title] + end end