Merge branch 'main' from workbench2.git
[arvados.git] / services / api / test / functional / arvados / v1 / job_reuse_controller_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'test_helper'
6 require 'helpers/git_test_helper'
7
8 class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
9   fixtures :repositories, :users, :jobs, :links, :collections
10
11   setup do
12     @controller = Arvados::V1::JobsController.new
13     authorize_with :active
14   end
15
16   BASE_FILTERS = {
17     'repository' => ['=', 'active/foo'],
18     'script' => ['=', 'hash'],
19     'script_version' => ['in git', 'main'],
20     'docker_image_locator' => ['=', nil],
21     'arvados_sdk_version' => ['=', nil],
22   }
23
24   def filters_from_hash(hash)
25     hash.each_pair.map { |name, filter| [name] + filter }
26   end
27
28   test "find Job with script version range" do
29     get :index, params: {
30       filters: [["repository", "=", "active/foo"],
31                 ["script", "=", "hash"],
32                 ["script_version", "in git", "tag1"]]
33     }
34     assert_response :success
35     assert_not_nil assigns(:objects)
36     assert_includes(assigns(:objects).map { |job| job.uuid },
37                     jobs(:previous_job_run).uuid)
38   end
39
40   test "find Job with script version range exclusions" do
41     get :index, params: {
42       filters: [["repository", "=", "active/foo"],
43                 ["script", "=", "hash"],
44                 ["script_version", "not in git", "tag1"]]
45     }
46     assert_response :success
47     assert_not_nil assigns(:objects)
48     refute_includes(assigns(:objects).map { |job| job.uuid },
49                     jobs(:previous_job_run).uuid)
50   end
51
52   test "find Job with Docker image range" do
53     get :index, params: {
54       filters: [["docker_image_locator", "in docker",
55                  "arvados/apitestfixture"]]
56     }
57     assert_response :success
58     assert_not_nil assigns(:objects)
59     assert_includes(assigns(:objects).map { |job| job.uuid },
60                     jobs(:previous_docker_job_run).uuid)
61     refute_includes(assigns(:objects).map { |job| job.uuid },
62                     jobs(:previous_job_run).uuid)
63   end
64
65   test "find Job with Docker image using reader tokens" do
66     authorize_with :inactive
67     get(:index, params: {
68           filters: [["docker_image_locator", "in docker",
69                      "arvados/apitestfixture"]],
70           reader_tokens: [api_token(:active)],
71         })
72     assert_response :success
73     assert_not_nil assigns(:objects)
74     assert_includes(assigns(:objects).map { |job| job.uuid },
75                     jobs(:previous_docker_job_run).uuid)
76     refute_includes(assigns(:objects).map { |job| job.uuid },
77                     jobs(:previous_job_run).uuid)
78   end
79
80   test "'in docker' filter accepts arrays" do
81     get :index, params: {
82       filters: [["docker_image_locator", "in docker",
83                 ["_nonesuchname_", "arvados/apitestfixture"]]]
84     }
85     assert_response :success
86     assert_not_nil assigns(:objects)
87     assert_includes(assigns(:objects).map { |job| job.uuid },
88                     jobs(:previous_docker_job_run).uuid)
89     refute_includes(assigns(:objects).map { |job| job.uuid },
90                     jobs(:previous_job_run).uuid)
91   end
92
93   test "'not in docker' filter accepts arrays" do
94     get :index, params: {
95       filters: [["docker_image_locator", "not in docker",
96                 ["_nonesuchname_", "arvados/apitestfixture"]]]
97     }
98     assert_response :success
99     assert_not_nil assigns(:objects)
100     assert_includes(assigns(:objects).map { |job| job.uuid },
101                     jobs(:previous_job_run).uuid)
102     refute_includes(assigns(:objects).map { |job| job.uuid },
103                     jobs(:previous_docker_job_run).uuid)
104   end
105
106 end