2879: Docker filters on Jobs accept an array of search terms.
authorBrett Smith <brett@curoverse.com>
Thu, 19 Jun 2014 14:49:56 +0000 (10:49 -0400)
committerBrett Smith <brett@curoverse.com>
Thu, 19 Jun 2014 17:25:07 +0000 (13:25 -0400)
services/api/app/controllers/arvados/v1/jobs_controller.rb
services/api/test/functional/arvados/v1/job_reuse_controller_test.rb

index 7ce5a62471c3ad527c6e9cf2cee6223aa1355b3b..d38f257db9fd6cc4de53c10c699eb4b1b5171695 100644 (file)
@@ -190,9 +190,11 @@ class Arvados::V1::JobsController < ApplicationController
         false
       when ["docker_image_locator", "in docker"], ["docker_image_locator", "not in docker"]
         filter[1].sub!(/ docker$/, '')
-        image_search, image_tag = filter[2].split(':', 2)
-        filter[2] = Collection.
-          uuids_for_docker_image(image_search, image_tag, @read_users)
+        search_list = filter[2].is_a?(Enumerable) ? filter[2] : [filter[2]]
+        filter[2] = search_list.flat_map do |search_term|
+          image_search, image_tag = search_term.split(':', 2)
+          Collection.uuids_for_docker_image(image_search, image_tag, @read_users)
+        end
         true
       else
         true
index 6a3fbe44f6abc08fde05a0b8ef5f50a37ae6c62f..b00fbf11c66f49a7799da07ed296535331f69aa0 100644 (file)
@@ -529,4 +529,26 @@ class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
     refute_includes(assigns(:objects).map { |job| job.uuid },
                     jobs(:previous_job_run).uuid)
   end
+
+  test "'in docker' filter accepts arrays" do
+    get :index, filters: [["docker_image_locator", "in docker",
+                           ["_nonesuchname_", "arvados/apitestfixture"]]]
+    assert_response :success
+    assert_not_nil assigns(:objects)
+    assert_includes(assigns(:objects).map { |job| job.uuid },
+                    jobs(:previous_docker_job_run).uuid)
+    refute_includes(assigns(:objects).map { |job| job.uuid },
+                    jobs(:previous_job_run).uuid)
+  end
+
+  test "'not in docker' filter accepts arrays" do
+    get :index, filters: [["docker_image_locator", "not in docker",
+                           ["_nonesuchname_", "arvados/apitestfixture"]]]
+    assert_response :success
+    assert_not_nil assigns(:objects)
+    assert_includes(assigns(:objects).map { |job| job.uuid },
+                    jobs(:previous_job_run).uuid)
+    refute_includes(assigns(:objects).map { |job| job.uuid },
+                    jobs(:previous_docker_job_run).uuid)
+  end
 end