From 9ea4ce9d2f63f6903defa5d4d33c2c91bf6bd763 Mon Sep 17 00:00:00 2001 From: Mantas Masalskis Date: Thu, 17 Dec 2020 07:14:17 +0100 Subject: [PATCH] Fixes #3315 - nested "view from user perspective" yield to only being able to return to last viewed session --- app/controllers/sessions_controller.rb | 4 +- spec/system/manage/users_spec.rb | 51 ++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 spec/system/manage/users_spec.rb diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 0fa181d7a..31afaf089 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -129,8 +129,8 @@ class SessionsController < ApplicationController return false end - # remember old user - session[:switched_from_user_id] = current_user.id + # remember original user + session[:switched_from_user_id] ||= current_user.id # log new session user.activity_stream_log('switch to', current_user.id, true) diff --git a/spec/system/manage/users_spec.rb b/spec/system/manage/users_spec.rb new file mode 100644 index 000000000..a170a76ed --- /dev/null +++ b/spec/system/manage/users_spec.rb @@ -0,0 +1,51 @@ +require 'rails_helper' + +RSpec.describe 'Manage > Users', type: :system do + describe 'switching to an alternative user', authenticated_as: -> { original_user } do + let(:original_user) { create(:admin) } + let(:alternative_one_user) { create(:admin) } + let(:alternative_two_user) { create(:admin) } + + before do + alternative_one_user + alternative_two_user + end + + it 'starts as original user' do + expect(current_user).to eq original_user + end + + it 'switches to alternative user' do + switch_to(alternative_one_user) + expect(current_user).to eq alternative_one_user + end + + it 'switches to another alternative user' do + switch_to(alternative_one_user) + switch_to(alternative_two_user) + + expect(current_user).to eq alternative_two_user + end + + it 'switches back to original user' do + switch_to(alternative_one_user) + switch_to(alternative_two_user) + + click '.switchBackToUser-close' + + expect(current_user).to eq original_user + end + + def switch_to(user) + visit 'manage/users' + + within(:active_content) do + row = find("tr[data-id=\"#{user.id}\"]") + row.find('.js-action').click + row.find('.js-switchTo').click + end + + await_empty_ajax_queue + end + end +end