Merge branch 'master' into 13804-no-shutdown-wanted-nodes
[arvados.git] / services / api / test / functional / arvados / v1 / schema_controller_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::SchemaControllerTest < ActionController::TestCase
8
9   setup do forget end
10   teardown do forget end
11   def forget
12     Rails.cache.delete 'arvados_v1_rest_discovery'
13     AppVersion.forget
14   end
15
16   test "should get fresh discovery document" do
17     MAX_SCHEMA_AGE = 60
18     get :index
19     assert_response :success
20     discovery_doc = JSON.parse(@response.body)
21     assert_equal 'discovery#restDescription', discovery_doc['kind']
22     assert_equal(true,
23                  Time.now - MAX_SCHEMA_AGE.seconds < discovery_doc['generatedAt'],
24                  "discovery document was generated >#{MAX_SCHEMA_AGE}s ago")
25   end
26
27   test "discovery document fields" do
28     get :index
29     assert_response :success
30     discovery_doc = JSON.parse(@response.body)
31     assert_includes discovery_doc, 'defaultTrashLifetime'
32     assert_equal discovery_doc['defaultTrashLifetime'], Rails.application.config.default_trash_lifetime
33     assert_match(/^[0-9a-f]+(-modified)?$/, discovery_doc['source_version'])
34     assert_match(/^[0-9a-f]+(-modified)?$/, discovery_doc['sourceVersion'])
35     assert_match(/^unknown$/, discovery_doc['packageVersion'])
36     assert_equal discovery_doc['websocketUrl'], Rails.application.config.websocket_address
37     assert_equal discovery_doc['workbenchUrl'], Rails.application.config.workbench_address
38     assert_equal('zzzzz', discovery_doc['uuidPrefix'])
39   end
40
41   test "discovery document overrides source_version & sourceVersion with config" do
42     Rails.configuration.source_version = 'aaa888fff'
43     get :index
44     assert_response :success
45     discovery_doc = JSON.parse(@response.body)
46     # Key source_version will be replaced with sourceVersion
47     assert_equal 'aaa888fff', discovery_doc['source_version']
48     assert_equal 'aaa888fff', discovery_doc['sourceVersion']
49   end
50
51   test "discovery document overrides packageVersion with config" do
52     Rails.configuration.package_version = '1.0.0-stable'
53     get :index
54     assert_response :success
55     discovery_doc = JSON.parse(@response.body)
56     assert_equal '1.0.0-stable', discovery_doc['packageVersion']
57   end
58
59   test "empty disable_api_methods" do
60     get :index
61     assert_response :success
62     discovery_doc = JSON.parse(@response.body)
63     assert_equal('POST',
64                  discovery_doc['resources']['jobs']['methods']['create']['httpMethod'])
65   end
66
67   test "non-empty disable_api_methods" do
68     Rails.configuration.disable_api_methods =
69       ['jobs.create', 'pipeline_instances.create', 'pipeline_templates.create']
70     get :index
71     assert_response :success
72     discovery_doc = JSON.parse(@response.body)
73     ['jobs', 'pipeline_instances', 'pipeline_templates'].each do |r|
74       refute_includes(discovery_doc['resources'][r]['methods'].keys(), 'create')
75     end
76   end
77
78   test "groups contents parameters" do
79     get :index
80     assert_response :success
81
82     discovery_doc = JSON.parse(@response.body)
83
84     group_index_params = discovery_doc['resources']['groups']['methods']['index']['parameters']
85     group_contents_params = discovery_doc['resources']['groups']['methods']['contents']['parameters']
86
87     assert_equal group_contents_params.keys.sort, (group_index_params.keys - ['select'] + ['uuid', 'recursive']).sort
88
89     recursive_param = group_contents_params['recursive']
90     assert_equal 'boolean', recursive_param['type']
91     assert_equal false, recursive_param['required']
92     assert_equal 'query', recursive_param['location']
93   end
94
95   test "collections index parameters" do
96     get :index
97     assert_response :success
98
99     discovery_doc = JSON.parse(@response.body)
100
101     specimens_index_params = discovery_doc['resources']['specimens']['methods']['index']['parameters']  # no changes from super
102     coll_index_params = discovery_doc['resources']['collections']['methods']['index']['parameters']
103
104     assert_equal coll_index_params.keys.sort, (specimens_index_params.keys + ['include_trash']).sort
105
106     include_trash_param = coll_index_params['include_trash']
107     assert_equal 'boolean', include_trash_param['type']
108     assert_equal false, include_trash_param['required']
109     assert_equal 'query', include_trash_param['location']
110   end
111 end