switch_user 1.3.1 → 1.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +20 -4
  3. data/Gemfile +2 -0
  4. data/README.md +23 -21
  5. data/Rakefile +2 -0
  6. data/app/controllers/switch_user_controller.rb +25 -11
  7. data/app/helpers/switch_user_helper.rb +16 -19
  8. data/app/views/switch_user/_widget.html.erb +2 -2
  9. data/config/routes.rb +4 -2
  10. data/lib/generators/switch_user/install/install_generator.rb +3 -2
  11. data/lib/generators/switch_user/install/templates/switch_user.rb +8 -6
  12. data/lib/switch_user.rb +22 -21
  13. data/lib/switch_user/base_guard.rb +7 -5
  14. data/lib/switch_user/data_source.rb +8 -8
  15. data/lib/switch_user/lambda_guard.rb +2 -0
  16. data/lib/switch_user/provider.rb +20 -10
  17. data/lib/switch_user/provider/authlogic.rb +6 -6
  18. data/lib/switch_user/provider/base.rb +7 -8
  19. data/lib/switch_user/provider/clearance.rb +8 -6
  20. data/lib/switch_user/provider/devise.rb +10 -4
  21. data/lib/switch_user/provider/dummy.rb +8 -12
  22. data/lib/switch_user/provider/restful_authentication.rb +5 -3
  23. data/lib/switch_user/provider/session.rb +5 -3
  24. data/lib/switch_user/provider/sorcery.rb +8 -9
  25. data/lib/switch_user/rails.rb +7 -3
  26. data/lib/switch_user/rspec.rb +4 -4
  27. data/lib/switch_user/rspec/feature_helpers.rb +13 -14
  28. data/lib/switch_user/user_loader.rb +5 -2
  29. data/lib/switch_user/user_set.rb +14 -9
  30. data/lib/switch_user/version.rb +3 -1
  31. data/spec/controllers/switch_user_controller_spec.rb +24 -27
  32. data/spec/helpers/switch_user_helper_spec.rb +58 -55
  33. data/spec/integration/switch_user_spec.rb +105 -21
  34. data/spec/provider/authlogic_spec.rb +3 -1
  35. data/spec/provider/clearance_spec.rb +3 -1
  36. data/spec/provider/devise_spec.rb +19 -18
  37. data/spec/provider/dummy_spec.rb +4 -3
  38. data/spec/provider/restful_authentication_spec.rb +3 -1
  39. data/spec/provider/session_spec.rb +4 -2
  40. data/spec/provider/sorcery_spec.rb +3 -1
  41. data/spec/provider_spec.rb +3 -1
  42. data/spec/rspec/feature_helpers_spec.rb +38 -37
  43. data/spec/spec_helper.rb +4 -2
  44. data/spec/support/application.rb +35 -23
  45. data/spec/support/provider.rb +13 -11
  46. data/spec/switch_user/data_source_spec.rb +7 -5
  47. data/spec/switch_user/lambda_guard_spec.rb +6 -4
  48. data/spec/switch_user/user_loader_spec.rb +23 -23
  49. data/spec/switch_user/user_set_spec.rb +12 -10
  50. data/spec/switch_user_spec.rb +6 -4
  51. data/switch_user.gemspec +24 -23
  52. metadata +28 -28
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class UserLoader
3
5
  attr_reader :scope
@@ -8,7 +10,8 @@ module SwitchUser
8
10
 
9
11
  if options[:scope_identifier]
10
12
  options[:scope_identifier] =~ /^(.*)_([^_]+)$/
11
- scope, id = $1, $2
13
+ scope = Regexp.last_match(1)
14
+ id = Regexp.last_match(2)
12
15
  else
13
16
  scope, id = args
14
17
  end
@@ -30,7 +33,7 @@ module SwitchUser
30
33
  if scope && SwitchUser.available_scopes.include?(scope.to_sym)
31
34
  @scope = scope
32
35
  else
