Fixes #3050 - newly created users are only shown in the admin interface after reload

This commit is contained in:
Romit Choudhary 2021-07-02 07:11:05 +00:00 committed by Thorsten Eckel
parent d09a3c5b85
commit 30654f8d7d
4 changed files with 79 additions and 8 deletions

View file

@ -179,9 +179,21 @@ class User extends App.ControllerSubContent
navupdate: '#users' navupdate: '#users'
genericObject: 'User' genericObject: 'User'
container: @el.closest('.content') container: @el.closest('.content')
callback: @search callback: @newUserAddedCallback
) )
# GitHub Issue #3050
# resets search input value to empty after new user added
# resets any active role tab
newUserAddedCallback: =>
@searchInput.val('')
@query = ''
@resetActiveTabs()
@search()
resetActiveTabs: ->
@$('.tab.active').removeClass('active')
import: (e) -> import: (e) ->
e.preventDefault() e.preventDefault()
new App.Import( new App.Import(

View file

@ -91,6 +91,8 @@ returns
# enable search only for agents and admins # enable search only for agents and admins
return [] if !search_preferences(current_user) return [] if !search_preferences(current_user)
is_query = query.present? && query != '*'
# lookup for roles of permission # lookup for roles of permission
if params[:permissions].present? if params[:permissions].present?
params[:role_ids] ||= [] params[:role_ids] ||= []
@ -99,7 +101,7 @@ returns
end end
# try search index backend # try search index backend
if SearchIndexBackend.enabled? if SearchIndexBackend.enabled? && is_query
query_extension = {} query_extension = {}
if params[:role_ids].present? if params[:role_ids].present?
query_extension['bool'] ||= {} query_extension['bool'] ||= {}
@ -162,10 +164,13 @@ returns
end end
end end
statement.where( if is_query
statement = statement.where(
'(users.firstname LIKE ? OR users.lastname LIKE ? OR users.email LIKE ? OR users.login LIKE ?) AND users.id != 1', "%#{query}%", "%#{query}%", "%#{query}%", "%#{query}%" '(users.firstname LIKE ? OR users.lastname LIKE ? OR users.email LIKE ? OR users.login LIKE ?) AND users.id != 1', "%#{query}%", "%#{query}%", "%#{query}%", "%#{query}%"
) )
.order(Arel.sql(order_sql)) end
statement.order(Arel.sql(order_sql))
.offset(offset) .offset(offset)
.limit(limit) .limit(limit)
end end

View file

@ -1434,6 +1434,37 @@ RSpec.describe 'User', type: :request do
end end
end end
describe 'GET /api/v1/users/search, checks ES Usage', searchindex: true, authenticated_as: :agent do
let!(:agent) { create(:agent) }
def make_request(params)
get '/api/v1/users/search', params: params, as: :json
end
before do
# create some users that can be found
create(:agent, firstname: 'Test-Agent1')
create(:agent, firstname: 'Test-Agent2')
configure_elasticsearch(rebuild: true)
end
it 'uses elasticsearch when query is non empty' do
# Check if ES is used
allow(SearchIndexBackend).to receive(:search)
make_request(query: 'Test')
expect(SearchIndexBackend).to have_received(:search)
end
it 'does not uses elasticsearch when query is empty' do
allow(SearchIndexBackend).to receive(:search)
make_request(query: '')
expect(SearchIndexBackend).not_to have_received(:search)
end
end
describe 'POST /api/v1/users/avatar', authenticated_as: :user do describe 'POST /api/v1/users/avatar', authenticated_as: :user do
let(:user) { create(:user) } let(:user) { create(:user) }
let(:base64) { 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' } let(:base64) { 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==' }

View file

@ -50,4 +50,27 @@ RSpec.describe 'Manage > Users', type: :system do
expect(page).to have_text("Zammad looks like this for \"#{user.firstname} #{user.lastname}\"", wait: 10) expect(page).to have_text("Zammad looks like this for \"#{user.firstname} #{user.lastname}\"", wait: 10)
end end
end end
# Fixes GitHub Issue #3050 - Newly created users are only shown in the admin interface after reload
describe 'adding a new user', authenticated_as: -> { user } do
let(:user) { create(:admin) }
it 'newly added user is visible in the user list' do
visit '#manage/users'
within(:active_content) do
find('[data-type=new]').click
find('[name=firstname]').fill_in with: 'NewTestUserFirstName'
find('[name=lastname]').fill_in with: 'User'
find('span.label-text', text: 'Customer').first(:xpath, './/..').click
click '.js-submit'
expect(page).to have_css('table.user-list td', text: 'NewTestUserFirstName')
end
end
end
end end