require 'test_helper'
class ProjectsControllerTest < ActionController::TestCase
- test "inactive user is asked to sign user agreements on front page" do
+ test "invited user is asked to sign user agreements on front page" do
get :index, {}, session_for(:inactive)
- assert_response :success
- assert_not_empty assigns(:required_user_agreements),
- "Inactive user did not have required_user_agreements"
- assert_template 'user_agreements/index',
- "Inactive user was not presented with a user agreement at the front page"
+ assert_response :redirect
+ 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_match(/^#{Regexp.escape(inactive_users_url)}\b/,
+ @response.redirect_url,
+ "Uninvited user was not redirected to inactive user page")
end
[[:active, true],
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
"Did not get exactly one row")
end
- test 'projects#show tab infinite scroll partial does not group object types' do
+ ['', ' asc', ' desc'].each do |direction|
+ test "projects#show tab partial orders correctly by #{direction}" do
+ _test_tab_content_order direction
+ end
+ end
+
+ def _test_tab_content_order direction
get_contents_rows(limit: 100,
+ order: "created_at#{direction}",
filters: [['uuid','is_a',['arvados#job',
'arvados#pipelineInstance']]])
assert_response :success
found_timestamps = 0
tr_tag.scan(/\ data-object-created-at=\"(.*?)\"/).each do |t,|
if last_timestamp
- assert_operator(last_timestamp, :>=, t,
- "Rows are not sorted by timestamp desc")
+ correct_operator = / desc$/ =~ direction ? :>= : :<=
+ assert_operator(last_timestamp, correct_operator, t,
+ "Rows are not sorted by created_at#{direction}")
end
last_timestamp = t
found_timestamps += 1