Merge branch 'master' into 3408-production-datamanager
[arvados.git] / services / api / test / functional / arvados / v1 / filters_test.rb
1 require 'test_helper'
2
3 class Arvados::V1::FiltersTest < ActionController::TestCase
4   test '"not in" filter passes null values' do
5     @controller = Arvados::V1::GroupsController.new
6     authorize_with :admin
7     get :index, {
8       filters: [ ['group_class', 'not in', ['project']] ],
9       controller: 'groups',
10     }
11     assert_response :success
12     found = assigns(:objects)
13     assert_includes(found.collect(&:group_class), nil,
14                     "'group_class not in ['project']' filter should pass null")
15   end
16
17   test 'error message for non-array element in filters array' do
18     @controller = Arvados::V1::CollectionsController.new
19     authorize_with :active
20     get :index, {
21       filters: [{bogus: 'filter'}],
22     }
23     assert_response 422
24     assert_match(/Invalid element in filters array/,
25                  json_response['errors'].join(' '))
26   end
27
28   test 'error message for full text search on a specific column' do
29     @controller = Arvados::V1::CollectionsController.new
30     authorize_with :active
31     get :index, {
32       filters: [['uuid', '@@', 'abcdef']],
33     }
34     assert_response 422
35     assert_match /not supported/, json_response['errors'].join(' ')
36   end
37
38   test 'difficult characters in full text search' do
39     @controller = Arvados::V1::CollectionsController.new
40     authorize_with :active
41     get :index, {
42       filters: [['any', '@@', 'a|b"c']],
43     }
44     assert_response :success
45     # (Doesn't matter so much which results are returned.)
46   end
47
48   test 'array operand in full text search' do
49     @controller = Arvados::V1::CollectionsController.new
50     authorize_with :active
51     get :index, {
52       filters: [['any', '@@', ['abc', 'def']]],
53     }
54     assert_response 422
55     assert_match /not supported/, json_response['errors'].join(' ')
56   end
57 end