Add 'sdk/java-v2/' from commit '55f103e336ca9fb8bf1720d2ef4ee8dd4e221118'
[arvados.git] / apps / workbench / test / integration / link_account_test.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 require 'integration_helper'
6 require 'webrick'
7
8 class LinkAccountTest < ActionDispatch::IntegrationTest
9   setup do
10     need_javascript
11   end
12
13   def start_sso_stub token
14     port = available_port('sso_stub')
15
16     s = WEBrick::HTTPServer.new(
17       :Port => port,
18       :BindAddress => 'localhost',
19       :Logger => WEBrick::Log.new('/dev/null', WEBrick::BasicLog::DEBUG),
20       :AccessLog => [nil,nil]
21     )
22
23     s.mount_proc("/login"){|req, res|
24       res.set_redirect(WEBrick::HTTPStatus::TemporaryRedirect, req.query["return_to"] + "&api_token=#{token}")
25       s.shutdown
26     }
27
28     s.mount_proc("/logout"){|req, res|
29       res.set_redirect(WEBrick::HTTPStatus::TemporaryRedirect, req.query["return_to"])
30     }
31
32     Thread.new do
33       s.start
34     end
35
36     "http://localhost:#{port}/"
37   end
38
39   test "Add another login to this account" do
40     visit page_with_token('active_trustedclient')
41     stub = start_sso_stub(api_fixture('api_client_authorizations')['project_viewer_trustedclient']['api_token'])
42     Rails.configuration.arvados_login_base = stub + "login"
43
44     find("#notifications-menu").click
45     assert_text "active-user@arvados.local"
46
47     find("a", text: "Link account").click
48     find("button", text: "Add another login to this account").click
49
50     find("#notifications-menu").click
51     assert_text "project-viewer@arvados.local"
52
53     find("button", text: "Link accounts").click
54
55     find("#notifications-menu").click
56     assert_text "active-user@arvados.local"
57   end
58
59   test "Use this login to access another account" do
60     visit page_with_token('project_viewer_trustedclient')
61     stub = start_sso_stub(api_fixture('api_client_authorizations')['active_trustedclient']['api_token'])
62     Rails.configuration.arvados_login_base = stub + "login"
63
64     find("#notifications-menu").click
65     assert_text "project-viewer@arvados.local"
66
67     find("a", text: "Link account").click
68     find("button", text: "Use this login to access another account").click
69
70     find("#notifications-menu").click
71     assert_text "active-user@arvados.local"
72
73     find("button", text: "Link accounts").click
74
75     find("#notifications-menu").click
76     assert_text "active-user@arvados.local"
77   end
78
79   test "Link login of inactive user to this account" do
80     visit page_with_token('active_trustedclient')
81     stub = start_sso_stub(api_fixture('api_client_authorizations')['inactive_uninvited_trustedclient']['api_token'])
82     Rails.configuration.arvados_login_base = stub + "login"
83
84     find("#notifications-menu").click
85     assert_text "active-user@arvados.local"
86
87     find("a", text: "Link account").click
88     find("button", text: "Add another login to this account").click
89
90     find("#notifications-menu").click
91     assert_text "inactive-uninvited-user@arvados.local"
92
93     find("button", text: "Link accounts").click
94
95     find("#notifications-menu").click
96     assert_text "active-user@arvados.local"
97   end
98
99   test "Cannot link to inactive user" do
100     visit page_with_token('active_trustedclient')
101     stub = start_sso_stub(api_fixture('api_client_authorizations')['inactive_uninvited_trustedclient']['api_token'])
102     Rails.configuration.arvados_login_base = stub + "login"
103
104     find("#notifications-menu").click
105     assert_text "active-user@arvados.local"
106
107     find("a", text: "Link account").click
108     find("button", text: "Use this login to access another account").click
109
110     find("#notifications-menu").click
111     assert_text "inactive-uninvited-user@arvados.local"
112
113     assert_text "Cannot link active-user@arvados.local"
114
115     assert find("#link-account-submit")['disabled']
116
117     find("button", text: "Cancel").click
118
119     find("#notifications-menu").click
120     assert_text "active-user@arvados.local"
121   end
122
123   test "Inactive user can link to active account" do
124     visit page_with_token('inactive_uninvited_trustedclient')
125     stub = start_sso_stub(api_fixture('api_client_authorizations')['active_trustedclient']['api_token'])
126     Rails.configuration.arvados_login_base = stub + "login"
127
128     find("#notifications-menu").click
129     assert_text "inactive-uninvited-user@arvados.local"
130
131     assert_text "Already have an account with a different login?"
132
133     find("a", text: "Link this login to your existing account").click
134
135     assert_no_text "Add another login to this account"
136
137     find("button", text: "Use this login to access another account").click
138
139     find("#notifications-menu").click
140     assert_text "active-user@arvados.local"
141
142     find("button", text: "Link accounts").click
143
144     find("#notifications-menu").click
145     assert_text "active-user@arvados.local"
146   end
147
148   test "Admin cannot link to non-admin" do
149     visit page_with_token('admin_trustedclient')
150     stub = start_sso_stub(api_fixture('api_client_authorizations')['active_trustedclient']['api_token'])
151     Rails.configuration.arvados_login_base = stub + "login"
152
153     find("#notifications-menu").click
154     assert_text "admin@arvados.local"
155
156     find("a", text: "Link account").click
157     find("button", text: "Use this login to access another account").click
158
159     find("#notifications-menu").click
160     assert_text "active-user@arvados.local"
161
162     assert_text "Cannot link admin account admin@arvados.local"
163
164     assert find("#link-account-submit")['disabled']
165
166     find("button", text: "Cancel").click
167
168     find("#notifications-menu").click
169     assert_text "admin@arvados.local"
170   end
171
172 end