diff options
author | Oren Kanner <okanner@gmail.com> | 2016-11-17 23:21:02 -0500 |
---|---|---|
committer | Oren Kanner <okanner@gmail.com> | 2016-11-17 23:28:39 -0500 |
commit | 8dd9a8b6e00cbd91f8455218397c8da716fc9b00 (patch) | |
tree | 38bc5d16f631b01d1ba181085953783541691dd9 /spec/controllers/admin | |
parent | 694b55c8281be12d5403dbb8bc6c8951f2716df5 (diff) | |
download | gitlab-ce-8dd9a8b6e00cbd91f8455218397c8da716fc9b00.tar.gz |
Allow admins to stop impersonating users without e-mail addresses
Resolves #24576
Modify the guard clause of the `ApplicationController#require_email`
before action to skip requests where an admin is impersonating the
current user.
Diffstat (limited to 'spec/controllers/admin')
-rw-r--r-- | spec/controllers/admin/impersonations_controller_spec.rb | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/spec/controllers/admin/impersonations_controller_spec.rb b/spec/controllers/admin/impersonations_controller_spec.rb index 8be662974a0..8f1f0ba89ff 100644 --- a/spec/controllers/admin/impersonations_controller_spec.rb +++ b/spec/controllers/admin/impersonations_controller_spec.rb @@ -76,18 +76,32 @@ describe Admin::ImpersonationsController do end context "when the impersonator is not blocked" do - it "redirects to the impersonated user's page" do - expect(Gitlab::AppLogger).to receive(:info).with("User #{impersonator.username} has stopped impersonating #{user.username}").and_call_original + shared_examples_for "successfully stops impersonating" do + it "redirects to the impersonated user's page" do + expect(Gitlab::AppLogger).to receive(:info).with("User #{impersonator.username} has stopped impersonating #{user.username}").and_call_original - delete :destroy + delete :destroy + + expect(response).to redirect_to(admin_user_path(user)) + end + + it "signs us in as the impersonator" do + delete :destroy - expect(response).to redirect_to(admin_user_path(user)) + expect(warden.user).to eq(impersonator) + end end - it "signs us in as the impersonator" do - delete :destroy + # base case + it_behaves_like "successfully stops impersonating" + + context "and the user has a temporary oauth e-mail address" do + before do + allow(user).to receive(:temp_oauth_email?).and_return(true) + allow(controller).to receive(:current_user).and_return(user) + end - expect(warden.user).to eq(impersonator) + it_behaves_like "successfully stops impersonating" end end end |