11789: Merge branch 'master' into 11789-arvput-exclude-flag
[arvados.git] / services / api / test / functional / arvados / v1 / jobs_controller_test.rb
index f68e50caec6e19c7b855bd024a5f3ecc814d54e7..5e3d8e1975b35f682d0799a2156c619c4cd4d1c7 100644 (file)
@@ -1,3 +1,7 @@
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
+
 require 'test_helper'
 require 'helpers/git_test_helper'
 
@@ -97,7 +101,7 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase
                  'server should correct bogus cancelled_at ' +
                  job['cancelled_at'])
     assert_equal(true,
-                 File.exists?(Rails.configuration.crunch_refresh_trigger),
+                 File.exist?(Rails.configuration.crunch_refresh_trigger),
                  'trigger file should be created when job is cancelled')
   end
 
@@ -390,7 +394,7 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase
   test "job lock conflict" do
     authorize_with :active
     post :lock, {id: jobs(:running).uuid}
-    assert_response 403 # forbidden
+    assert_response 422 # invalid state transition
   end
 
   test 'reject invalid commit in remote repository' do
@@ -442,19 +446,57 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase
     assert_equal ["component1", "component2"], json_response["components"].keys
   end
 
-  test 'update job with components with no lock' do
+  [
+    [:active, :success],
+    [:system_user, :success],
+    [:admin, 403],
+  ].each do |user, expected|
+    test "add components to job locked by active user as #{user} user and expect #{expected}" do
+      authorize_with user
+      put :update, {
+        id: jobs(:running).uuid,
+        job: {
+          components: {"component1" => "value1", "component2" => "value2"}
+        }
+      }
+      assert_response expected
+      if expected == :success
+        assert_not_nil json_response["components"]
+        keys = json_response["components"].keys
+        assert_equal ["component1", "component2"], keys
+        assert_equal "value1", json_response["components"][keys[0]]
+      end
+    end
+  end
+
+  test 'get_delete components_get again for job with components' do
     authorize_with :active
+    get :show, {id: jobs(:running_job_with_components).uuid}
+    assert_response :success
+    assert_not_nil json_response["components"]
+    assert_equal ["component1", "component2"], json_response["components"].keys
+
+    # delete second component
+    @test_counter = 0  # Reset executed action counter
+    @controller = Arvados::V1::JobsController.new
     put :update, {
       id: jobs(:running_job_with_components).uuid,
       job: {
-        components: {}
+        components: {"component1" => "zzzzz-8i9sb-jobuuid00000001"}
       }
     }
-    assert_response 403
-  end
+    assert_response :success
 
-  test 'update job with components' do
-    authorize_with :admin
+    @test_counter = 0  # Reset executed action counter
+    @controller = Arvados::V1::JobsController.new
+    get :show, {id: jobs(:running_job_with_components).uuid}
+    assert_response :success
+    assert_not_nil json_response["components"]
+    assert_equal ["component1"], json_response["components"].keys
+
+    # delete all components
+    @test_counter = 0  # Reset executed action counter
+    @controller = Arvados::V1::JobsController.new
     put :update, {
       id: jobs(:running_job_with_components).uuid,
       job: {
@@ -462,20 +504,25 @@ class Arvados::V1::JobsControllerTest < ActionController::TestCase
       }
     }
     assert_response :success
-  end
 
-  test 'add components to job locked by active user as system user' do
-    authorize_with :system_user
-    put :update, {
-      id: jobs(:running).uuid,
-      job: {
-        components: {"component1" => "value1", "component2" => "value2"}
-      }
-    }
+    @test_counter = 0  # Reset executed action counter
+    @controller = Arvados::V1::JobsController.new
+    get :show, {id: jobs(:running_job_with_components).uuid}
     assert_response :success
     assert_not_nil json_response["components"]
-    keys = json_response["components"].keys
-    assert_equal ["component1", "component2"], keys
-    assert_equal "value1", json_response["components"][keys[0]]
+    assert_equal [], json_response["components"].keys
+  end
+
+  test 'jobs.create disabled in config' do
+    Rails.configuration.disable_api_methods = ["jobs.create",
+                                               "pipeline_instances.create"]
+    authorize_with :active
+    post :create, job: {
+      script: "hash",
+      script_version: "master",
+      repository: "active/foo",
+      script_parameters: {}
+    }
+    assert_response 404
   end
 end