elasticsearch_active_test.rb 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'test_helper'
  3. class ElasticsearchActiveTest < ActiveSupport::TestCase
  4. include BackgroundJobsHelper
  5. include SearchindexHelper
  6. setup do
  7. configure_elasticsearch(required: true)
  8. rebuild_searchindex
  9. roles = Role.where(name: 'Agent')
  10. @agent = User.create!(
  11. login: 'es-agent@example.com',
  12. firstname: 'E',
  13. lastname: 'S',
  14. email: 'es-agent@example.com',
  15. password: 'agentpw',
  16. active: true,
  17. roles: roles,
  18. updated_by_id: 1,
  19. created_by_id: 1,
  20. )
  21. roles = Role.where(name: 'Customer')
  22. (1..6).each do |i|
  23. name = i.even? ? "Active-#{i}" : "Inactive-#{i}"
  24. User.create!(
  25. login: "#{name}-customer#{i}@example.com",
  26. firstname: 'ActiveTest',
  27. lastname: name,
  28. active: i.even?,
  29. roles: roles,
  30. updated_by_id: 1,
  31. created_by_id: 1,
  32. )
  33. Organization.create!(
  34. name: "TestOrg-#{name}",
  35. active: i.even?,
  36. updated_by_id: 1,
  37. created_by_id: 1,
  38. )
  39. travel 10.seconds
  40. end
  41. # execute background jobs to index created/changed objects
  42. perform_enqueued_jobs
  43. sleep 2 # for ES to come ready/indexed
  44. end
  45. test 'active users appear before inactive users in search results' do
  46. result = User.search(
  47. current_user: @agent,
  48. query: 'ActiveTest',
  49. limit: 15,
  50. )
  51. assert(result.present?, 'result should not be empty')
  52. names = result.map(&:lastname)
  53. correct_names = %w[Active-2 Active-4 Active-6 Inactive-1 Inactive-3 Inactive-5]
  54. assert_equal(correct_names[0, 3], names[0, 3].sort)
  55. assert_equal(correct_names[3, 6], names[3, 6].sort)
  56. end
  57. test 'active organizations appear before inactive organizations in search results' do
  58. result = Organization.search(
  59. current_user: @agent,
  60. query: 'TestOrg',
  61. limit: 15,
  62. )
  63. assert(result.present?, 'result should not be empty')
  64. names = result.map(&:name)
  65. correct_names = %w[TestOrg-Active-2
  66. TestOrg-Active-4
  67. TestOrg-Active-6
  68. TestOrg-Inactive-1
  69. TestOrg-Inactive-3
  70. TestOrg-Inactive-5]
  71. assert_equal(correct_names[0, 3], names[0, 3].sort)
  72. assert_equal(correct_names[3, 6], names[3, 6].sort)
  73. end
  74. test 'ordering of tickets are not affected by the lack of active flags' do
  75. ticket_setup
  76. result = Ticket.search(
  77. current_user: User.find(1),
  78. query: 'ticket',
  79. limit: 15,
  80. )
  81. assert(result.present?, 'result should not be empty')
  82. names = result.map(&:title)
  83. correct_names = %w[Ticket-6 Ticket-5 Ticket-4 Ticket-3 Ticket-2 Ticket-1]
  84. assert_equal(correct_names, names)
  85. end
  86. def ticket_setup
  87. result = Ticket.search(
  88. current_user: User.find(1),
  89. query: 'ticket',
  90. limit: 15,
  91. )
  92. return if result.present?
  93. (1..6).each do |i|
  94. Ticket.create!(
  95. title: "Ticket-#{i}",
  96. group: Group.lookup(name: 'Users'),
  97. customer_id: 1,
  98. state: Ticket::State.lookup(name: 'new'),
  99. priority: Ticket::Priority.lookup(name: '2 normal'),
  100. updated_by_id: 1,
  101. created_by_id: 1,
  102. )
  103. travel 10.seconds
  104. end
  105. perform_enqueued_jobs
  106. sleep 2 # for ES to come ready/indexed
  107. end
  108. end