From 0d8d1ff55e2ba154b396e1879928a126745c1089 Mon Sep 17 00:00:00 2001 From: radhika Date: Thu, 11 Feb 2016 14:53:31 -0500 Subject: [PATCH] 8286: added test "unshare project and verify that it is no longer included in shared user's starred projects" --- .../app/controllers/application_controller.rb | 6 +- .../application/_projects_tree_menu.html.erb | 2 +- .../controllers/projects_controller_test.rb | 50 +++++++++++++++++ services/api/test/fixtures/groups.yml | 12 ++++ services/api/test/fixtures/links.yml | 35 ++++++++++++ .../arvados/v1/groups_controller_test.rb | 55 +++++++++++++++++++ 6 files changed, 156 insertions(+), 4 deletions(-) diff --git a/apps/workbench/app/controllers/application_controller.rb b/apps/workbench/app/controllers/application_controller.rb index 5d8f1d8e1d..61c57ae29f 100644 --- a/apps/workbench/app/controllers/application_controller.rb +++ b/apps/workbench/app/controllers/application_controller.rb @@ -453,7 +453,7 @@ class ApplicationController < ActionController::Base if params['status'] == 'create' # create 'star' link if one does not already exist if !links.andand.any? - dst = Link.new(owner_uuid: @object.uuid, + dst = Link.new(owner_uuid: current_user.uuid, tail_uuid: current_user.uuid, head_uuid: @object.uuid, link_class: 'star', @@ -870,9 +870,9 @@ class ApplicationController < ActionController::Base end helper_method :my_starred_projects - def my_starred_projects + def my_starred_projects user return if @starred_projects - links = Link.filter([['tail_uuid', '=', current_user.uuid], + links = Link.filter([['tail_uuid', '=', user.uuid], ['link_class', '=', 'star'], ['head_uuid', 'is_a', 'arvados#group']]).select(%w(head_uuid)) uuids =links.collect { |x| x.head_uuid } diff --git a/apps/workbench/app/views/application/_projects_tree_menu.html.erb b/apps/workbench/app/views/application/_projects_tree_menu.html.erb index 7eefc66a6f..221d9a28a0 100644 --- a/apps/workbench/app/views/application/_projects_tree_menu.html.erb +++ b/apps/workbench/app/views/application/_projects_tree_menu.html.erb @@ -6,7 +6,7 @@ Home <% end %> -<% my_starred_projects.each do |pnode| %> +<% (my_starred_projects current_user).each do |pnode| %>
  • <%= project_link_to.call({object: pnode, depth: 0}) do%> <%= pnode[:name] %> diff --git a/apps/workbench/test/controllers/projects_controller_test.rb b/apps/workbench/test/controllers/projects_controller_test.rb index 8fa9fe9a81..643aaae6c9 100644 --- a/apps/workbench/test/controllers/projects_controller_test.rb +++ b/apps/workbench/test/controllers/projects_controller_test.rb @@ -418,4 +418,54 @@ class ProjectsControllerTest < ActionController::TestCase }, session_for(:active) assert_select "#projects-menu + ul li.divider ~ li a[href=/projects/#{project_uuid}]" end + + [ + ["active", 1], + ["project_viewer", 1], + ["admin", 0], + ].each do |user, size| + test "starred projects for #{user}" do + use_token user + ctrl = ProjectsController.new + current_user = User.find(api_fixture('users')[user]['uuid']) + my_starred_project = ctrl.send :my_starred_projects, current_user + assert_equal(size, my_starred_project.andand.size) + + ctrl2 = ProjectsController.new + current_user = User.find(api_fixture('users')[user]['uuid']) + my_starred_project = ctrl2.send :my_starred_projects, current_user + assert_equal(size, my_starred_project.andand.size) + end + end + + test "unshare project and verify that it is no longer included in shared user's starred projects" do + # remove sharing link + use_token :system_user + Link.find(api_fixture('links')['share_starred_project_with_project_viewer']['uuid']).destroy + + # verify that project is no longer included in starred projects + use_token :project_viewer + current_user = User.find(api_fixture('users')['project_viewer']['uuid']) + ctrl = ProjectsController.new + my_starred_project = ctrl.send :my_starred_projects, current_user + assert_equal(0, my_starred_project.andand.size) + + # share it again + @controller = LinksController.new + post :create, { + link: { + link_class: 'permission', + name: 'can_read', + head_uuid: api_fixture('groups')['starred_and_shared_active_user_project']['uuid'], + tail_uuid: api_fixture('users')['project_viewer']['uuid'], + }, + format: :json + }, session_for(:system_user) + + # verify that the project is again included in starred projects + use_token :project_viewer + ctrl = ProjectsController.new + my_starred_project = ctrl.send :my_starred_projects, current_user + assert_equal(1, my_starred_project.andand.size) + end end diff --git a/services/api/test/fixtures/groups.yml b/services/api/test/fixtures/groups.yml index f6b99a0661..4029846484 100644 --- a/services/api/test/fixtures/groups.yml +++ b/services/api/test/fixtures/groups.yml @@ -282,3 +282,15 @@ subproject_in_asubproject_with_same_name_as_one_in_active_user_home: name: Subproject to test owner uuid and name unique key violation upon removal description: "Removing this will result in name conflict with 'A project' in Home project and hence get renamed." group_class: project + +starred_and_shared_active_user_project: + uuid: zzzzz-j7d0g-starredshared01 + owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz + created_at: 2014-04-21 15:37:48 -0400 + modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr + modified_by_user_uuid: zzzzz-tpzed-xurymjxw79nv3jz + modified_at: 2014-04-21 15:37:48 -0400 + updated_at: 2014-04-21 15:37:48 -0400 + name: Starred and shared active user project + description: Starred and shared active user project + group_class: project diff --git a/services/api/test/fixtures/links.yml b/services/api/test/fixtures/links.yml index 925e466124..7ed7f6bcf3 100644 --- a/services/api/test/fixtures/links.yml +++ b/services/api/test/fixtures/links.yml @@ -920,3 +920,38 @@ empty_collection_name_in_fuse_user_home_project: properties: {} updated_at: 2014-08-06 22:11:51.242010312 Z +star_project_for_active_user: + uuid: zzzzz-o0j2j-starredbyactive + owner_uuid: zzzzz-tpzed-xurymjxw79nv3jz + created_at: 2014-01-24 20:42:26 -0800 + modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr + modified_by_user_uuid: zzzzz-tpzed-000000000000000 + modified_at: 2014-01-24 20:42:26 -0800 + updated_at: 2014-01-24 20:42:26 -0800 + tail_uuid: zzzzz-tpzed-xurymjxw79nv3jz + link_class: star + name: zzzzz-j7d0g-starredshared01 + head_uuid: zzzzz-j7d0g-starredshared01 + properties: {} + +share_starred_project_with_project_viewer: + uuid: zzzzz-o0j2j-sharewithviewer + owner_uuid: zzzzz-tpzed-000000000000000 + tail_uuid: zzzzz-tpzed-projectviewer1a + link_class: permission + name: can_read + head_uuid: zzzzz-j7d0g-starredshared01 + +star_shared_project_for_project_viewer: + uuid: zzzzz-o0j2j-starredbyviewer + owner_uuid: zzzzz-tpzed-projectviewer1a + created_at: 2014-01-24 20:42:26 -0800 + modified_by_client_uuid: zzzzz-ozdt8-brczlopd8u8d0jr + modified_by_user_uuid: zzzzz-tpzed-000000000000000 + modified_at: 2014-01-24 20:42:26 -0800 + updated_at: 2014-01-24 20:42:26 -0800 + tail_uuid: zzzzz-tpzed-projectviewer1a + link_class: star + name: zzzzz-j7d0g-starredshared01 + head_uuid: zzzzz-j7d0g-starredshared01 + properties: {} diff --git a/services/api/test/functional/arvados/v1/groups_controller_test.rb b/services/api/test/functional/arvados/v1/groups_controller_test.rb index 1d7bb77725..98c06ea43e 100644 --- a/services/api/test/functional/arvados/v1/groups_controller_test.rb +++ b/services/api/test/functional/arvados/v1/groups_controller_test.rb @@ -380,4 +380,59 @@ class Arvados::V1::GroupsControllerTest < ActionController::TestCase 'A Project (2)', "new project name '#{new_project['name']}' was expected to be 'A Project (2)'") end + + test "unsharing a project results in hiding it from previously shared user" do + # remove sharing link for project + @controller = Arvados::V1::LinksController.new + authorize_with :admin + post :destroy, id: links(:share_starred_project_with_project_viewer).uuid + assert_response :success + + # verify that the user can no longer see the project + @counter = 0 # Reset executed action counter + @controller = Arvados::V1::GroupsController.new + authorize_with :project_viewer + get :index, filters: [['group_class', '=', 'project']], format: :json + assert_response :success + found_projects = {} + json_response['items'].each do |g| + found_projects[g['uuid']] = g + end + assert_equal false, found_projects.include?(groups(:starred_and_shared_active_user_project).uuid) + + # share the project + @counter = 0 + @controller = Arvados::V1::LinksController.new + authorize_with :system_user + post :create, link: { + link_class: "permission", + name: "can_read", + head_uuid: groups(:starred_and_shared_active_user_project).uuid, + tail_uuid: users(:project_viewer).uuid, + } + + # verify that project_viewer user can now see shared project again + @counter = 0 + @controller = Arvados::V1::GroupsController.new + authorize_with :project_viewer + get :index, filters: [['group_class', '=', 'project']], format: :json + assert_response :success + found_projects = {} + json_response['items'].each do |g| + found_projects[g['uuid']] = g + end + assert_equal true, found_projects.include?(groups(:starred_and_shared_active_user_project).uuid) + end + + test "deleting a project results in deleting it's star links" do + skip "Delete is not yet supported for groups with share and other links" + + authorize_with :admin + post :destroy, id: groups(:starred_and_shared_active_user_project).uuid + assert_response :success + + @controller = Arvados::V1::LinksController.new + get :show, {id: links(:star_shared_project_for_project_viewer).uuid} + assert_response 404 + end end -- 2.30.2