X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/32038d56fbfe5b635b1c53f247aea9abcca2285c..6b88953ebd4911bc03b73bad9c354800f07ce44f:/apps/workbench/test/controllers/projects_controller_test.rb diff --git a/apps/workbench/test/controllers/projects_controller_test.rb b/apps/workbench/test/controllers/projects_controller_test.rb index d7fb8f2a00..7848444efd 100644 --- a/apps/workbench/test/controllers/projects_controller_test.rb +++ b/apps/workbench/test/controllers/projects_controller_test.rb @@ -239,7 +239,7 @@ class ProjectsControllerTest < ActionController::TestCase Rails.configuration.anonymous_user_token = api_fixture('api_client_authorizations')['anonymous']['api_token'] get(:show, {id: api_fixture('groups')['aproject']['uuid']}) assert_response 404 - assert_includes @response.inspect, 'you are not logged in' + assert_match(/log ?in/i, @response.body) end test "visit home page as anonymous when anonymous browsing is enabled and expect login" do @@ -267,6 +267,7 @@ class ProjectsControllerTest < ActionController::TestCase project_names = assigns(:objects).collect(&:name) assert_includes project_names, 'Unrestricted public data' assert_not_includes project_names, 'A Project' + refute_empty css_select('[href="/projects/public"]') end end @@ -275,9 +276,254 @@ class ProjectsControllerTest < ActionController::TestCase assert_response 404 end + test "visit public projects page when anon config is enabled but public projects page is disabled as active user and expect 404" do + Rails.configuration.anonymous_user_token = api_fixture('api_client_authorizations')['anonymous']['api_token'] + Rails.configuration.enable_public_projects_page = false + get :public, {}, session_for(:active) + assert_response 404 + end + test "visit public projects page when anon config is not enabled as anonymous and expect login page" do get :public assert_response :redirect assert_match /\/users\/welcome/, @response.redirect_url + assert_empty css_select('[href="/projects/public"]') + end + + test "visit public projects page when anon config is enabled and public projects page is disabled and expect login page" do + Rails.configuration.anonymous_user_token = api_fixture('api_client_authorizations')['anonymous']['api_token'] + Rails.configuration.enable_public_projects_page = false + get :index + assert_response :redirect + assert_match /\/users\/welcome/, @response.redirect_url + assert_empty css_select('[href="/projects/public"]') + end + + test "visit public projects page when anon config is not enabled and public projects page is enabled and expect login page" do + Rails.configuration.enable_public_projects_page = true + get :index + assert_response :redirect + assert_match /\/users\/welcome/, @response.redirect_url + assert_empty css_select('[href="/projects/public"]') + end + + test "find a project and edit its description" do + project = api_fixture('groups')['aproject'] + use_token :active + found = Group.find(project['uuid']) + found.description = 'test description update' + found.save! + get(:show, {id: project['uuid']}, session_for(:active)) + assert_includes @response.body, 'test description update' + end + + test "find a project and edit description to textile description" do + project = api_fixture('groups')['aproject'] + use_token :active + found = Group.find(project['uuid']) + found.description = '*test bold description for textile formatting*' + found.save! + get(:show, {id: project['uuid']}, session_for(:active)) + assert_includes @response.body, 'test bold description for textile formatting' + end + + test "find a project and edit description to html description" do + project = api_fixture('groups')['aproject'] + use_token :active + found = Group.find(project['uuid']) + found.description = 'Textile description with link to home page take me home.' + found.save! + get(:show, {id: project['uuid']}, session_for(:active)) + assert_includes @response.body, 'Textile description with link to home page take me home.' + end + + test "find a project and edit description to textile description with link to object" do + project = api_fixture('groups')['aproject'] + use_token :active + found = Group.find(project['uuid']) + + # uses 'Link to object' as a hyperlink for the object + found.description = '"Link to object":' + api_fixture('groups')['asubproject']['uuid'] + found.save! + get(:show, {id: project['uuid']}, session_for(:active)) + + # check that input was converted to textile, not staying as inputted + refute_includes @response.body,'"Link to object"' + refute_empty css_select('[href="/groups/zzzzz-j7d0g-axqo7eu9pwvna1x"]') + end + + test "project viewer can't see project sharing tab" do + project = api_fixture('groups')['aproject'] + get(:show, {id: project['uuid']}, session_for(:project_viewer)) + refute_includes @response.body, '
Public Projects" + end + + test 'all_projects unaffected by params after use by ProjectsController (#6640)' do + @controller = ProjectsController.new + project_uuid = api_fixture('groups')['aproject']['uuid'] + get :index, { + filters: [['uuid', '<', project_uuid]].to_json, + limit: 0, + offset: 1000, + }, session_for(:active) + assert_select "#projects-menu + ul li.divider ~ li a[href=/projects/#{project_uuid}]" + end + + [ + ["active", 5, ["aproject", "asubproject"], "anonymously_accessible_project"], + ["user1_with_load", 2, ["project_with_10_collections"], "project_with_2_pipelines_and_60_crs"], + ["admin", 5, ["anonymously_accessible_project", "subproject_in_anonymous_accessible_project"], "aproject"], + ].each do |user, page_size, tree_segment, unexpected| + test "build my projects tree for #{user} user and verify #{unexpected} is omitted" do + use_token user + ctrl = ProjectsController.new + + current_user = User.find(api_fixture('users')[user]['uuid']) + + my_tree = ctrl.send :my_wanted_projects_tree, current_user, page_size + + tree_segment_at_depth_1 = api_fixture('groups')[tree_segment[0]] + tree_segment_at_depth_2 = api_fixture('groups')[tree_segment[1]] if tree_segment[1] + + tree_nodes = {} + my_tree[0].each do |x| + tree_nodes[x[:object]['uuid']] = x[:depth] + end + + assert_equal(1, tree_nodes[tree_segment_at_depth_1['uuid']]) + assert_equal(2, tree_nodes[tree_segment_at_depth_2['uuid']]) if tree_segment[1] + + unexpected_project = api_fixture('groups')[unexpected] + assert_nil(tree_nodes[unexpected_project['uuid']]) + end + 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