15781: Adds test proving that 'contains' does case-sensitive matching.
[arvados.git] / services / api / test / functional / arvados / v1 / filters_test.rb
index ef120b1ca86b79ff54b028fc3c1cf6c5a5e6806a..b30afd745345df01fdb986d8ead8b8c7ad2ab0c4 100644 (file)
@@ -8,7 +8,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test '"not in" filter passes null values' do
     @controller = Arvados::V1::GroupsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['group_class', 'not in', ['project']] ],
       controller: 'groups',
     }
@@ -21,7 +21,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test 'error message for non-array element in filters array' do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :active
-    get :index, {
+    get :index, params: {
       filters: [{bogus: 'filter'}],
     }
     assert_response 422
@@ -32,7 +32,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test 'error message for full text search on a specific column' do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :active
-    get :index, {
+    get :index, params: {
       filters: [['uuid', '@@', 'abcdef']],
     }
     assert_response 422
@@ -42,7 +42,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test 'difficult characters in full text search' do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :active
-    get :index, {
+    get :index, params: {
       filters: [['any', '@@', 'a|b"c']],
     }
     assert_response :success
@@ -52,7 +52,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test 'array operand in full text search' do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :active
-    get :index, {
+    get :index, params: {
       filters: [['any', '@@', ['abc', 'def']]],
     }
     assert_response 422
@@ -86,7 +86,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
       timestamp = mine.modified_at.strftime('%Y-%m-%dT%H:%M:%S.%NZ')
       @controller = Arvados::V1::CollectionsController.new
       authorize_with :active
-      get :index, {
+      get :index, params: {
         filters: [['modified_at', operator, timestamp],
                   ['uuid', '=', mine.uuid]],
       }
@@ -104,11 +104,11 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
     @controller = Arvados::V1::GroupsController.new
     authorize_with :admin
 
-    get :contents, {
+    get :contents, params: {
       format: :json,
       count: 'none',
       limit: 1000,
-      filters: [['any', '@@', Rails.configuration.uuid_prefix]],
+      filters: [['any', '@@', Rails.configuration.ClusterID]],
     }
 
     assert_response :success
@@ -131,13 +131,13 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
 
     @controller = Arvados::V1::GroupsController.new
 
-    get :contents, {
+    get :contents, params: {
       format: :json,
       count: 'none',
       limit: 1000,
       offset: '5',
       last_object_class: 'PipelineInstance',
-      filters: [['any', '@@', Rails.configuration.uuid_prefix]],
+      filters: [['any', '@@', Rails.configuration.ClusterID]],
     }
 
     assert_response :success
@@ -172,11 +172,18 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
    ['prop2', '<=', 5, [:collection_with_prop2_1, :collection_with_prop2_5], []],
    ['prop2', '>=', 1, [:collection_with_prop2_1, :collection_with_prop2_5], []],
    ['<http://schema.org/example>', '=', "value1", [:collection_with_uri_prop], []],
+   ['listprop', 'contains', 'elem1', [:collection_with_list_prop_odd, :collection_with_listprop_elem1], [:collection_with_list_prop_even]],
+   ['listprop', '=', 'elem1', [:collection_with_listprop_elem1], [:collection_with_list_prop_odd]],
+   ['listprop', 'contains', 5, [:collection_with_list_prop_odd], [:collection_with_list_prop_even, :collection_with_listprop_elem1]],
+   ['listprop', 'contains', 'elem2', [:collection_with_list_prop_even], [:collection_with_list_prop_odd, :collection_with_listprop_elem1]],
+   ['listprop', 'contains', 'ELEM2', [], [:collection_with_list_prop_even]],
+   ['listprop', 'contains', 'elem8', [], [:collection_with_list_prop_even]],
+   ['listprop', 'contains', 4, [:collection_with_list_prop_even], [:collection_with_list_prop_odd, :collection_with_listprop_elem1]],
   ].each do |prop, op, opr, inc, ex|
     test "jsonb filter properties.#{prop} #{op} #{opr})" do
       @controller = Arvados::V1::CollectionsController.new
       authorize_with :admin
-      get :index, {
+      get :index, params: {
             filters: SafeJSON.dump([ ["properties.#{prop}", op, opr] ]),
             limit: 1000
           }
@@ -193,10 +200,10 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
     end
   end
 
-  test "jsonb 'exists' and '!=' filter" do
+  test "jsonb hash 'exists' and '!=' filter" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['properties.prop1', 'exists', true], ['properties.prop1', '!=', 'value1'] ]
     }
     assert_response :success
@@ -208,10 +215,27 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
     assert_includes(found, collections(:collection_with_prop1_other1).uuid)
   end
 
-  test "jsonb alternate form 'exists' and '!=' filter" do
+  test "jsonb array 'exists'" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
+      filters: [ ['storage_classes_confirmed.default', 'exists', true] ]
+    }
+    assert_response :success
+    found = assigns(:objects).collect(&:uuid)
+    assert_equal 2, found.length
+    assert_not_includes(found,
+      collections(:storage_classes_desired_default_unconfirmed).uuid)
+    assert_includes(found,
+      collections(:storage_classes_desired_default_confirmed_default).uuid)
+    assert_includes(found,
+      collections(:storage_classes_desired_archive_confirmed_default).uuid)
+  end
+
+  test "jsonb hash alternate form 'exists' and '!=' filter" do
+    @controller = Arvados::V1::CollectionsController.new
+    authorize_with :admin
+    get :index, params: {
       filters: [ ['properties', 'exists', 'prop1'], ['properties.prop1', '!=', 'value1'] ]
     }
     assert_response :success
@@ -223,10 +247,27 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
     assert_includes(found, collections(:collection_with_prop1_other1).uuid)
   end
 
+  test "jsonb array alternate form 'exists' filter" do
+    @controller = Arvados::V1::CollectionsController.new
+    authorize_with :admin
+    get :index, params: {
+      filters: [ ['storage_classes_confirmed', 'exists', 'default'] ]
+    }
+    assert_response :success
+    found = assigns(:objects).collect(&:uuid)
+    assert_equal 2, found.length
+    assert_not_includes(found,
+      collections(:storage_classes_desired_default_unconfirmed).uuid)
+    assert_includes(found,
+      collections(:storage_classes_desired_default_confirmed_default).uuid)
+    assert_includes(found,
+      collections(:storage_classes_desired_archive_confirmed_default).uuid)
+  end
+
   test "jsonb 'exists' must be boolean" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['properties.prop1', 'exists', nil] ]
     }
     assert_response 422
@@ -237,7 +278,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test "jsonb checks column exists" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['puppies.prop1', '=', 'value1'] ]
     }
     assert_response 422
@@ -248,7 +289,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test "jsonb checks column is valid" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['name.prop1', '=', 'value1'] ]
     }
     assert_response 422
@@ -259,7 +300,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test "jsonb invalid operator" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: [ ['properties.prop1', '###', 'value1'] ]
     }
     assert_response 422
@@ -270,7 +311,7 @@ class Arvados::V1::FiltersTest < ActionController::TestCase
   test "replication_desired = 2" do
     @controller = Arvados::V1::CollectionsController.new
     authorize_with :admin
-    get :index, {
+    get :index, params: {
       filters: SafeJSON.dump([ ['replication_desired', '=', 2] ])
     }
     assert_response :success
@@ -278,5 +319,4 @@ 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
-
 end