33
- raise InvalidScope.new("#{scope} is invalid and is not listed in SwitchUser#available_users")
36
+ raise InvalidScope, "#{scope} is invalid and is not listed in SwitchUser#available_users"
34
37
  end
35
38
  end
36
39
 
@@ -1,32 +1,36 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
4
  class UserSet
3
5
  def self.init_from_config
4
6
  SwitchUser.available_users.map do |scope, base_scope|
5
7
  identifier = SwitchUser.available_users_identifiers[scope]
6
- label = SwitchUser.available_users_names[scope]
8
+ label = SwitchUser.available_users_names[scope]
7
9
  new(scope, identifier, label, base_scope)
8
10
  end
9
11
  end
10
12
 
11
13
  def self.users
12
- init_from_config.flat_map {|user_set|
13
- user_set.users.map {|user| Record.build(user, user_set) }
14
- }
14
+ init_from_config.flat_map do |user_set|
15
+ user_set.users.map { |user| Record.build(user, user_set) }
16
+ end
15
17
  end
16
18
 
17
19
  attr_reader :scope, :user_class, :identifier, :label, :base_scope
20
+
18
21
  def initialize(scope, identifier, label, base_scope)
19
- @scope = scope
22
+ @scope = scope
20
23
  @user_class = normalize_class(scope)
21
24
  @identifier = identifier
22
- @label = label
25
+ @label = label
23
26
  @base_scope = normalize_scope(base_scope)
24
27
  end
25
28
 
26
29
  def find_user(id)
27
- Record.build(users.where(:id => id).first, self)
30
+ Record.build(users.where(id: id).first, self)
28
31
  end
29
- alias :[] :find_user
32
+
33
+ alias [] find_user
30
34
 
31
35
  def users
32
36
  base_scope
@@ -54,9 +58,10 @@ module SwitchUser
54
58
  user_class.respond_to?(:scoped) ? user_class.scoped : user_class.all
55
59
  end
56
60
  end
61
+
57
62
  class Record < Struct.new(:id, :label, :scope)
58
63
  def self.build(user, set)
59
- id = user.send(set.identifier)
64
+ id = user.send(set.identifier)
60
65
  label = user.send(set.label)
61
66
  scope = set.scope
62
67
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SwitchUser
2
- VERSION = "1.3.1"
4
+ VERSION = '1.5.3'
3
5
  end
@@ -1,40 +1,37 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'switch_user'
3
5
  require 'switch_user_controller'
4
6
 
5
- RSpec.describe SwitchUserController, :type => :controller do
7
+ RSpec.describe SwitchUserController, type: :controller do
6
8
  before do
7
9
  SwitchUser.provider = :dummy
8
10
  end
9
11
 
10
- let(:admin) { double(:admin, :admin? => true) }
11
- let(:provider) { double(:provider,
12
- :original_user => admin,
13
- :current_user => nil)
14
- }
15
- describe "#set_current_user" do
16
- it "redirects the user to the specified location" do
17
- SwitchUser.redirect_path = lambda {|_,_| "/path"}
12
+ let(:admin) { double(:admin, admin?: true) }
13
+ let(:provider) { double(:provider, original_user: admin, current_user: nil) }
14
+ describe '#set_current_user' do
15
+ it 'redirects the user to the specified location' do
16
+ SwitchUser.redirect_path = ->(_, _) { '/path' }
18
17
  allow(controller).to receive(:available?).and_return(true)
19
- get :set_current_user, :scope_identifier => "user_1"
18
+ get :set_current_user, params: { scope_identifier: 'user_1' }
20
19
 
21
- expect(response).to redirect_to("/path")
20
+ expect(response).to redirect_to('/path')
22
21
  end
23
22
 
24
- it "denies access according to the guard block" do
25
- SwitchUser.controller_guard = lambda {|_,_,_| false }
26
- expect {
27
- get :set_current_user
28
- }.to raise_error(ActionController::RoutingError)
23
+ it 'denies access according to the guard block' do
24
+ SwitchUser.controller_guard = ->(_, _, _) { false }
25
+ expect { get :set_current_user }.to raise_error(ActionController::RoutingError)
29
26
  end
