X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/e1df29a3d682b28400ca35e490aa4a95aa564246..5de32fb197f6b98d0722c2aacc0bfb8f63a6516f:/services/api/test/functional/arvados/v1/filters_test.rb diff --git a/services/api/test/functional/arvados/v1/filters_test.rb b/services/api/test/functional/arvados/v1/filters_test.rb index bcb1807867..5d343314ce 100644 --- a/services/api/test/functional/arvados/v1/filters_test.rb +++ b/services/api/test/functional/arvados/v1/filters_test.rb @@ -39,6 +39,41 @@ class Arvados::V1::FiltersTest < ActionController::TestCase assert_match(/no longer supported/, json_response['errors'].join(' ')) end + test 'error message for int64 overflow' do + # some versions of ActiveRecord cast >64-bit ints to postgres + # numeric type, but this is never useful because database content + # is 64 bit. + @controller = Arvados::V1::LogsController.new + authorize_with :active + get :index, params: { + filters: [['id', '=', 123412341234123412341234]], + } + assert_response 422 + assert_match(/Invalid operand .* integer attribute/, json_response['errors'].join(' ')) + end + + ['in', 'not in'].each do |operator| + test "error message for int64 overflow ('#{operator}' filter)" do + @controller = Arvados::V1::ContainerRequestsController.new + authorize_with :active + get :index, params: { + filters: [['priority', operator, [9, 123412341234123412341234]]], + } + assert_response 422 + assert_match(/Invalid element .* integer attribute/, json_response['errors'].join(' ')) + end + end + + test 'error message for invalid boolean operand' do + @controller = Arvados::V1::GroupsController.new + authorize_with :active + get :index, params: { + filters: [['is_trashed', '=', 'fourty']], + } + assert_response 422 + assert_match(/Invalid operand .* boolean attribute/, json_response['errors'].join(' ')) + end + test 'api responses provide timestamps with nanoseconds' do @controller = Arvados::V1::CollectionsController.new authorize_with :active @@ -236,6 +271,58 @@ class Arvados::V1::FiltersTest < ActionController::TestCase json_response['errors'].join(' ')) end + test "groups contents with properties filter succeeds on objects with properties field" do + @controller = Arvados::V1::GroupsController.new + authorize_with :admin + get :contents, params: { + filters: [ + ['properties', 'exists', 'foo'], + ['uuid', 'is_a', ["arvados#group","arvados#collection","arvados#containerRequest"]], + ] + } + assert_response 200 + assert json_response['items'].length == 0 + end + + # Tests bug #19297 + test "groups contents with properties filter succeeds on some objects with properties field" do + @controller = Arvados::V1::GroupsController.new + authorize_with :admin + get :contents, params: { + filters: [ + ['properties', 'exists', 'foo'], + ['uuid', 'is_a', ["arvados#group","arvados#workflow"]], + ] + } + assert_response 200 + assert json_response['items'].length == 0 + end + + # Tests bug #19297 + test "groups contents with properties filter fails on objects without properties field" do + @controller = Arvados::V1::GroupsController.new + authorize_with :admin + get :contents, params: { + filters: [ + ['properties', 'exists', 'foo'], + ['uuid', 'is_a', ["arvados#workflow"]], + ] + } + assert_response 422 + assert_match(/Invalid attribute 'properties' for operator 'exists'.*on object type Workflow/, json_response['errors'].join(' ')) + end + + test "groups contents without filters and limit=0, count=none" do + @controller = Arvados::V1::GroupsController.new + authorize_with :admin + get :contents, params: { + limit: 0, + count: 'none', + } + assert_response 200 + assert json_response['items'].length == 0 + end + test "replication_desired = 2" do @controller = Arvados::V1::CollectionsController.new authorize_with :admin @@ -247,4 +334,51 @@ class Arvados::V1::FiltersTest < ActionController::TestCase assert_includes(found, collections(:replication_desired_2_unconfirmed).uuid) assert_includes(found, collections(:replication_desired_2_confirmed_2).uuid) end + + [ + [1, "foo"], + [1, ["foo"]], + [1, ["bar"]], + [1, ["bar", "foo"]], + [0, ["foo", "qux"]], + [0, ["qux"]], + [nil, []], + [nil, [[]]], + [nil, [["bogus"]]], + [nil, [{"foo" => "bar"}]], + [nil, {"foo" => "bar"}], + ].each do |results, operand| + test "storage_classes_desired contains #{operand.inspect}" do + @controller = Arvados::V1::CollectionsController.new + authorize_with(:active) + c = Collection.create!( + manifest_text: "", + storage_classes_desired: ["foo", "bar", "baz"]) + get :index, params: { + filters: [["storage_classes_desired", "contains", operand]], + } + if results.nil? + assert_response 422 + next + end + assert_response :success + assert_equal results, json_response["items"].length + if results > 0 + assert_equal c.uuid, json_response["items"][0]["uuid"] + end + end + end + + test "collections properties contains top level key" do + @controller = Arvados::V1::CollectionsController.new + authorize_with(:active) + get :index, params: { + filters: [["properties", "contains", "prop1"]], + } + assert_response :success + assert_not_empty json_response["items"] + json_response["items"].each do |c| + assert c["properties"].has_key?("prop1") + end + end end