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