X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/df9955d76e3103e747360d2c27914d79b97fdf6f..5b863886118890cc81b728a3a606ea823c836f2b:/services/api/test/integration/api_client_authorizations_scopes_test.rb diff --git a/services/api/test/integration/api_client_authorizations_scopes_test.rb b/services/api/test/integration/api_client_authorizations_scopes_test.rb index beef1953ae..dfb57496a7 100644 --- a/services/api/test/integration/api_client_authorizations_scopes_test.rb +++ b/services/api/test/integration/api_client_authorizations_scopes_test.rb @@ -1,14 +1,18 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + # The v1 API uses token scopes to control access to the REST API at the path # level. This is enforced in the base ApplicationController, making it a # functional test that we can run against many different controllers. require 'test_helper' -class Arvados::V1::ApiTokensScopeTest < ActionController::IntegrationTest +class ApiTokensScopeTest < ActionDispatch::IntegrationTest fixtures :all def v1_url(*parts) - (['arvados', 'v1'] + parts).join('/') + (['', 'arvados', 'v1'] + parts).join('/') end test "user list token can only list users" do @@ -23,12 +27,28 @@ class Arvados::V1::ApiTokensScopeTest < ActionController::IntegrationTest assert_response 403 end + test "narrow + wide scoped tokens for different users" do + get_args = [{ + reader_tokens: [api_client_authorizations(:anonymous).api_token] + }, auth(:active_userlist)] + get(v1_url('users'), *get_args) + assert_response :success + get(v1_url('users', ''), *get_args) # Add trailing slash. + assert_response :success + get(v1_url('users', 'current'), *get_args) + assert_response 403 + get(v1_url('virtual_machines'), *get_args) + assert_response 403 + end + test "specimens token can see exactly owned specimens" do get_args = [{}, auth(:active_specimens)] get(v1_url('specimens'), *get_args) assert_response 403 get(v1_url('specimens', specimens(:owned_by_active_user).uuid), *get_args) assert_response :success + head(v1_url('specimens', specimens(:owned_by_active_user).uuid), *get_args) + assert_response :success get(v1_url('specimens', specimens(:owned_by_spectator).uuid), *get_args) assert_includes(403..404, @response.status) end