Merge branch 'patch-1' of https://github.com/mr-c/arvados into mr-c-patch-1
[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   [{}, {count: nil}, {count: ''}, {count: 'exact'}].each do |params|
84     test "count items_available if params=#{params.inspect}" do
85       @controller = Arvados::V1::LinksController.new
86       authorize_with :active
87       get :index, params: params
88       assert_response(:success)
89       assert_operator(json_response['items_available'], :>, 0)
90     end
91   end
92
93   test 'error if count=bogus' do
94     @controller = Arvados::V1::LinksController.new
95     authorize_with :active
96     get :index, params: {
97       count: 'bogus',
98     }
99     assert_response(422)
100   end
101 end