1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
7 class Arvados::V1::SchemaControllerTest < ActionController::TestCase
10 teardown do forget end
15 test "should get fresh discovery document" do
18 assert_response :success
19 discovery_doc = JSON.parse(@response.body)
20 assert_equal 'discovery#restDescription', discovery_doc['kind']
22 Time.now - MAX_SCHEMA_AGE.seconds < discovery_doc['generatedAt'],
23 "discovery document was generated >#{MAX_SCHEMA_AGE}s ago")
26 test "discovery document fields" do
28 assert_response :success
29 discovery_doc = JSON.parse(@response.body)
30 assert_includes discovery_doc, 'defaultTrashLifetime'
31 assert_equal discovery_doc['defaultTrashLifetime'], Rails.configuration.Collections.DefaultTrashLifetime
32 assert_match(/^[0-9a-f]+(-modified)?$/, discovery_doc['source_version'])
33 assert_match(/^[0-9a-f]+(-modified)?$/, discovery_doc['sourceVersion'])
34 assert_equal discovery_doc['websocketUrl'], Rails.configuration.Services.Websocket.ExternalURL.to_s
35 assert_equal discovery_doc['workbenchUrl'], Rails.configuration.Services.Workbench1.ExternalURL.to_s
36 assert_equal('zzzzz', discovery_doc['uuidPrefix'])
39 test "discovery document overrides source_version & sourceVersion with config" do
40 Rails.configuration.source_version = 'aaa888fff'
42 assert_response :success
43 discovery_doc = JSON.parse(@response.body)
44 # Key source_version will be replaced with sourceVersion
45 assert_equal 'aaa888fff', discovery_doc['source_version']
46 assert_equal 'aaa888fff', discovery_doc['sourceVersion']
49 ["unknown", "1.0.1-stable"].each do |pkg_version|
50 test "packageVersion #{pkg_version} comes from AppVersion" do
51 AppVersion.stubs(:package_version).returns(pkg_version)
53 assert_response :success
54 assert_equal(pkg_version, json_response["packageVersion"])
58 test "discovery document overrides packageVersion with config" do
59 Rails.configuration.package_version = '1.0.0-stable'
61 assert_response :success
62 discovery_doc = JSON.parse(@response.body)
63 assert_equal '1.0.0-stable', discovery_doc['packageVersion']
66 test "empty disable_api_methods" do
68 assert_response :success
69 discovery_doc = JSON.parse(@response.body)
71 discovery_doc['resources']['collections']['methods']['create']['httpMethod'])
74 test "non-empty disable_api_methods" do
75 Rails.configuration.API.DisabledAPIs = ConfigLoader.to_OrderedOptions(
76 {'collections.create'=>{}, 'workflows.create'=>{}})
78 assert_response :success
79 discovery_doc = JSON.parse(@response.body)
80 ['collections', 'workflows'].each do |r|
81 refute_includes(discovery_doc['resources'][r]['methods'].keys(), 'create')
85 test "groups contents parameters" do
87 assert_response :success
89 groups_methods = JSON.parse(@response.body)['resources']['groups']['methods']
90 group_index_params = groups_methods['list']['parameters'].each_pair.to_a
91 group_contents_params = groups_methods['contents']['parameters'].each_pair.to_a
94 group_contents_params & group_index_params, group_index_params,
95 "group contents methods does not take all the same parameters index does",
98 recursive_param = groups_methods['contents']['parameters']['recursive']
99 assert_equal 'boolean', recursive_param['type']
100 assert_equal false, recursive_param['required']
101 assert_equal 'query', recursive_param['location']
104 test "collections index parameters" do
106 assert_response :success
108 discovery_doc = JSON.parse(@response.body)
110 workflows_index_params = discovery_doc['resources']['workflows']['methods']['list']['parameters'] # no changes from super
111 coll_index_params = discovery_doc['resources']['collections']['methods']['list']['parameters']
113 assert_equal (workflows_index_params.keys + ['include_trash', 'include_old_versions']).sort, coll_index_params.keys.sort
115 include_trash_param = coll_index_params['include_trash']
116 assert_equal 'boolean', include_trash_param['type']
117 assert_equal false, include_trash_param['required']
118 assert_equal 'query', include_trash_param['location']