X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2255281ed7406e7c10027ed778f53ee28e6869fa..85c625c40ad873d0efac33f8a63c1ee256185e36:/apps/workbench/test/controllers/application_controller_test.rb diff --git a/apps/workbench/test/controllers/application_controller_test.rb b/apps/workbench/test/controllers/application_controller_test.rb index ef2a989427..72c3e0ab0c 100644 --- a/apps/workbench/test/controllers/application_controller_test.rb +++ b/apps/workbench/test/controllers/application_controller_test.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'test_helper' class ApplicationControllerTest < ActionController::TestCase @@ -321,32 +325,63 @@ class ApplicationControllerTest < ActionController::TestCase # Each pdh has more than one collection; however, we should get only one for each assert collections.size == 2, 'Expected two objects in the preloaded collection hash' assert collections[pdh1], 'Expected collections for the passed in pdh #{pdh1}' - assert_equal collections[pdh1].size, 1, 'Expected one collection for the passed in pdh #{pdh1}' + assert_equal collections[pdh1].size, 1, "Expected one collection for the passed in pdh #{pdh1}" assert collections[pdh2], 'Expected collections for the passed in pdh #{pdh2}' - assert_equal collections[pdh2].size, 1, 'Expected one collection for the passed in pdh #{pdh2}' + assert_equal collections[pdh2].size, 1, "Expected one collection for the passed in pdh #{pdh2}" end test "requesting a nonexistent object returns 404" do # We're really testing ApplicationController's find_object_by_uuid. # It's easiest to do that by instantiating a concrete controller. @controller = NodesController.new - get(:show, {id: "zzzzz-zzzzz-zzzzzzzzzzzzzzz"}, session_for(:admin)) + get(:show, params: {id: "zzzzz-zzzzz-zzzzzzzzzzzzzzz"}, session: session_for(:admin)) assert_response 404 end + test "requesting to the API server includes X-Request-Id header" do + got_header = nil + stub_api_calls + stub_api_client.stubs(:post).with do |url, query, header={}| + got_header = header + true + end.returns fake_api_response('{}', 200, {}) + + Rails.configuration.Users.AnonymousUserToken = + api_fixture("api_client_authorizations", "anonymous", "api_token") + @controller = ProjectsController.new + test_uuid = "zzzzz-j7d0g-zzzzzzzzzzzzzzz" + get(:show, params: {id: test_uuid}) + + assert_not_nil got_header + assert_includes got_header, 'X-Request-Id' + assert_match /^req-[0-9a-zA-Z]{20}$/, got_header["X-Request-Id"] + end + + test "current request_id is nil after a request" do + @controller = NodesController.new + get(:index, params: {}, session: session_for(:active)) + assert_nil Thread.current[:request_id] + end + + test "X-Request-Id header" do + @controller = NodesController.new + get(:index, params: {}, session: session_for(:active)) + assert_match /^req-[0-9a-zA-Z]{20}$/, response.headers['X-Request-Id'] + end + [".navbar .login-menu a", ".navbar .login-menu .dropdown-menu a" ].each do |css_selector| test "login link at #{css_selector.inspect} includes return_to param" do # Without an anonymous token, we're immediately redirected to login. - Rails.configuration.anonymous_user_token = + Rails.configuration.Users.AnonymousUserToken = api_fixture("api_client_authorizations", "anonymous", "api_token") @controller = ProjectsController.new test_uuid = "zzzzz-j7d0g-zzzzzzzzzzzzzzz" - get(:show, {id: test_uuid}) + get(:show, params: {id: test_uuid}) login_link = css_select(css_selector).first assert_not_nil(login_link, "failed to select login link") - login_href = URI.unescape(login_link.attributes["href"]) + login_href = URI.unescape(login_link.attributes["href"].value) # The parameter needs to include the full URL to work. assert_includes(login_href, "://") assert_match(/[\?&]return_to=[^&]*\/projects\/#{test_uuid}(&|$)/, @@ -358,17 +393,17 @@ class ApplicationControllerTest < ActionController::TestCase # We're really testing ApplicationController's render_exception. # Our primary concern is that it doesn't raise an error and # return 500. - orig_api_server = Rails.configuration.arvados_v1_base + orig_api_server = Rails.configuration.Services.Controller.ExternalURL begin # The URL should look valid in all respects, and avoid talking over a # network. 100::/64 is the IPv6 discard prefix, so it's perfect. - Rails.configuration.arvados_v1_base = "https://[100::f]:1/" + Rails.configuration.Services.Controller.ExternalURL = "https://[100::f]:1/" @controller = NodesController.new - get(:index, {}, session_for(:active)) + get(:index, params: {}, session: session_for(:active)) assert_includes(405..422, @response.code.to_i, "bad response code when API server is unreachable") ensure - Rails.configuration.arvados_v1_base = orig_api_server + Rails.configuration.Services.Controller.ExternalURL = orig_api_server end end @@ -384,16 +419,16 @@ class ApplicationControllerTest < ActionController::TestCase [ProjectsController.new, api_fixture('groups')['anonymously_accessible_project']], [ProjectsController.new, api_fixture('groups')['anonymously_accessible_project'], false], ].each do |controller, fixture, anon_config=true| - test "#{controller} show method with anonymous config enabled" do + test "#{controller} show method with anonymous config #{anon_config ? '' : 'not '}enabled" do if anon_config - Rails.configuration.anonymous_user_token = api_fixture('api_client_authorizations')['anonymous']['api_token'] + Rails.configuration.Users.AnonymousUserToken = api_fixture('api_client_authorizations')['anonymous']['api_token'] else - Rails.configuration.anonymous_user_token = false + Rails.configuration.Users.AnonymousUserToken = "" end @controller = controller - get(:show, {id: fixture['uuid']}) + get(:show, params: {id: fixture['uuid']}) if anon_config assert_response 200 @@ -414,10 +449,10 @@ class ApplicationControllerTest < ActionController::TestCase false, ].each do |config| test "invoke show with include_accept_encoding_header config #{config}" do - Rails.configuration.include_accept_encoding_header_in_api_requests = config + Rails.configuration.APIResponseCompression = config @controller = CollectionsController.new - get(:show, {id: api_fixture('collections')['foo_file']['uuid']}, session_for(:admin)) + get(:show, params: {id: api_fixture('collections')['foo_file']['uuid']}, session: session_for(:admin)) assert_equal([['.', 'foo', 3]], assigns(:object).files) end @@ -426,13 +461,13 @@ class ApplicationControllerTest < ActionController::TestCase test 'Edit name and verify that a duplicate is not created' do @controller = ProjectsController.new project = api_fixture("groups")["aproject"] - post :update, { + post :update, params: { id: project["uuid"], project: { name: 'test name' }, format: :json - }, session_for(:active) + }, session: session_for(:active) assert_includes @response.body, 'test name' updated = assigns(:object) assert_equal updated.uuid, project["uuid"] @@ -446,7 +481,7 @@ class ApplicationControllerTest < ActionController::TestCase test "access #{controller.controller_name} index as admin and verify Home link is#{' not' if !expect_home_link} shown" do @controller = controller - get :index, {}, session_for(:admin) + get :index, params: {}, session: session_for(:admin) assert_response 200 assert_includes @response.body, expect_str @@ -468,7 +503,7 @@ class ApplicationControllerTest < ActionController::TestCase test "access #{controller.controller_name} index as admin and verify Delete option is#{' not' if !expect_delete_link} shown" do @controller = controller - get :index, {}, session_for(:admin) + get :index, params: {}, session: session_for(:admin) assert_response 200 assert_includes @response.body, expect_str