11917: Do not clear rails cache at boot time.
[arvados.git] / apps / workbench / test / controllers / users_controller_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'test_helper'
6
7 class UsersControllerTest < ActionController::TestCase
8
9   test "valid token works in controller test" do
10     get :index, {}, session_for(:active)
11     assert_response :success
12   end
13
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)
20   end
21
22   test "expired token redirects to api server login" do
23     get :show, {
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)
30   end
31
32   test "show welcome page if no token provided" do
33     get :index, {}
34     assert_response :redirect
35     assert_match /\/users\/welcome/, @response.redirect_url
36   end
37
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)
42     assert repos
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"
47   end
48
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)
53     assert repos
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
59   end
60
61   test "request shell access" do
62     user = api_fixture('users')['spectator']
63
64     ActionMailer::Base.deliveries = []
65
66     post :request_shell_access, {
67       id: user['uuid'],
68       format: 'js'
69     }, session_for(:spectator)
70     assert_response :success
71
72     full_name = "#{user['first_name']} #{user['last_name']}"
73     expected = "Shell account request from #{full_name} (#{user['email']}, #{user['uuid']})"
74     found_email = 0
75     ActionMailer::Base.deliveries.each do |email|
76       if email.subject.include?(expected)
77         found_email += 1
78         break
79       end
80     end
81     assert_equal 1, found_email, "Expected 1 email after requesting shell access"
82   end
83
84   [
85     'admin',
86     'active',
87   ].each do |username|
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']
99       else
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']
104       end
105     end
106   end
107
108   [
109     'admin',
110     'active',
111   ].each do |username|
112     test "access settings drop down menu as #{username}" do
113       admin_user = api_fixture('users','admin')
114       active_user = api_fixture('users','active')
115       get :show, {
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"]')
121       else
122         assert_includes @response.body, active_user['email']
123         assert_empty css_select('[id="system-menu"]')
124       end
125     end
126   end
127 end