X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/f12350f25275fbf4c6c8692122f5eacce89794ee..dd9651140d782919e475a6252e4c770c46d96252:/services/api/test/functional/arvados/v1/links_controller_test.rb diff --git a/services/api/test/functional/arvados/v1/links_controller_test.rb b/services/api/test/functional/arvados/v1/links_controller_test.rb index b4b78168f2..4ae3745550 100644 --- a/services/api/test/functional/arvados/v1/links_controller_test.rb +++ b/services/api/test/functional/arvados/v1/links_controller_test.rb @@ -1,18 +1,26 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'test_helper' class Arvados::V1::LinksControllerTest < ActionController::TestCase - test "no symbol keys in serialized hash" do - link = { - properties: {username: 'testusername'}, - link_class: 'test', - name: 'encoding', - tail_uuid: users(:admin).uuid, - head_uuid: virtual_machines(:testvm).uuid - } - authorize_with :admin - [link, link.to_json].each do |formatted_link| - post :create, link: formatted_link + ['link', 'link_json'].each do |formatted_link| + test "no symbol keys in serialized hash #{formatted_link}" do + link = { + properties: {username: 'testusername'}, + link_class: 'test', + name: 'encoding', + tail_uuid: users(:admin).uuid, + head_uuid: virtual_machines(:testvm).uuid + } + authorize_with :admin + if formatted_link == 'link_json' + post :create, link: link.to_json + else + post :create, link: link + end assert_response :success assert_not_nil assigns(:object) assert_equal 'testusername', assigns(:object).properties['username'] @@ -118,7 +126,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase link_class: 'test', name: 'stuff', head_uuid: users(:active).uuid, - tail_uuid: virtual_machines(:testvm2).uuid + tail_uuid: authorized_keys(:admin).uuid, } authorize_with :active post :create, link: link @@ -133,7 +141,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| f.tail_uuid.match User.uuid_regex }).count end test "filter links with 'is_a' operator with more than one" do @@ -144,7 +152,10 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-(tpzed|j7d0g)-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| + f.tail_uuid.match User.uuid_regex or + f.tail_uuid.match Group.uuid_regex + }).count end test "filter links with 'is_a' operator with bogus type" do @@ -165,7 +176,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.head_uuid.match /.....-4zz18-.............../}).count + assert_equal found.count, (found.select { |f| f.head_uuid.match Collection.uuid_regex}).count end test "test can still use where tail_kind" do @@ -176,7 +187,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| f.tail_uuid.match User.uuid_regex }).count end test "test can still use where head_kind" do @@ -187,7 +198,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.head_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| f.head_uuid.match User.uuid_regex }).count end test "test can still use filter tail_kind" do @@ -198,7 +209,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.tail_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| f.tail_uuid.match User.uuid_regex }).count end test "test can still use filter head_kind" do @@ -209,7 +220,7 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response :success found = assigns(:objects) assert_not_equal 0, found.count - assert_equal found.count, (found.select { |f| f.head_uuid.match /[a-z0-9]{5}-tpzed-[a-z0-9]{15}/}).count + assert_equal found.count, (found.select { |f| f.head_uuid.match User.uuid_regex }).count end test "head_kind matches head_uuid" do @@ -298,8 +309,8 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_response 404 end - test "retrieve all permissions using generic links index api" do - skip "(not implemented)" + # not implemented + skip "retrieve all permissions using generic links index api" do # Links.readable_by() does not return the full set of permission # links that are visible to a user (i.e., all permission links # whose head_uuid references an object for which the user has @@ -336,4 +347,22 @@ class Arvados::V1::LinksControllerTest < ActionController::TestCase assert_not_nil assigns(:objects) assert_empty assigns(:objects) end + + # Granting permissions. + test "grant can_read on project to other users in group" do + authorize_with :user_foo_in_sharing_group + + refute users(:user_bar_in_sharing_group).can?(read: collections(:collection_owned_by_foo).uuid) + + post :create, { + link: { + tail_uuid: users(:user_bar_in_sharing_group).uuid, + link_class: 'permission', + name: 'can_read', + head_uuid: collections(:collection_owned_by_foo).uuid, + } + } + assert_response :success + assert users(:user_bar_in_sharing_group).can?(read: collections(:collection_owned_by_foo).uuid) + end end