30
27
 
31
- describe "requests with a privileged original_user" do
28
+ describe 'requests with a privileged original_user' do
32
29
  before do
33
- SwitchUser.controller_guard = lambda {|current_user, _, original_user|
30
+ SwitchUser.controller_guard = lambda do |current_user, _, original_user|
34
31
  current_user.try(:admin?) || original_user.try(:admin?)
35
- }
32
+ end
36
33
  end
37
- it "allows access using the original_user param" do
34
+ it 'allows access using the original_user param' do
38
35
  allow(controller).to receive(:provider).and_return(provider)
39
36
 
40
37
  expect(provider).to receive(:logout_all)
@@ -46,26 +43,26 @@ RSpec.describe SwitchUserController, :type => :controller do
46
43
  end
47
44
  end
48
45
 
49
- describe "#remember_user" do
46
+ describe '#remember_user' do
50
47
  before do
51
48
  allow(controller).to receive(:provider).and_return(provider)
52
49
  SwitchUser.switch_back = true
53
50
  end
54
- it "can remember the current user" do
51
+ it 'can remember the current user' do
55
52
  expect(provider).to receive(:remember_current_user).with(true)
56
53
 
57
- get :remember_user, :remember => "true"
54
+ get :remember_user, params: { remember: 'true' }
58
55
  end
59
- it "can forget the current user" do
56
+ it 'can forget the current user' do
60
57
  expect(provider).to receive(:remember_current_user).with(false)
61
58
 
62
- get :remember_user, :remember => "false"
59
+ get :remember_user, params: { remember: 'false' }
63
60
  end
64
- it "does nothing if switch_back is not enabled" do
61
+ it 'does nothing if switch_back is not enabled' do
65
62
  SwitchUser.switch_back = false
66
63
  expect(provider).not_to receive(:remember_current_user)
67
64
 
68
- get :remember_user, :remember => "true"
65
+ get :remember_user, params: { remember: 'true' }
69
66
  end
70
67
  end
71
68
  end
@@ -1,30 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
  require 'switch_user'
3
5
  require 'switch_user_helper'
4
6
 
5
- RSpec.describe SwitchUserHelper, :type => :helper do
7
+ RSpec.describe SwitchUserHelper, type: :helper do
6
8
  before do
7
9
  SwitchUser.provider = :dummy
8
10
  end
9
11
 
10
- let(:user) { double(:user, :id => 1) }
11
- let(:admin) { double(:admin, :id => 1) }
12
- let(:provider) {
12
+ let(:user) { double(:user, id: 1) }
13
+ let(:admin) { double(:admin, id: 1) }
14
+ let(:provider) do
13
15
  _provider = SwitchUser::Provider::Dummy.new(controller)
14
16
  _provider
15
- }
17
+ end
16
18
 
17
- describe "#switch_user_select" do
19
+ describe '#switch_user_select' do
18
20
  let(:guest_record) { SwitchUser::GuestRecord.new }
19
- let(:user_record) { double(:user_record, :user => user, :scope => :user, :label => 'user1', :scope_id => 'user_1') }
20
- let(:admin_record) { double(:admin_record, :user => admin, :scope => :admin, :label => 'admin1', :scope_id => 'admin_1') }
21
-
22
- let(:guest_option_tags) { %Q^<optgroup label="Guest"><option value="">Guest</option></optgroup>^ }
23
- let(:user_option_tags) { %Q^<optgroup label="User"><option value="user_1">user1</option></optgroup>^ }
24
- let(:user_selected_option_tags) { %Q^<optgroup label="User"><option selected="selected" value="user_1">user1</option></optgroup>^ }
25
- let(:admin_option_tags) { %Q^<optgroup label="Admin"><option value="admin_1">admin1</option></optgroup>^ }
26
- let(:admin_selected_option_tags) { %Q^<optgroup label="Admin"><option selected="selected" value="admin_1">admin1</option></optgroup>^ }
21
+ let(:user_record) { double(:user_record, user: user, scope: :user, label: 'user1', scope_id: 'user_1') }
22
+ let(:admin_record) { double(:admin_record, user: admin, scope: :admin, label: 'admin1', scope_id: 'admin_1') }
27
23
 
