126 lines
3.2 KiB
Ruby
126 lines
3.2 KiB
Ruby
|
require 'test_helper'
|
||
|
|
||
|
class ElasticsearchActiveTest < ActiveSupport::TestCase
|
||
|
include SearchindexHelper
|
||
|
|
||
|
setup do
|
||
|
|
||
|
configure_elasticsearch(required: true)
|
||
|
|
||
|
rebuild_searchindex
|
||
|
|
||
|
roles = Role.where(name: 'Agent')
|
||
|
groups = Group.where(name: 'Users')
|
||
|
|
||
|
@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-6 Active-4 Active-2 Inactive-5 Inactive-3 Inactive-1]
|
||
|
assert_equal(correct_names, names)
|
||
|
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, names)
|
||
|
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
|