ticket_first_solution_spec.rb 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. require 'lib/report_examples'
  4. RSpec.describe Report::TicketFirstSolution, searchindex: true do
  5. include_examples 'with report examples'
  6. describe '.aggs' do
  7. it 'gets monthly aggregated results excluding merged tickets' do
  8. result = described_class.aggs(
  9. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  10. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  11. interval: 'month',
  12. selector: {},
  13. )
  14. expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0]
  15. end
  16. it 'gets monthly aggregated results with high priority' do
  17. result = described_class.aggs(
  18. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  19. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  20. interval: 'month',
  21. selector: {
  22. 'ticket.priority_id' => {
  23. 'operator' => 'is',
  24. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  25. }
  26. },
  27. )
  28. expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0]
  29. end
  30. it 'gets monthly aggregated results with not high priority' do
  31. result = described_class.aggs(
  32. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  33. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  34. interval: 'month',
  35. selector: {
  36. 'ticket.priority_id' => {
  37. 'operator' => 'is not',
  38. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  39. }
  40. },
  41. )
  42. expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0]
  43. end
  44. it 'gets weekly aggregated results' do
  45. result = described_class.aggs(
  46. range_start: Time.zone.parse('2015-10-26T00:00:00Z'),
  47. range_end: Time.zone.parse('2015-10-31T23:59:59Z'),
  48. interval: 'week',
  49. selector: {},
  50. )
  51. expect(result).to eq [0, 0, 1, 0, 0, 1, 1]
  52. end
  53. it 'gets daily aggregated results' do
  54. result = described_class.aggs(
  55. range_start: Time.zone.parse('2015-10-01T00:00:00Z'),
  56. range_end: Time.zone.parse('2015-11-01T23:59:59Z'),
  57. interval: 'day',
  58. selector: {},
  59. )
  60. expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1]
  61. end
  62. it 'gets hourly aggregated results' do
  63. result = described_class.aggs(
  64. range_start: Time.zone.parse('2015-10-28T00:00:00Z'),
  65. range_end: Time.zone.parse('2015-10-28T23:59:59Z'),
  66. interval: 'hour',
  67. selector: {},
  68. )
  69. expect(result).to eq [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
  70. end
  71. end
  72. describe '.items' do
  73. it 'gets items in year range excluding merged tickets' do
  74. result = described_class.items(
  75. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  76. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  77. selector: {},
  78. )
  79. expect(result).to match_tickets ticket_5, ticket_6, ticket_7
  80. end
  81. it 'gets items in year range with high priority' do
  82. result = described_class.items(
  83. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  84. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  85. selector: {
  86. 'ticket.priority_id' => {
  87. 'operator' => 'is',
  88. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  89. }
  90. }
  91. )
  92. expect(result).to match_tickets ticket_5
  93. end
  94. it 'gets items in year range with not high priority' do
  95. result = described_class.items(
  96. range_start: Time.zone.parse('2015-01-01T00:00:00Z'),
  97. range_end: Time.zone.parse('2015-12-31T23:59:59Z'),
  98. selector: {
  99. 'ticket.priority_id' => {
  100. 'operator' => 'is not',
  101. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  102. }
  103. }
  104. )
  105. expect(result).to match_tickets ticket_6, ticket_7
  106. end
  107. it 'gets items in week range' do
  108. result = described_class.items(
  109. range_start: Time.zone.parse('2015-10-26T00:00:00Z'),
  110. range_end: Time.zone.parse('2015-11-01T23:59:59Z'),
  111. selector: {}
  112. )
  113. expect(result).to match_tickets ticket_5, ticket_6, ticket_7
  114. end
  115. it 'gets items in day range' do
  116. result = described_class.items(
  117. range_start: Time.zone.parse('2015-10-01T00:00:00Z'),
  118. range_end: Time.zone.parse('2015-10-31T23:59:59Z'),
  119. selector: {}
  120. )
  121. expect(result).to match_tickets ticket_5, ticket_6
  122. end
  123. it 'gets items in hour range' do
  124. result = described_class.items(
  125. range_start: Time.zone.parse('2015-10-28T00:00:00Z'),
  126. range_end: Time.zone.parse('2015-10-28T23:59:59Z'),
  127. interval: 'hour',
  128. selector: {},
  129. )
  130. expect(result).to match_tickets ticket_5
  131. end
  132. end
  133. end