24
+ let(:guest_option_tags) { '<optgroup label="Guest"><option value="">Guest</option></optgroup>' }
25
+ let(:user_option_tags) { '<optgroup label="User"><option value="user_1">user1</option></optgroup>' }
26
+ let(:user_selected_option_tags) do
27
+ '<optgroup label="User"><option selected="selected" value="user_1">user1</option></optgroup>'
28
+ end
29
+ let(:admin_option_tags) { '<optgroup label="Admin"><option value="admin_1">admin1</option></optgroup>' }
30
+ let(:admin_selected_option_tags) do
31
+ '<optgroup label="Admin"><option selected="selected" value="admin_1">admin1</option></optgroup>'
32
+ end
28
33
 
29
34
  before do
30
35
  allow(SwitchUser).to receive(:switch_back).and_return(false)
@@ -39,64 +44,64 @@ RSpec.describe SwitchUserHelper, :type => :helper do
39
44
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record])
40
45
  end
41
46
 
42
- it "when unavailable" do
47
+ it 'when unavailable' do
43
48
  allow(helper).to receive(:available?).and_return(false)
44
49
 
45
50
  expect(helper.switch_user_select).to eq(nil)
46
51
  end
47
52
 
48
- it "when current_user is nil and all_users is []" do
53
+ it 'when current_user is nil and all_users is []' do
49
54
  allow(provider).to receive(:current_user).and_return(nil)
50
55
  allow(SwitchUser).to receive(:all_users).and_return([])
51
56
 
52
57
  expect(helper.switch_user_select).not_to match(%r{</option>})
53
58
  end
54
59
 
55
- it "when current_user is nil and all_users is [guest_record]" do
60
+ it 'when current_user is nil and all_users is [guest_record]' do
56
61
  allow(provider).to receive(:current_user).and_return(nil)
57
62
  allow(SwitchUser).to receive(:all_users).and_return([guest_record])
58
63
 
59
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
64
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
60
65
  end
61
66
 
62
- it "when current_user is nil and all_users is [guest_record, user_record]" do
67
+ it 'when current_user is nil and all_users is [guest_record, user_record]' do
63
68
  allow(provider).to receive(:current_user).and_return(nil)
64
69
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record])
65
70
 
