22424: Write dedicated tests for packageVersion schema
[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     AppVersion.forget
13   end
14
15   test "should get fresh discovery document" do
16     MAX_SCHEMA_AGE = 60
17     get :index
18     assert_response :success
19     discovery_doc = JSON.parse(@response.body)
20     assert_equal 'discovery#restDescription', discovery_doc['kind']
21     assert_equal(true,
22                  Time.now - MAX_SCHEMA_AGE.seconds < discovery_doc['generatedAt'],
23                  "discovery document was generated >#{MAX_SCHEMA_AGE}s ago")
24   end
25
26   test "discovery document fields" do
27     get :index
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'])
37   end
38
39   test "discovery document overrides source_version & sourceVersion with config" do
40     Rails.configuration.source_version = 'aaa888fff'
41     get :index
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']
47   end
48
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)
52       get :index
53       assert_response :success
54       assert_equal(pkg_version, json_response["packageVersion"])
55     end
56   end
57
58   test "discovery document overrides packageVersion with config" do
59     Rails.configuration.package_version = '1.0.0-stable'
60     get :index
61     assert_response :success
62     discovery_doc = JSON.parse(@response.body)
63     assert_equal '1.0.0-stable', discovery_doc['packageVersion']
64   end
65
66   test "empty disable_api_methods" do
67     get :index
68     assert_response :success
69     discovery_doc = JSON.parse(@response.body)
70     assert_equal('POST',
71                  discovery_doc['resources']['collections']['methods']['create']['httpMethod'])
72   end
73
74   test "non-empty disable_api_methods" do
75     Rails.configuration.API.DisabledAPIs = ConfigLoader.to_OrderedOptions(
76       {'collections.create'=>{}, 'workflows.create'=>{}})
77     get :index
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')
82     end
83   end
84
85   test "groups contents parameters" do
86     get :index
87     assert_response :success
88
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
92
93     assert_equal(
94       group_contents_params & group_index_params, group_index_params,
95       "group contents methods does not take all the same parameters index does",
96     )
97
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']
102   end
103
104   test "collections index parameters" do
105     get :index
106     assert_response :success
107
108     discovery_doc = JSON.parse(@response.body)
109
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']
112
113     assert_equal (workflows_index_params.keys + ['include_trash', 'include_old_versions']).sort, coll_index_params.keys.sort
114
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']
119   end
120 end