128 lines
3.5 KiB
Ruby
128 lines
3.5 KiB
Ruby
# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
|
|
|
|
require 'test_helper'
|
|
|
|
class ElasticsearchActiveTest < ActiveSupport::TestCase
|
|
include SearchindexHelper
|
|
|
|
setup do
|
|
|
|
configure_elasticsearch(required: true)
|
|
|
|
rebuild_searchindex
|
|
|
|
roles = Role.where(name: 'Agent')
|
|
|
|
@agent = User.create!(
|
|
login: 'es-agent@example.com',
|
|
firstname: 'E',
|
|
lastname: 'S',
|
|
email: 'es-agent@example.com',
|
|
password: 'agentpw',
|
|
active: true,
|
|
roles: roles,
|
|
updated_by_id: 1,
|
|
created_by_id: 1,
|
|
)
|
|
|
|
roles = Role.where(name: 'Customer')
|
|
|
|
(1..6).each do |i|
|
|
name = i.even? ? "Active-#{i}" : "Inactive-#{i}"
|
|
User.create!(
|
|
login: "#{name}-customer#{i}@example.com",
|
|
firstname: 'ActiveTest',
|
|
lastname: name,
|
|
active: i.even?,
|
|
roles: roles,
|
|
updated_by_id: 1,
|
|
created_by_id: 1,
|
|
)
|
|
Organization.create!(
|
|
name: "TestOrg-#{name}",
|
|
active: i.even?,
|
|
updated_by_id: 1,
|
|
created_by_id: 1,
|
|
)
|
|
travel 10.seconds
|
|
end
|
|
|
|
# execute background jobs to index created/changed objects
|
|
Scheduler.worker(true)
|
|
sleep 2 # for ES to come ready/indexed
|
|
end
|
|
|
|
test 'active users appear before inactive users in search results' do
|
|
result = User.search(
|
|
current_user: @agent,
|
|
query: 'ActiveTest',
|
|
limit: 15,
|
|
)
|
|
assert(result.present?, 'result should not be empty')
|
|
|
|
names = result.map(&:lastname)
|
|
correct_names = %w[Active-2 Active-4 Active-6 Inactive-1 Inactive-3 Inactive-5]
|
|
assert_equal(correct_names[0, 3], names[0, 3].sort)
|
|
assert_equal(correct_names[3, 6], names[3, 6].sort)
|
|
end
|
|
|
|
test 'active organizations appear before inactive organizations in search results' do
|
|
result = Organization.search(
|
|
current_user: @agent,
|
|
query: 'TestOrg',
|
|
limit: 15,
|
|
)
|
|
assert(result.present?, 'result should not be empty')
|
|
|
|
names = result.map(&:name)
|
|
correct_names = %w[TestOrg-Active-2
|
|
TestOrg-Active-4
|
|
TestOrg-Active-6
|
|
TestOrg-Inactive-1
|
|
TestOrg-Inactive-3
|
|
TestOrg-Inactive-5]
|
|
assert_equal(correct_names[0, 3], names[0, 3].sort)
|
|
assert_equal(correct_names[3, 6], names[3, 6].sort)
|
|
end
|
|
|
|
test 'ordering of tickets are not affected by the lack of active flags' do
|
|
ticket_setup
|
|
|
|
result = Ticket.search(
|
|
current_user: User.find(1),
|
|
query: 'ticket',
|
|
limit: 15,
|
|
)
|
|
assert(result.present?, 'result should not be empty')
|
|
|
|
names = result.map(&:title)
|
|
correct_names = %w[Ticket-6 Ticket-5 Ticket-4 Ticket-3 Ticket-2 Ticket-1]
|
|
assert_equal(correct_names, names)
|
|
end
|
|
|
|
def ticket_setup
|
|
result = Ticket.search(
|
|
current_user: User.find(1),
|
|
query: 'ticket',
|
|
limit: 15,
|
|
)
|
|
return if result.present?
|
|
|
|
(1..6).each do |i|
|
|
Ticket.create!(
|
|
title: "Ticket-#{i}",
|
|
group: Group.lookup(name: 'Users'),
|
|
customer_id: 1,
|
|
state: Ticket::State.lookup(name: 'new'),
|
|
priority: Ticket::Priority.lookup(name: '2 normal'),
|
|
updated_by_id: 1,
|
|
created_by_id: 1,
|
|
)
|
|
travel 10.seconds
|
|
end
|
|
|
|
# execute background jobs to index created/changed objects
|
|
Scheduler.worker(true)
|
|
sleep 2 # for ES to come ready/indexed
|
|
end
|
|
end
|