X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/cec09589e50ced6d0b7a0d90d5ca124241d4a58a..964350f4132788e07a7ce1b159179a152e9cfcdc:/apps/workbench/test/integration/projects_test.rb diff --git a/apps/workbench/test/integration/projects_test.rb b/apps/workbench/test/integration/projects_test.rb index 5758fc7410..eb38cfd5c3 100644 --- a/apps/workbench/test/integration/projects_test.rb +++ b/apps/workbench/test/integration/projects_test.rb @@ -29,6 +29,7 @@ class ProjectsTest < ActionDispatch::IntegrationTest project_uuid = api_fixture('groups')['aproject']['uuid'] specimen_uuid = api_fixture('specimens')['owned_by_aproject_with_no_name_link']['uuid'] visit page_with_token 'active', '/projects/' + project_uuid + click_link 'Other objects' within(".selection-action-container") do within (first('tr', text: 'Specimen')) do find(".fa-pencil").click @@ -43,6 +44,7 @@ class ProjectsTest < ActionDispatch::IntegrationTest find('.editable', text: 'Now I have a new name.') end visit current_path + click_link 'Other objects' within '.selection-action-container' do find '.editable', text: 'Now I have a new name.' page.assert_no_selector '.editable', text: 'Now I have a name.' @@ -75,13 +77,74 @@ class ProjectsTest < ActionDispatch::IntegrationTest find('.modal-footer a,button', text: 'Move').click wait_for_ajax - # Wait for the page to refresh and show the new parent in Permissions panel - click_link 'Permissions' - find('.panel', text: 'Project 1234') - - assert(find('.panel', text: 'Permissions for this project are inherited by the owner or parent project'). - all('*', text: 'Project 1234').any?, + # Wait for the page to refresh and show the new parent in Sharing panel + click_link 'Sharing' + assert(page.has_link?("Project 1234"), "Project 5678 should now be inside project 1234") end + def show_project_using(auth_key, proj_key='aproject') + project_uuid = api_fixture('groups')[proj_key]['uuid'] + visit(page_with_token(auth_key, "/projects/#{project_uuid}")) + assert(page.has_text?("A Project"), "not on expected project page") + end + + def count_shares + find('#project_sharing').all('tr').size + end + + def add_share_and_check(share_type, name) + assert(page.has_no_text?(name), "project is already shared with #{name}") + start_share_count = count_shares + click_on("Share with #{share_type}") + find(".selectable", text: name).click + find(".modal-footer a,button", text: "Add").click + assert(page.has_link?(name), + "new share was not added to sharing table") + assert_equal(start_share_count + 1, count_shares, + "new share did not add row to sharing table") + end + + def modify_share_and_check(name) + start_share_count = count_shares + link_row = all("#project_sharing tr").select { |row| row.has_text?(name) } + assert_equal(1, link_row.size, "row with new permission not found") + within(link_row.first) do + click_on("Read") + select("Write", from: "share_change_level") + click_on("editable-submit") + assert(has_link?("Write"), + "failed to change access level on new share") + click_on "Revoke" + end + assert(page.has_no_text?(name), + "new share row still exists after being revoked") + assert_equal(start_share_count - 1, count_shares, + "revoking share did not remove row from sharing table") + end + + test "project viewer can't see project sharing tab" do + show_project_using("project_viewer") + assert(page.has_no_link?("Sharing"), + "read-only project user sees sharing tab") + end + + test "project owner can manage sharing for another user" do + add_user = api_fixture('users')['future_project_user'] + new_name = ["first_name", "last_name"].map { |k| add_user[k] }.join(" ") + + show_project_using("active") + click_on "Sharing" + add_share_and_check("users", new_name) + modify_share_and_check(new_name) + end + + test "project owner can manage sharing for another group" do + new_name = api_fixture('groups')['future_project_viewing_group']['name'] + + show_project_using("active") + click_on "Sharing" + add_share_and_check("groups", new_name) + modify_share_and_check(new_name) + end end