1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: AGPL-3.0
7 class UsersControllerTest < ActionController::TestCase
9 test "valid token works in controller test" do
10 get :index, {}, session_for(:active)
11 assert_response :success
14 test "ignore previously valid token (for deleted user), don't crash" do
15 get :activity, {}, session_for(:valid_token_deleted_user)
16 assert_response :redirect
17 assert_match /^#{Rails.configuration.arvados_login_base}/, @response.redirect_url
18 assert_nil assigns(:my_jobs)
19 assert_nil assigns(:my_ssh_keys)
22 test "expired token redirects to api server login" do
24 id: api_fixture('users')['active']['uuid']
25 }, session_for(:expired_trustedclient)
26 assert_response :redirect
27 assert_match /^#{Rails.configuration.arvados_login_base}/, @response.redirect_url
28 assert_nil assigns(:my_jobs)
29 assert_nil assigns(:my_ssh_keys)
32 test "show welcome page if no token provided" do
34 assert_response :redirect
35 assert_match /\/users\/welcome/, @response.redirect_url
38 test "show repositories with read, write, or manage permission" do
39 get :repositories, {id: api_fixture("users")['active']['uuid']}, session_for(:active)
40 assert_response :success
41 repos = assigns(:my_repositories)
43 assert_not_empty repos, "my_repositories should not be empty"
44 editables = repos.collect { |r| !!assigns(:repo_writable)[r.uuid] }
45 assert_includes editables, true, "should have a writable repository"
46 assert_includes editables, false, "should have a readonly repository"
49 test "show repositories lists linked as well as owned repositories" do
50 get :repositories, {id: api_fixture("users")['active']['uuid']}, session_for(:active)
51 assert_response :success
52 repos = assigns(:my_repositories)
54 assert_not_empty repos, "my_repositories should not be empty"
55 repo_uuids = repos.map(&:uuid)
56 assert_includes repo_uuids, api_fixture('repositories')['repository2']['uuid'] # owned by active
57 assert_includes repo_uuids, api_fixture('repositories')['repository4']['uuid'] # shared with active
58 assert_includes repo_uuids, api_fixture('repositories')['arvados']['uuid'] # shared with all_users
61 test "request shell access" do
62 user = api_fixture('users')['spectator']
64 ActionMailer::Base.deliveries = []
66 post :request_shell_access, {
69 }, session_for(:spectator)
70 assert_response :success
72 full_name = "#{user['first_name']} #{user['last_name']}"
73 expected = "Shell account request from #{full_name} (#{user['email']}, #{user['uuid']})"
75 ActionMailer::Base.deliveries.each do |email|
76 if email.subject.include?(expected)
81 assert_equal 1, found_email, "Expected 1 email after requesting shell access"
88 test "access users page as #{username} and verify show button is available" do
89 admin_user = api_fixture('users','admin')
90 active_user = api_fixture('users','active')
91 get :index, {}, session_for(username)
92 if username == 'admin'
93 assert_match /<a href="\/projects\/#{admin_user['uuid']}">Home<\/a>/, @response.body
94 assert_match /<a href="\/projects\/#{active_user['uuid']}">Home<\/a>/, @response.body
95 assert_match /href="\/users\/#{admin_user['uuid']}" title="show user"><i class="fa fa-fw fa-user"><\/i> Show<\/a/, @response.body
96 assert_match /href="\/users\/#{active_user['uuid']}" title="show user"><i class="fa fa-fw fa-user"><\/i> Show<\/a/, @response.body
97 assert_includes @response.body, admin_user['email']
98 assert_includes @response.body, active_user['email']
100 refute_match /Home<\/a>/, @response.body
101 refute_match /href="\/users\/#{admin_user['uuid']}" title="show user"><i class="fa fa-fw fa-user"><\/i> Show<\/a/, @response.body
102 assert_match /href="\/users\/#{active_user['uuid']}" title="show user"><i class="fa fa-fw fa-user"><\/i> Show<\/a/, @response.body
103 assert_includes @response.body, active_user['email']
112 test "access settings drop down menu as #{username}" do
113 admin_user = api_fixture('users','admin')
114 active_user = api_fixture('users','active')
116 id: api_fixture('users')[username]['uuid']
117 }, session_for(username)
118 if username == 'admin'
119 assert_includes @response.body, admin_user['email']
120 refute_empty css_select('[id="system-menu"]')
122 assert_includes @response.body, active_user['email']
123 assert_empty css_select('[id="system-menu"]')