Merge branch '4389-breadcrumbs-infinite-loop' closes #4389
[arvados.git] / apps / workbench / test / functional / projects_controller_test.rb
index 01ccf186762e59e71192856044ed4d61302833e5..93f794d900c1af5d597c5a8ff45879de48236662 100644 (file)
@@ -4,14 +4,16 @@ class ProjectsControllerTest < ActionController::TestCase
   test "invited user is asked to sign user agreements on front page" do
     get :index, {}, session_for(:inactive)
     assert_response :redirect
-    assert_equal(user_agreements_url, @response.redirect_url,
+    assert_match(/^#{Regexp.escape(user_agreements_url)}\b/,
+                 @response.redirect_url,
                  "Inactive user was not redirected to user_agreements page")
   end
 
   test "uninvited user is asked to wait for activation" do
     get :index, {}, session_for(:inactive_uninvited)
     assert_response :redirect
-    assert_equal(inactive_users_url, @response.redirect_url,
+    assert_match(/^#{Regexp.escape(inactive_users_url)}\b/,
+                 @response.redirect_url,
                  "Uninvited user was not redirected to inactive user page")
   end
 
@@ -91,6 +93,35 @@ class ProjectsControllerTest < ActionController::TestCase
     refute user_can_manage(:project_viewer, "asubproject")
   end
 
+  test "subproject_admin can_manage asubproject" do
+    assert user_can_manage(:subproject_admin, "asubproject")
+  end
+
+  test "detect ownership loop in project breadcrumbs" do
+    # This test has an arbitrary time limit -- otherwise we'd just sit
+    # here forever instead of reporting that the loop was not
+    # detected. The test passes quickly, but fails slowly.
+    Timeout::timeout 10 do
+      get(:show,
+          { id: api_fixture("groups")["project_owns_itself"]["uuid"] },
+          session_for(:admin))
+    end
+    assert_response :success
+  end
+
+  test "project admin can remove items from the project" do
+    coll_key = "collection_to_remove_from_subproject"
+    coll_uuid = api_fixture("collections")[coll_key]["uuid"]
+    delete(:remove_item,
+           { id: api_fixture("groups")["asubproject"]["uuid"],
+             item_uuid: coll_uuid,
+             format: "js" },
+           session_for(:subproject_admin))
+    assert_response :success
+    assert_match(/\b#{coll_uuid}\b/, @response.body,
+                 "removed object not named in response")
+  end
+
   test 'projects#show tab infinite scroll partial obeys limit' do
     get_contents_rows(limit: 1, filters: [['uuid','is_a',['arvados#job']]])
     assert_response :success