X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/fad046d56740092b1483cb646d2f7c92c544c165..2e8aee62b13edd8eac34ac8536d41992c7adbf69:/apps/workbench/test/functional/projects_controller_test.rb diff --git a/apps/workbench/test/functional/projects_controller_test.rb b/apps/workbench/test/functional/projects_controller_test.rb index ff569286ee..d76430cfdf 100644 --- a/apps/workbench/test/functional/projects_controller_test.rb +++ b/apps/workbench/test/functional/projects_controller_test.rb @@ -1,13 +1,20 @@ 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], @@ -38,17 +45,20 @@ class ProjectsControllerTest < ActionController::TestCase format: "json"}, session_for(:active)) assert_response :success - json_response = Oj.load(@response.body) assert_equal(uuid_list, json_response["success"]) end test "user with project read permission can't add permissions" do + share_uuid = api_fixture("users")["spectator"]["uuid"] post(:share_with, { id: api_fixture("groups")["aproject"]["uuid"], - uuids: [api_fixture("users")["spectator"]["uuid"]], + uuids: [share_uuid], format: "json"}, session_for(:project_viewer)) assert_response 422 + assert(json_response["errors"].andand. + any? { |msg| msg.start_with?("#{share_uuid}: ") }, + "JSON response missing properly formatted sharing error") end def user_can_manage(user_sym, group_key) @@ -82,4 +92,74 @@ class ProjectsControllerTest < ActionController::TestCase test "viewer can't manage asubproject" do refute user_can_manage(:project_viewer, "asubproject") 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 + assert_equal(1, json_response['content'].scan(']+>/ do |tr_tag| + found_timestamps = 0 + tr_tag.scan(/\ data-object-created-at=\"(.*?)\"/).each do |t,| + if last_timestamp + 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 + end + assert_equal(1, found_timestamps, + "Content row did not have exactly one timestamp") + + # Confirm that the test for timestamp ordering couldn't have + # passed merely because the test fixtures have convenient + # timestamps (e.g., there is only one pipeline and one job in + # the project being tested, or there are no pipelines at all in + # the project being tested): + tr_tag.scan /\ data-kind=\"(.*?)\"/ do |kind| + if last_kind and last_kind != kind and found_kind[kind] + # We saw this kind before, then a different kind, then + # this kind again. That means objects are not grouped by + # kind. + not_grouped_by_kind = true + end + found_kind[kind] ||= 0 + found_kind[kind] += 1 + last_kind = kind + end + end + assert_equal(true, not_grouped_by_kind, + "Could not confirm that results are not grouped by kind") + end + + def get_contents_rows params + params = { + id: api_fixture('users')['active']['uuid'], + partial: :contents_rows, + format: :json, + }.merge(params) + encoded_params = Hash[params.map { |k,v| + [k, (v.is_a?(Array) || v.is_a?(Hash)) ? v.to_json : v] + }] + get :show, encoded_params, session_for(:active) + end end