remote_user_plugin_test.rb
5.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
require 'test_helper'
class AccountControllerTest < ActionController::TestCase
def setup
@environment = Environment.default
@environment.enabled_plugins = ['RemoteUserPlugin']
@environment.save
@another_environment = Environment.new(name: "AnotherEnvironment")
@another_environment.enabled_plugins = ['RemoteUserPlugin']
@another_environment.save
@controller = AccountController.new
@request = ActionController::TestRequest.new
@response = ActionController::TestResponse.new
end
should 'not authenticate user if there is no remote user' do
get :index
assert_nil session[:user]
end
should 'authenticate user if its a valid remote user' do
user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
user.activate
@request.env["HTTP_REMOTE_USER"] = user.login
get :index
assert session[:user]
end
should 'authenticate another user if the remote user doesnt belong to the current user' do
user1 = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
user1.activate
user2 = create_user('anotheruser', :email => 'anotheruser@example.com', :password => 'test', :password_confirmation => 'test')
user2.activate
login_as user1.login
assert_equal user1.id, session[:user]
@request.env["HTTP_REMOTE_USER"] = user2.login
get :index
assert_equal user2.id, session[:user]
end
should 'create a new user with remote_user_data if the remote user does not exist' do
User.destroy_all
assert_equal 0, User.count
@request.env["HTTP_REMOTE_USER"] = "testuser"
@request.env["CONTENT_TYPE"] = "application/json"
@request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"testuser@domain.com", "name":"Test User"}'
get :index
assert_equal 1, User.count
assert_equal "testuser", User.last.login
assert_equal true, User.last.activated?
assert_equal User.last.id, session[:user]
assert_equal "Test User", User.last.name
assert_equal "testuser@domain.com", User.last.email
end
should 'create a new user with remote_user_data even if there is a logged user but the remote user is different' do
users = User.count
user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
user.activate
login_as user.login
@request.env["HTTP_REMOTE_USER"] = 'another_user'
@request.env["CONTENT_TYPE"] = "application/json"
@request.env["HTTP_REMOTE_USER_DATA"] = '{"email":"another_user@domain.com", "name":"Another User"}'
get :index
assert_equal users + 2, User.count
assert_equal "another_user", User.last.login
assert_equal true, User.last.activated?
assert_equal User.last.id, session[:user]
assert_equal "Another User", User.last.name
assert_equal "another_user@domain.com", User.last.email
end
should 'create a new user without remote_user_data if the remote user does not exist' do
User.destroy_all
assert_equal 0, User.count
@request.env["HTTP_REMOTE_USER"] = "testuser"
get :index
assert_equal 1, User.count
assert_equal "testuser", User.last.login
assert_equal true, User.last.activated?
assert_equal User.last.id, session[:user]
assert_equal "testuser", User.last.name
assert_equal "testuser@remote.user", User.last.email
end
should 'create a new user without remote_user_data even if there is a logged user but the remote user is different' do
users = User.count
user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
user.activate
login_as user.login
@request.env["HTTP_REMOTE_USER"] = 'another_user'
get :index
assert_equal users + 2, User.count
assert_equal "another_user", User.last.login
assert_equal true, User.last.activated?
assert_equal User.last.id, session[:user]
assert_equal "another_user", User.last.name
assert_equal "another_user@remote.user", User.last.email
end
should 'logout if there is a current logged user but not a remote user' do
user1 = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
user1.activate
login_as user1.login
get :index
assert session[:user].blank?
@request.env["HTTP_REMOTE_USER"] = ""
get :index
assert session[:user].blank?
end
should 'not create a new user if his informations is invalid' do
@request.env["HTTP_REMOTE_USER"] = "*%&invalid user name&%*"
get :index
assert session[:user].blank?
assert_response 404
end
should "create an user in the correct environment" do
@controller.stubs(:environment).returns(@another_environment)
@request.env["HTTP_REMOTE_USER"] = "testuser"
get :index
user = User.last
assert_equal user.environment, @another_environment
end
should "create an user in both environments" do
user = create_user('testuser', :email => 'testuser@example.com', :password => 'test', :password_confirmation => 'test')
@controller.stubs(:environment).returns(@another_environment)
@request.env["HTTP_REMOTE_USER"] = "testuser"
users = User.where(:login => 'testuser')
assert_equal users.count, 1
get :index
users = User.where(:login => 'testuser')
assert_equal users.count, 2
end
end