ticket_first_solution_spec.rb 5.9 KB

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