17417: Merge branch 'main' into 17417-add-arm64
[arvados.git] / services / api / test / functional / arvados / v1 / query_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
7 class Arvados::V1::QueryTest < ActionController::TestCase
8   test 'no fallback orders when order is unambiguous' do
9     @controller = Arvados::V1::LogsController.new
10     authorize_with :active
11     get :index, params: {
12       order: ['id asc'],
13       controller: 'logs',
14     }
15     assert_response :success
16     assert_equal ['logs.id asc'], assigns(:objects).order_values
17   end
18
19   test 'fallback orders when order is ambiguous' do
20     @controller = Arvados::V1::LogsController.new
21     authorize_with :active
22     get :index, params: {
23       order: ['event_type asc'],
24       controller: 'logs',
25     }
26     assert_response :success
27     assert_equal('logs.event_type asc, logs.modified_at desc, logs.uuid',
28                  assigns(:objects).order_values.join(', '))
29   end
30
31   test 'skip fallback orders already given by client' do
32     @controller = Arvados::V1::LogsController.new
33     authorize_with :active
34     get :index, params: {
35       order: ['modified_at asc'],
36       controller: 'logs',
37     }
38     assert_response :success
39     assert_equal('logs.modified_at asc, logs.uuid',
40                  assigns(:objects).order_values.join(', '))
41   end
42
43   test 'eliminate superfluous orders' do
44     @controller = Arvados::V1::LogsController.new
45     authorize_with :active
46     get :index, params: {
47       order: ['logs.modified_at asc',
48               'modified_at desc',
49               'event_type desc',
50               'logs.event_type asc'],
51       controller: 'logs',
52     }
53     assert_response :success
54     assert_equal('logs.modified_at asc, logs.event_type desc, logs.uuid',
55                  assigns(:objects).order_values.join(', '))
56   end
57
58   test 'eliminate orders after the first unique column' do
59     @controller = Arvados::V1::LogsController.new
60     authorize_with :active
61     get :index, params: {
62       order: ['event_type asc',
63               'id asc',
64               'uuid asc',
65               'modified_at desc'],
66       controller: 'logs',
67     }
68     assert_response :success
69     assert_equal('logs.event_type asc, logs.id asc',
70                  assigns(:objects).order_values.join(', '))
71   end
72
73   test 'do not count items_available if count=none' do
74     @controller = Arvados::V1::LinksController.new
75     authorize_with :active
76     get :index, params: {
77       count: 'none',
78     }
79     assert_response(:success)
80     refute(json_response.has_key?('items_available'))
81   end
82
83   test 'do not count items_available if count=none for group contents endpoint' do
84     @controller = Arvados::V1::GroupsController.new
85     authorize_with :active
86     get :contents, params: {
87       count: 'none',
88     }
89     assert_response(:success)
90     refute(json_response.has_key?('items_available'))
91   end
92
93   [{}, {count: nil}, {count: ''}, {count: 'exact'}].each do |params|
94     test "count items_available if params=#{params.inspect}" do
95       @controller = Arvados::V1::LinksController.new
96       authorize_with :active
97       get :index, params: params
98       assert_response(:success)
99       assert_operator(json_response['items_available'], :>, 0)
100     end
101   end
102
103   test 'error if count=bogus' do
104     @controller = Arvados::V1::LinksController.new
105     authorize_with :active
106     get :index, params: {
107       count: 'bogus',
108     }
109     assert_response(422)
110   end
111 end