66
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
67
- expect(helper.switch_user_select).to match(%r{#{user_option_tags}})
71
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
72
+ expect(helper.switch_user_select).to match(/#{user_option_tags}/)
68
73
  end
69
74
 
70
- it "when current_user is user and all_users is []" do
75
+ it 'when current_user is user and all_users is []' do
71
76
  allow(provider).to receive(:current_user).and_return(user)
72
77
  allow(SwitchUser).to receive(:all_users).and_return([])
73
78
 
74
79
  expect(helper.switch_user_select).not_to match(%r{</option>})
75
80
  end
76
81
 
77
- it "when current_user is user and all_users is [guest_record, user_record]" do
82
+ it 'when current_user is user and all_users is [guest_record, user_record]' do
78
83
  allow(provider).to receive(:current_user).and_return(user)
79
84
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record])
80
85
 
81
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
82
- expect(helper.switch_user_select).to match(%r{#{user_selected_option_tags}})
86
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
87
+ expect(helper.switch_user_select).to match(/#{user_selected_option_tags}/)
83
88
  end
84
89
 
85
- it "when current_user is default allow and all_users is default allow" do
86
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
87
- expect(helper.switch_user_select).to match(%r{#{user_selected_option_tags}})
90
+ it 'when current_user is default allow and all_users is default allow' do
91
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
92
+ expect(helper.switch_user_select).to match(/#{user_selected_option_tags}/)
88
93
  end
89
94
 
90
- it "when current_user is user and all_users is [guest_record, user_record, admin_record]" do
95
+ it 'when current_user is user and all_users is [guest_record, user_record, admin_record]' do
91
96
  allow(provider).to receive(:current_user).and_return(user)
92
97
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record, admin_record])
93
98
 
94
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
95
- expect(helper.switch_user_select).to match(%r{#{user_selected_option_tags}})
96
- expect(helper.switch_user_select).to match(%r{#{admin_option_tags}})
99
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
100
+ expect(helper.switch_user_select).to match(/#{user_selected_option_tags}/)
101
+ expect(helper.switch_user_select).to match(/#{admin_option_tags}/)
97
102
  end
98
103
 
99
- it "when current_user is admin and all_users is [guest_record, user_record, admin_record]" do
104
+ it 'when current_user is admin and all_users is [guest_record, user_record, admin_record]' do
100
105
  provider.instance_variable_set(:@user, admin)
101
106
  allow(helper).to receive(:provider).and_return(provider)
102
107
 
@@ -104,12 +109,12 @@ RSpec.describe SwitchUserHelper, :type => :helper do
104
109
 
105
110
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record, admin_record])
106
111
 
107
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
108
- expect(helper.switch_user_select).to match(%r{#{user_option_tags}})
109
- expect(helper.switch_user_select).to match(%r{#{admin_selected_option_tags}})
112
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
113
+ expect(helper.switch_user_select).to match(/#{user_option_tags}/)
114
+ expect(helper.switch_user_select).to match(/#{admin_selected_option_tags}/)
110
115
  end
111
116
 
112
- it "when current_user is admin and all_users is [guest_record, user_record]" do
117
+ it 'when current_user is admin and all_users is [guest_record, user_record]' do
113
118
  provider.instance_variable_set(:@user, admin)
114
119
  allow(helper).to receive(:provider).and_return(provider)
115
120
 
@@ -117,57 +122,55 @@ RSpec.describe SwitchUserHelper, :type => :helper do
117
122
 
118
123
  allow(SwitchUser).to receive(:all_users).and_return([guest_record, user_record])
119
124
 
120
- expect(helper.switch_user_select).to match(%r{#{guest_option_tags}})
121
- expect(helper.switch_user_select).to match(%r{#{user_option_tags}})
122
- expect(helper.switch_user_select).to_not match(%r{#{admin_option_tags}})
125
+ expect(helper.switch_user_select).to match(/#{guest_option_tags}/)
126
+ expect(helper.switch_user_select).to match(/#{user_option_tags}/)
127
+ expect(helper.switch_user_select).to_not match(/#{admin_option_tags}/)
123
128
  end
124
129
  end
125
130
 
126
- describe "#user_tag_value" do
127
- it "for user" do
128
- user = double(:user, :id => 1)
131
+ describe '#user_tag_value' do
132
+ it 'for user' do
133
+ user = double(:user, id: 1)
129
134
 
130
135
  expect(helper.send(:user_tag_value, user, :id, :user)).to eq('user_1')
131
136
  end
132
137
  end
133
138
 
134
- describe "#user_tag_label" do
135
- it "when name has call method" do
139
+ describe '#user_tag_label' do
140
+ it 'when name has call method' do
136
141
  user = double(:user)
137
- name = ->(user){ 'user1' }
142
+ name = ->(_user) { 'user1' }
138
143
 
139
144
  expect(helper.send(:user_tag_label, user, name)).to eq('user1')
140
145
  end
141
146
 
142
- it "when name not has call method" do
143
- user = double(:name, :name => 'user1')
147
+ it 'when name not has call method' do
148
+ user = double(:name, name: 'user1')
144
149
  name = :name
145
150
 
146
151
  expect(helper.send(:user_tag_label, user, name)).to eq('user1')
147
152
  end
148
153
  end
149
154
 
150
- describe "#available?" do
151
- it "return true" do
155
+ describe '#available?' do
156
+ it 'return true' do
152
157
  allow_any_instance_of(SwitchUser.guard_class).to receive(:view_available?).and_return(true)
153
158
 
154
159
  expect(helper.send(:available?)).to eq(true)
155
160
  end
156
161
 
157
- it "return false" do
162
+ it 'return false' do
158
163
  allow_any_instance_of(SwitchUser.guard_class).to receive(:view_available?).and_return(false)
159
164
 
160
165
  expect(helper.send(:available?)).to eq(false)
161
166
  end
162
167
  end
163
168
 
164
- describe "#provider" do
165
- it "normal" do
169
+ describe '#provider' do
170
+ it 'normal' do
166
171
  allow(SwitchUser::Provider).to receive(:init).with(controller).and_return(provider)
167
172
 
168
173
  expect(helper.send(:provider)).to eq(provider)
169
174
  end
170
175
  end
171
-
172
-
173
176
  end
@@ -1,61 +1,145 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
- RSpec.describe "Using SwitchUser", :type => :request do
4
- let(:user) { User.create!(:email => "foo@bar.com", :admin => true) }
5
- let(:other_user) { User.create!(:email => "other@bar.com", :admin => false) }
5
+ RSpec.describe 'Using SwitchUser', type: :request do
6
+ let(:user) { User.create!(email: 'foo@bar.com', admin: true) }
7
+ let(:other_user) { User.create!(email: 'other@bar.com', admin: false) }
6
8
 
7
9
  before do
8
10
  SwitchUser.reset_config
9
11
  SwitchUser.provider = :session
10
- SwitchUser.controller_guard = lambda { |current_user, request| Rails.env.test? }
11
- SwitchUser.redirect_path = lambda {|_,_| "/dummy/open"}
12
+ SwitchUser.controller_guard = ->(_current_user, _request) { Rails.env.test? }
13
+ SwitchUser.redirect_path = ->(_, _) { '/dummy/open' }
12
14
  end
13
15
 
14
- it "signs a user in using switch_user" do
16
+ it 'signs a user in using switch_user' do
15
17
  # can't access protected url
16
- get "/dummy/protected"
18
+ get '/dummy/protected'
17
19
  expect(response).to be_redirect
18
20
 
19
21
  get "/switch_user?scope_identifier=user_#{other_user.id}"
20
22
  expect(response).to be_redirect
21
23
 
22
24
  # now that we are logged in via switch_user we can access
23
- get "/dummy/protected"
25
+ get '/dummy/protected'
24
26
  expect(response).to be_success
25
27
  end
26
28
 
27
- context "using switch_back" do
29
+ context 'using switch_back' do
28
30
  before do
29
31
  SwitchUser.switch_back = true
30
- SwitchUser.controller_guard = lambda { |current_user, request, original_user|
32
+ SwitchUser.controller_guard = lambda do |current_user, _request, original_user|
31
33
  current_user && current_user.admin? || original_user && original_user.admin?
32
- }
34
+ end
33
35
  end
34
36
 
35
- it "can switch back to a different user" do
37
+ it 'can switch back to a different user through remember_user endpoint' do
36
38
  # login
37
- post "/login", :id => user.id
39
+ post '/login', params: { id: user.id }
38
40
  follow_redirect!
39
41
 
40
42
  # have SwitchUser remember us
41
- get "/switch_user/remember_user", :remember => true
42
- expect(session["original_user_scope_identifier"]).to be_present
43
+ get '/switch_user/remember_user', params: { remember: true }
44
+ expect(session['original_user_scope_identifier']).to be_present
43
45
 
44
46
  # check that we can switch to another user
45
47
  get "/switch_user?scope_identifier=user_#{other_user.id}"
46
- expect(session["user_id"]).to eq other_user.id
48
+ expect(session['user_id']).to eq other_user.id
49
+
50
+ # logout
51
+ get '/logout'
52
+ expect(session['user_id']).to be_nil
53
+
54
+ # check that we can still switch to another user
55
+ get "/switch_user?scope_identifier=user_#{user.id}"
56
+ expect(session['user_id']).to eq user.id
57
+
58
+ # check that we can be un-remembered
59
+ get '/switch_user/remember_user', params: { remember: false }
60
+ expect(session['original_user']).to be_nil
61
+ end
62
+
63
+ it 'can switch back to a different user without hitting remember_user endpoint' do
64
+ # login
65
+ post '/login', params: { id: user.id }
66
+ follow_redirect!
67
+
68
+ # check that we can switch to another user
69
+ get "/switch_user?scope_identifier=user_#{other_user.id}", params: { remember: true }
70
+ expect(session['user_id']).to eq other_user.id
71
+ expect(session['original_user_scope_identifier']).to_not be_nil
47
72
 
48
73
  # logout
49
- get "/logout"
50
- expect(session["user_id"]).to be_nil
74
+ get '/logout'
75
+ expect(session['user_id']).to be_nil
51
76
 
52
77
  # check that we can still switch to another user
53
78
  get "/switch_user?scope_identifier=user_#{user.id}"
54
- expect(session["user_id"]).to eq user.id
79
+ expect(session['user_id']).to eq user.id
55
80
 
56
81
  # check that we can be un-remembered
57
- get "/switch_user/remember_user", :remember => false
58
- expect(session["original_user"]).to be_nil
82
+ get '/switch_user/remember_user', params: { remember: false }
83
+ expect(session['original_user']).to be_nil
84
+ end
85
+
86
+ context 'when non-default identifier' do
87
+ before do
88
+ SwitchUser.available_users_identifiers = { user: :email }
89
+ end
90
+
91
+ after do
92
+ SwitchUser.available_users_identifiers = { user: :id }
93
+ end
94
+
95
+ it 'can switch back to a different user through remember_user endpoint' do
96
+ # login
97
+ post '/login', params: { id: user.id }
98
+ follow_redirect!
99
+
100
+ # have SwitchUser remember us
101
+ get '/switch_user/remember_user', params: { remember: true }
102
+ expect(session['original_user_scope_identifier']).to be_present
103
+
104
+ # check that we can switch to another user
105
+ get "/switch_user?scope_identifier=user_#{other_user.email}"
106
+ expect(session['user_id']).to eq other_user.id
107
+
108
+ # logout
109
+ get '/logout'
110
+ expect(session['user_id']).to be_nil
111
+
112
+ # check that we can still switch to another user
113
+ get "/switch_user?scope_identifier=user_#{user.email}"
114
+ expect(session['user_id']).to eq user.id
115
+
116
+ # check that we can be un-remembered
117
+ get '/switch_user/remember_user', params: { remember: false }
118
+ expect(session['original_user']).to be_nil
119
+ end
120
+
121
+ it 'can switch back to a different user without hitting remember_user endpoint' do
122
+ # login
123
+ post '/login', params: { id: user.id }
124
+ follow_redirect!
125
+
126
+ # check that we can switch to another user
127
+ get "/switch_user?scope_identifier=user_#{other_user.email}", params: { remember: true }
128
+ expect(session['user_id']).to eq other_user.id
129
+ expect(session['original_user_scope_identifier']).to_not be_nil
130
+
131
+ # logout
132
+ get '/logout'
133
+ expect(session['user_id']).to be_nil
134
+
135
+ # check that we can still switch to another user
136
+ get "/switch_user?scope_identifier=user_#{user.email}"
137
+ expect(session['user_id']).to eq user.id
138
+
139
+ # check that we can be un-remembered
140
+ get '/switch_user/remember_user', params: { remember: false }
141
+ expect(session['original_user']).to be_nil
142
+ end
59
143
  end
60
144
  end
61
145
  end