report_test.rb 31 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975
  1. require 'integration_test_helper'
  2. class ReportTest < ActiveSupport::TestCase
  3. include SearchindexHelper
  4. setup do
  5. configure_elasticsearch(required: true)
  6. Ticket.destroy_all
  7. rebuild_searchindex
  8. group1 = Group.lookup(name: 'Users')
  9. group2 = Group.create_if_not_exists(
  10. name: 'Report Test',
  11. updated_by_id: 1,
  12. created_by_id: 1
  13. )
  14. @ticket1 = Ticket.create!(
  15. title: 'test 1',
  16. group: group2,
  17. customer_id: 2,
  18. state: Ticket::State.lookup(name: 'new'),
  19. priority: Ticket::Priority.lookup(name: '2 normal'),
  20. created_at: '2015-10-28 09:30:00 UTC',
  21. updated_at: '2015-10-28 09:30:00 UTC',
  22. updated_by_id: 1,
  23. created_by_id: 1,
  24. )
  25. Ticket::Article.create!(
  26. ticket_id: @ticket1.id,
  27. from: 'some_sender@example.com',
  28. to: 'some_recipient@example.com',
  29. subject: 'some subject',
  30. message_id: 'some@id',
  31. body: 'some message article_inbound',
  32. internal: false,
  33. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  34. type: Ticket::Article::Type.where(name: 'email').first,
  35. created_at: '2015-10-28 09:30:00 UTC',
  36. updated_at: '2015-10-28 09:30:00 UTC',
  37. updated_by_id: 1,
  38. created_by_id: 1,
  39. )
  40. @ticket1.update!(
  41. group: Group.lookup(name: 'Users'),
  42. updated_at: '2015-10-28 14:30:00 UTC',
  43. )
  44. @ticket2 = Ticket.create!(
  45. title: 'test 2',
  46. group: group1,
  47. customer_id: 2,
  48. state: Ticket::State.lookup(name: 'new'),
  49. priority: Ticket::Priority.lookup(name: '2 normal'),
  50. created_at: '2015-10-28 09:30:01 UTC',
  51. updated_at: '2015-10-28 09:30:01 UTC',
  52. updated_by_id: 1,
  53. created_by_id: 1,
  54. )
  55. Ticket::Article.create!(
  56. ticket_id: @ticket2.id,
  57. from: 'some_sender@example.com',
  58. to: 'some_recipient@example.com',
  59. subject: 'some subject',
  60. message_id: 'some@id',
  61. body: 'some message article_inbound',
  62. internal: false,
  63. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  64. type: Ticket::Article::Type.where(name: 'email').first,
  65. created_at: '2015-10-28 09:30:01 UTC',
  66. updated_at: '2015-10-28 09:30:01 UTC',
  67. updated_by_id: 1,
  68. created_by_id: 1,
  69. )
  70. @ticket2.update!(
  71. group_id: group2.id,
  72. updated_at: '2015-10-28 14:30:00 UTC',
  73. )
  74. @ticket3 = Ticket.create!(
  75. title: 'test 3',
  76. group: group1,
  77. customer_id: 2,
  78. state: Ticket::State.lookup(name: 'open'),
  79. priority: Ticket::Priority.lookup(name: '3 high'),
  80. created_at: '2015-10-28 10:30:00 UTC',
  81. updated_at: '2015-10-28 10:30:00 UTC',
  82. updated_by_id: 1,
  83. created_by_id: 1,
  84. )
  85. Ticket::Article.create!(
  86. ticket_id: @ticket3.id,
  87. from: 'some_sender@example.com',
  88. to: 'some_recipient@example.com',
  89. subject: 'some subject',
  90. message_id: 'some@id',
  91. body: 'some message article_inbound',
  92. internal: false,
  93. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  94. type: Ticket::Article::Type.where(name: 'email').first,
  95. created_at: '2015-10-28 10:30:00 UTC',
  96. updated_at: '2015-10-28 10:30:00 UTC',
  97. updated_by_id: 1,
  98. created_by_id: 1,
  99. )
  100. @ticket4 = Ticket.create!(
  101. title: 'test 4',
  102. group: group1,
  103. customer_id: 2,
  104. state: Ticket::State.lookup(name: 'closed'),
  105. priority: Ticket::Priority.lookup(name: '2 normal'),
  106. close_at: '2015-10-28 11:30:00 UTC',
  107. created_at: '2015-10-28 10:30:01 UTC',
  108. updated_at: '2015-10-28 10:30:01 UTC',
  109. updated_by_id: 1,
  110. created_by_id: 1,
  111. )
  112. Ticket::Article.create!(
  113. ticket_id: @ticket4.id,
  114. from: 'some_sender@example.com',
  115. to: 'some_recipient@example.com',
  116. subject: 'some subject',
  117. message_id: 'some@id',
  118. body: 'some message article_inbound',
  119. internal: false,
  120. sender: Ticket::Article::Sender.where(name: 'Customer').first,
  121. type: Ticket::Article::Type.where(name: 'email').first,
  122. created_at: '2015-10-28 10:30:01 UTC',
  123. updated_at: '2015-10-28 10:30:01 UTC',
  124. updated_by_id: 1,
  125. created_by_id: 1,
  126. )
  127. @ticket5 = Ticket.create!(
  128. title: 'test 5',
  129. group: group1,
  130. customer_id: 2,
  131. state: Ticket::State.lookup(name: 'closed'),
  132. priority: Ticket::Priority.lookup(name: '3 high'),
  133. close_at: '2015-10-28 11:40:00 UTC',
  134. created_at: '2015-10-28 11:30:00 UTC',
  135. updated_at: '2015-10-28 11:30:00 UTC',
  136. updated_by_id: 1,
  137. created_by_id: 1,
  138. )
  139. Ticket::Article.create!(
  140. ticket_id: @ticket5.id,
  141. from: 'some_sender@example.com',
  142. to: 'some_recipient@example.com',
  143. subject: 'some subject',
  144. message_id: 'some@id',
  145. body: 'some message article_outbound',
  146. internal: false,
  147. sender: Ticket::Article::Sender.where(name: 'Agent').first,
  148. type: Ticket::Article::Type.where(name: 'email').first,
  149. created_at: '2015-10-28 11:30:00 UTC',
  150. updated_at: '2015-10-28 11:30:00 UTC',
  151. updated_by_id: 1,
  152. created_by_id: 1,
  153. )
  154. @ticket5.update!(
  155. state: Ticket::State.lookup(name: 'open'),
  156. updated_at: '2015-10-28 14:30:00 UTC',
  157. )
  158. @ticket6 = Ticket.create!(
  159. title: 'test 6',
  160. group: group1,
  161. customer_id: 2,
  162. state: Ticket::State.lookup(name: 'closed'),
  163. priority: Ticket::Priority.lookup(name: '2 normal'),
  164. close_at: '2015-10-31 12:35:00 UTC',
  165. created_at: '2015-10-31 12:30:00 UTC',
  166. updated_at: '2015-10-31 12:30:00 UTC',
  167. updated_by_id: 1,
  168. created_by_id: 1,
  169. )
  170. Ticket::Article.create!(
  171. ticket_id: @ticket6.id,
  172. from: 'some_sender@example.com',
  173. to: 'some_recipient@example.com',
  174. subject: 'some subject',
  175. message_id: 'some@id',
  176. body: 'some message article_outbound',
  177. internal: false,
  178. sender: Ticket::Article::Sender.where(name: 'Agent').first,
  179. type: Ticket::Article::Type.where(name: 'email').first,
  180. created_at: '2015-10-31 12:30:00 UTC',
  181. updated_at: '2015-10-31 12:30:00 UTC',
  182. updated_by_id: 1,
  183. created_by_id: 1,
  184. )
  185. @ticket7 = Ticket.create!(
  186. title: 'test 7',
  187. group: group1,
  188. customer_id: 2,
  189. state: Ticket::State.lookup(name: 'closed'),
  190. priority: Ticket::Priority.lookup(name: '2 normal'),
  191. close_at: '2015-11-01 12:30:00 UTC',
  192. created_at: '2015-11-01 12:30:00 UTC',
  193. updated_at: '2015-11-01 12:30:00 UTC',
  194. updated_by_id: 1,
  195. created_by_id: 1,
  196. )
  197. Ticket::Article.create!(
  198. ticket_id: @ticket7.id,
  199. from: 'some_sender@example.com',
  200. to: 'some_recipient@example.com',
  201. subject: 'some subject',
  202. message_id: 'some@id',
  203. body: 'some message article_outbound',
  204. internal: false,
  205. sender: Ticket::Article::Sender.where(name: 'Agent').first,
  206. type: Ticket::Article::Type.where(name: 'email').first,
  207. created_at: '2015-11-01 12:30:00 UTC',
  208. updated_at: '2015-11-01 12:30:00 UTC',
  209. updated_by_id: 1,
  210. created_by_id: 1,
  211. )
  212. @ticket8 = Ticket.create!(
  213. title: 'test 8',
  214. group: group1,
  215. customer_id: 2,
  216. state: Ticket::State.lookup(name: 'merged'),
  217. priority: Ticket::Priority.lookup(name: '2 normal'),
  218. close_at: '2015-11-02 12:30:00 UTC',
  219. created_at: '2015-11-02 12:30:00 UTC',
  220. updated_at: '2015-11-02 12:30:00 UTC',
  221. updated_by_id: 1,
  222. created_by_id: 1,
  223. )
  224. Ticket::Article.create!(
  225. ticket_id: @ticket8.id,
  226. from: 'some_sender@example.com',
  227. to: 'some_recipient@example.com',
  228. subject: 'some subject',
  229. message_id: 'some@id',
  230. body: 'some message article_outbound',
  231. internal: false,
  232. sender: Ticket::Article::Sender.where(name: 'Agent').first,
  233. type: Ticket::Article::Type.where(name: 'email').first,
  234. created_at: '2015-11-02 12:30:00 UTC',
  235. updated_at: '2015-11-02 12:30:00 UTC',
  236. updated_by_id: 1,
  237. created_by_id: 1,
  238. )
  239. # execute background jobs
  240. Scheduler.worker(true)
  241. end
  242. test 'compare' do
  243. # first solution
  244. result = Report::TicketFirstSolution.aggs(
  245. range_start: '2015-01-01T00:00:00Z',
  246. range_end: '2015-12-31T23:59:59Z',
  247. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  248. selector: {}, # ticket selector to get only a collection of tickets
  249. )
  250. assert(result)
  251. assert_equal(0, result[0])
  252. assert_equal(0, result[1])
  253. assert_equal(0, result[2])
  254. assert_equal(0, result[3])
  255. assert_equal(0, result[4])
  256. assert_equal(0, result[5])
  257. assert_equal(0, result[6])
  258. assert_equal(0, result[7])
  259. assert_equal(0, result[8])
  260. assert_equal(2, result[9])
  261. assert_equal(1, result[10])
  262. assert_equal(0, result[11])
  263. assert_nil(result[12])
  264. result = Report::TicketFirstSolution.items(
  265. range_start: '2015-01-01T00:00:00Z',
  266. range_end: '2015-12-31T23:59:59Z',
  267. selector: {}, # ticket selector to get only a collection of tickets
  268. )
  269. assert(result)
  270. assert_equal(@ticket5.id, result[:ticket_ids][0])
  271. assert_equal(@ticket6.id, result[:ticket_ids][1])
  272. assert_equal(@ticket7.id, result[:ticket_ids][2])
  273. assert_nil(result[:ticket_ids][3])
  274. # month - with selector #1
  275. result = Report::TicketFirstSolution.aggs(
  276. range_start: '2015-01-01T00:00:00Z',
  277. range_end: '2015-12-31T23:59:59Z',
  278. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  279. selector: {
  280. 'ticket.priority_id' => {
  281. 'operator' => 'is',
  282. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  283. }
  284. }, # ticket selector to get only a collection of tickets
  285. )
  286. assert(result)
  287. assert_equal(0, result[0])
  288. assert_equal(0, result[1])
  289. assert_equal(0, result[2])
  290. assert_equal(0, result[3])
  291. assert_equal(0, result[4])
  292. assert_equal(0, result[5])
  293. assert_equal(0, result[6])
  294. assert_equal(0, result[7])
  295. assert_equal(0, result[8])
  296. assert_equal(1, result[9])
  297. assert_equal(0, result[10])
  298. assert_equal(0, result[11])
  299. assert_nil(result[12])
  300. result = Report::TicketFirstSolution.items(
  301. range_start: '2015-01-01T00:00:00Z',
  302. range_end: '2015-12-31T23:59:59Z',
  303. selector: {
  304. 'ticket.priority_id' => {
  305. 'operator' => 'is',
  306. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  307. }
  308. }, # ticket selector to get only a collection of tickets
  309. )
  310. assert(result)
  311. assert_equal(@ticket5.id, result[:ticket_ids][0])
  312. assert_nil(result[:ticket_ids][1])
  313. # month - with merged tickets selector
  314. result = Report::TicketFirstSolution.aggs(
  315. range_start: '2015-01-01T00:00:00Z',
  316. range_end: '2015-12-31T23:59:59Z',
  317. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  318. selector: {
  319. 'ticket_state.name' => {
  320. 'operator' => 'is not',
  321. 'value' => 'merged',
  322. }
  323. }, # ticket selector to get only a collection of tickets
  324. )
  325. assert(result)
  326. assert_equal(0, result[0])
  327. assert_equal(0, result[1])
  328. assert_equal(0, result[2])
  329. assert_equal(0, result[3])
  330. assert_equal(0, result[4])
  331. assert_equal(0, result[5])
  332. assert_equal(0, result[6])
  333. assert_equal(0, result[7])
  334. assert_equal(0, result[8])
  335. assert_equal(2, result[9])
  336. assert_equal(1, result[10])
  337. assert_equal(0, result[11])
  338. assert_nil(result[12])
  339. result = Report::TicketFirstSolution.items(
  340. range_start: '2015-01-01T00:00:00Z',
  341. range_end: '2015-12-31T23:59:59Z',
  342. selector: {
  343. 'ticket_state.name' => {
  344. 'operator' => 'is not',
  345. 'value' => 'merged',
  346. }
  347. }, # ticket selector to get only a collection of tickets
  348. )
  349. assert(result)
  350. assert_equal(@ticket5.id, result[:ticket_ids][0])
  351. assert_nil(result[:ticket_ids][3])
  352. # month - with selector #2
  353. result = Report::TicketFirstSolution.aggs(
  354. range_start: '2015-01-01T00:00:00Z',
  355. range_end: '2015-12-31T23:59:59Z',
  356. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  357. selector: {
  358. 'ticket.priority_id' => {
  359. 'operator' => 'is not',
  360. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  361. }
  362. }, # ticket selector to get only a collection of tickets
  363. )
  364. assert(result)
  365. assert_equal(0, result[0])
  366. assert_equal(0, result[1])
  367. assert_equal(0, result[2])
  368. assert_equal(0, result[3])
  369. assert_equal(0, result[4])
  370. assert_equal(0, result[5])
  371. assert_equal(0, result[6])
  372. assert_equal(0, result[7])
  373. assert_equal(0, result[8])
  374. assert_equal(1, result[9])
  375. assert_equal(1, result[10])
  376. assert_equal(0, result[11])
  377. assert_nil(result[12])
  378. result = Report::TicketFirstSolution.items(
  379. range_start: '2015-01-01T00:00:00Z',
  380. range_end: '2015-12-31T23:59:59Z',
  381. selector: {
  382. 'ticket.priority_id' => {
  383. 'operator' => 'is not',
  384. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  385. }
  386. }, # ticket selector to get only a collection of tickets
  387. )
  388. assert(result)
  389. assert_equal(@ticket6.id, result[:ticket_ids][0])
  390. assert_equal(@ticket7.id, result[:ticket_ids][1])
  391. assert_nil(result[:ticket_ids][2])
  392. # week
  393. result = Report::TicketFirstSolution.aggs(
  394. range_start: '2015-10-26T00:00:00Z',
  395. range_end: '2015-10-31T23:59:59Z',
  396. interval: 'week', # year, quarter, month, week, day, hour, minute, second
  397. selector: {}, # ticket selector to get only a collection of tickets
  398. )
  399. assert(result)
  400. assert_equal(0, result[0])
  401. assert_equal(0, result[1])
  402. assert_equal(1, result[2])
  403. assert_equal(0, result[3])
  404. assert_equal(0, result[4])
  405. assert_equal(1, result[5])
  406. assert_equal(1, result[6])
  407. assert_nil(result[7])
  408. result = Report::TicketFirstSolution.items(
  409. range_start: '2015-10-26T00:00:00Z',
  410. range_end: '2015-11-01T23:59:59Z',
  411. interval: 'week', # year, quarter, month, week, day, hour, minute, second
  412. selector: {}, # ticket selector to get only a collection of tickets
  413. )
  414. assert(result)
  415. assert_equal(@ticket5.id, result[:ticket_ids][0])
  416. assert_equal(@ticket6.id, result[:ticket_ids][1])
  417. assert_equal(@ticket7.id, result[:ticket_ids][2])
  418. assert_nil(result[:ticket_ids][3])
  419. # day
  420. result = Report::TicketFirstSolution.aggs(
  421. range_start: '2015-10-01T00:00:00Z',
  422. range_end: '2015-11-01T23:59:59Z',
  423. interval: 'day', # year, quarter, month, week, day, hour, minute, second
  424. selector: {}, # ticket selector to get only a collection of tickets
  425. )
  426. assert(result)
  427. assert_equal(0, result[0])
  428. assert_equal(0, result[1])
  429. assert_equal(0, result[2])
  430. assert_equal(0, result[3])
  431. assert_equal(0, result[4])
  432. assert_equal(0, result[5])
  433. assert_equal(0, result[6])
  434. assert_equal(0, result[7])
  435. assert_equal(0, result[8])
  436. assert_equal(0, result[9])
  437. assert_equal(0, result[10])
  438. assert_equal(0, result[11])
  439. assert_equal(0, result[12])
  440. assert_equal(0, result[13])
  441. assert_equal(0, result[14])
  442. assert_equal(0, result[15])
  443. assert_equal(0, result[16])
  444. assert_equal(0, result[17])
  445. assert_equal(0, result[18])
  446. assert_equal(0, result[19])
  447. assert_equal(0, result[20])
  448. assert_equal(0, result[21])
  449. assert_equal(0, result[22])
  450. assert_equal(0, result[23])
  451. assert_equal(0, result[24])
  452. assert_equal(0, result[25])
  453. assert_equal(0, result[26])
  454. assert_equal(1, result[27])
  455. assert_equal(0, result[28])
  456. assert_equal(0, result[29])
  457. assert_equal(1, result[30])
  458. assert_nil(result[31])
  459. result = Report::TicketFirstSolution.items(
  460. range_start: '2015-10-01T00:00:00Z',
  461. range_end: '2015-10-31T23:59:59Z',
  462. interval: 'day', # year, quarter, month, week, day, hour, minute, second
  463. selector: {}, # ticket selector to get only a collection of tickets
  464. )
  465. assert(result)
  466. assert_equal(@ticket5.id, result[:ticket_ids][0])
  467. assert_equal(@ticket6.id, result[:ticket_ids][1])
  468. assert_nil(result[:ticket_ids][2])
  469. # hour
  470. result = Report::TicketFirstSolution.aggs(
  471. range_start: '2015-10-28T00:00:00Z',
  472. range_end: '2015-10-28T23:59:59Z',
  473. interval: 'hour', # year, quarter, month, week, day, hour, minute, second
  474. selector: {}, # ticket selector to get only a collection of tickets
  475. )
  476. assert(result)
  477. assert_equal(0, result[0])
  478. assert_equal(0, result[1])
  479. assert_equal(0, result[2])
  480. assert_equal(0, result[3])
  481. assert_equal(0, result[4])
  482. assert_equal(0, result[5])
  483. assert_equal(0, result[6])
  484. assert_equal(0, result[7])
  485. assert_equal(0, result[8])
  486. assert_equal(0, result[9])
  487. assert_equal(0, result[10])
  488. assert_equal(1, result[11])
  489. assert_equal(0, result[12])
  490. assert_equal(0, result[13])
  491. assert_equal(0, result[14])
  492. assert_equal(0, result[15])
  493. assert_equal(0, result[16])
  494. assert_equal(0, result[17])
  495. assert_equal(0, result[18])
  496. assert_equal(0, result[19])
  497. assert_equal(0, result[20])
  498. assert_equal(0, result[21])
  499. assert_equal(0, result[22])
  500. assert_equal(0, result[23])
  501. assert_nil(result[24])
  502. result = Report::TicketFirstSolution.items(
  503. range_start: '2015-10-28T00:00:00Z',
  504. range_end: '2015-10-28T23:59:59Z',
  505. interval: 'hour', # year, quarter, month, week, day, hour, minute, second
  506. selector: {}, # ticket selector to get only a collection of tickets
  507. )
  508. assert(result)
  509. assert_equal(@ticket5.id, result[:ticket_ids][0])
  510. assert_nil(result[:ticket_ids][1])
  511. # reopen
  512. result = Report::TicketReopened.aggs(
  513. range_start: '2015-01-01T00:00:00Z',
  514. range_end: '2015-12-31T23:59:59Z',
  515. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  516. selector: {}, # ticket selector to get only a collection of tickets
  517. )
  518. assert(result)
  519. assert_equal(0, result[0])
  520. assert_equal(0, result[1])
  521. assert_equal(0, result[2])
  522. assert_equal(0, result[3])
  523. assert_equal(0, result[4])
  524. assert_equal(0, result[5])
  525. assert_equal(0, result[6])
  526. assert_equal(0, result[7])
  527. assert_equal(0, result[8])
  528. assert_equal(1, result[9])
  529. assert_equal(0, result[10])
  530. assert_equal(0, result[11])
  531. assert_nil(result[12])
  532. result = Report::TicketReopened.items(
  533. range_start: '2015-01-01T00:00:00Z',
  534. range_end: '2015-12-31T23:59:59Z',
  535. selector: {}, # ticket selector to get only a collection of tickets
  536. )
  537. assert(result)
  538. assert_equal(@ticket5.id, result[:ticket_ids][0])
  539. assert_nil(result[:ticket_ids][1])
  540. # month - with selector #1
  541. result = Report::TicketReopened.aggs(
  542. range_start: '2015-01-01T00:00:00Z',
  543. range_end: '2015-12-31T23:59:59Z',
  544. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  545. selector: {
  546. 'ticket.priority_id' => {
  547. 'operator' => 'is',
  548. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  549. }
  550. }, # ticket selector to get only a collection of tickets
  551. )
  552. assert(result)
  553. assert_equal(0, result[0])
  554. assert_equal(0, result[1])
  555. assert_equal(0, result[2])
  556. assert_equal(0, result[3])
  557. assert_equal(0, result[4])
  558. assert_equal(0, result[5])
  559. assert_equal(0, result[6])
  560. assert_equal(0, result[7])
  561. assert_equal(0, result[8])
  562. assert_equal(1, result[9])
  563. assert_equal(0, result[10])
  564. assert_equal(0, result[11])
  565. assert_nil(result[12])
  566. result = Report::TicketReopened.items(
  567. range_start: '2015-01-01T00:00:00Z',
  568. range_end: '2015-12-31T23:59:59Z',
  569. selector: {
  570. 'ticket.priority_id' => {
  571. 'operator' => 'is',
  572. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  573. }
  574. }, # ticket selector to get only a collection of tickets
  575. )
  576. assert(result)
  577. assert_equal(@ticket5.id, result[:ticket_ids][0])
  578. assert_nil(result[:ticket_ids][1])
  579. # month - with selector #2
  580. result = Report::TicketReopened.aggs(
  581. range_start: '2015-01-01T00:00:00Z',
  582. range_end: '2015-12-31T23:59:59Z',
  583. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  584. selector: {
  585. 'ticket.priority_id' => {
  586. 'operator' => 'is not',
  587. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  588. }
  589. }, # ticket selector to get only a collection of tickets
  590. )
  591. assert(result)
  592. assert_equal(0, result[0])
  593. assert_equal(0, result[1])
  594. assert_equal(0, result[2])
  595. assert_equal(0, result[3])
  596. assert_equal(0, result[4])
  597. assert_equal(0, result[5])
  598. assert_equal(0, result[6])
  599. assert_equal(0, result[7])
  600. assert_equal(0, result[8])
  601. assert_equal(0, result[9])
  602. assert_equal(0, result[10])
  603. assert_equal(0, result[11])
  604. assert_nil(result[12])
  605. result = Report::TicketReopened.items(
  606. range_start: '2015-01-01T00:00:00Z',
  607. range_end: '2015-12-31T23:59:59Z',
  608. selector: {
  609. 'ticket.priority_id' => {
  610. 'operator' => 'is not',
  611. 'value' => [Ticket::Priority.lookup(name: '3 high').id],
  612. }
  613. }, # ticket selector to get only a collection of tickets
  614. )
  615. assert(result)
  616. assert_nil(result[:ticket_ids][0])
  617. # month - reopened with merge selector
  618. result = Report::TicketReopened.aggs(
  619. range_start: '2015-01-01T00:00:00Z',
  620. range_end: '2015-12-31T23:59:59Z',
  621. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  622. selector: {
  623. 'ticket_state.name' => {
  624. 'operator' => 'is not',
  625. 'value' => 'merged',
  626. }
  627. }, # ticket selector to get only a collection of tickets
  628. )
  629. assert(result)
  630. assert_equal(0, result[0])
  631. assert_equal(0, result[1])
  632. assert_equal(0, result[2])
  633. assert_equal(0, result[3])
  634. assert_equal(0, result[4])
  635. assert_equal(0, result[5])
  636. assert_equal(0, result[6])
  637. assert_equal(0, result[7])
  638. assert_equal(0, result[8])
  639. assert_equal(1, result[9])
  640. assert_equal(0, result[10])
  641. assert_equal(0, result[11])
  642. assert_nil(result[12])
  643. result = Report::TicketReopened.items(
  644. range_start: '2015-01-01T00:00:00Z',
  645. range_end: '2015-12-31T23:59:59Z',
  646. selector: {
  647. 'ticket_state.name' => {
  648. 'operator' => 'is not',
  649. 'value' => 'merged',
  650. }
  651. }, # ticket selector to get only a collection of tickets
  652. )
  653. assert(result)
  654. assert_equal(@ticket5.id, result[:ticket_ids][0])
  655. assert_nil(result[:ticket_ids][1])
  656. # move in/out without merged status
  657. result = Report::TicketMoved.aggs(
  658. range_start: '2015-01-01T00:00:00Z',
  659. range_end: '2015-12-31T23:59:59Z',
  660. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  661. selector: {
  662. 'ticket_state.name' => {
  663. 'operator' => 'is not',
  664. 'value' => 'merged',
  665. }
  666. }, # ticket selector to get only a collection of tickets
  667. params: {
  668. type: 'in',
  669. },
  670. )
  671. assert(result)
  672. assert_equal(0, result[0])
  673. assert_equal(0, result[1])
  674. assert_equal(0, result[2])
  675. assert_equal(0, result[3])
  676. assert_equal(0, result[4])
  677. assert_equal(0, result[5])
  678. assert_equal(0, result[6])
  679. assert_equal(0, result[7])
  680. assert_equal(0, result[8])
  681. assert_equal(0, result[9])
  682. assert_equal(0, result[10])
  683. assert_equal(0, result[11])
  684. assert_nil(result[12])
  685. result = Report::TicketMoved.items(
  686. range_start: '2015-01-01T00:00:00Z',
  687. range_end: '2015-12-31T23:59:59Z',
  688. selector: {
  689. 'ticket.group_id' => {
  690. 'operator' => 'is',
  691. 'value' => [Group.lookup(name: 'Users').id],
  692. }
  693. }, # ticket selector to get only a collection of tickets
  694. params: {
  695. type: 'in',
  696. },
  697. )
  698. assert(result)
  699. assert_equal(@ticket1.id, result[:ticket_ids][0])
  700. assert_nil(result[:ticket_ids][1])
  701. # move in/out
  702. result = Report::TicketMoved.aggs(
  703. range_start: '2015-01-01T00:00:00Z',
  704. range_end: '2015-12-31T23:59:59Z',
  705. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  706. selector: {
  707. 'ticket.group_id' => {
  708. 'operator' => 'is',
  709. 'value' => [Group.lookup(name: 'Users').id],
  710. }
  711. }, # ticket selector to get only a collection of tickets
  712. params: {
  713. type: 'in',
  714. },
  715. )
  716. assert(result)
  717. assert_equal(0, result[0])
  718. assert_equal(0, result[1])
  719. assert_equal(0, result[2])
  720. assert_equal(0, result[3])
  721. assert_equal(0, result[4])
  722. assert_equal(0, result[5])
  723. assert_equal(0, result[6])
  724. assert_equal(0, result[7])
  725. assert_equal(0, result[8])
  726. assert_equal(1, result[9])
  727. assert_equal(0, result[10])
  728. assert_equal(0, result[11])
  729. assert_nil(result[12])
  730. result = Report::TicketMoved.items(
  731. range_start: '2015-01-01T00:00:00Z',
  732. range_end: '2015-12-31T23:59:59Z',
  733. selector: {
  734. 'ticket.group_id' => {
  735. 'operator' => 'is',
  736. 'value' => [Group.lookup(name: 'Users').id],
  737. }
  738. }, # ticket selector to get only a collection of tickets
  739. params: {
  740. type: 'in',
  741. },
  742. )
  743. assert(result)
  744. assert_equal(@ticket1.id, result[:ticket_ids][0])
  745. assert_nil(result[:ticket_ids][1])
  746. # out without merged tickets
  747. result = Report::TicketMoved.aggs(
  748. range_start: '2015-01-01T00:00:00Z',
  749. range_end: '2015-12-31T23:59:59Z',
  750. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  751. selector: {
  752. 'ticket_state.name' => {
  753. 'operator' => 'is not',
  754. 'value' => 'merged',
  755. }
  756. }, # ticket selector to get only a collection of tickets
  757. params: {
  758. type: 'out',
  759. },
  760. )
  761. assert(result)
  762. assert_equal(0, result[0])
  763. assert_equal(0, result[1])
  764. assert_equal(0, result[2])
  765. assert_equal(0, result[3])
  766. assert_equal(0, result[4])
  767. assert_equal(0, result[5])
  768. assert_equal(0, result[6])
  769. assert_equal(0, result[7])
  770. assert_equal(0, result[8])
  771. assert_equal(0, result[9])
  772. assert_equal(0, result[10])
  773. assert_equal(0, result[11])
  774. assert_nil(result[12])
  775. result = Report::TicketMoved.items(
  776. range_start: '2015-01-01T00:00:00Z',
  777. range_end: '2015-12-31T23:59:59Z',
  778. selector: {
  779. 'ticket_state.name' => {
  780. 'operator' => 'is not',
  781. 'value' => 'merged',
  782. }
  783. }, # ticket selector to get only a collection of tickets
  784. params: {
  785. type: 'out',
  786. },
  787. )
  788. assert(result)
  789. assert_nil(result[:ticket_ids][0])
  790. # out
  791. result = Report::TicketMoved.aggs(
  792. range_start: '2015-01-01T00:00:00Z',
  793. range_end: '2015-12-31T23:59:59Z',
  794. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  795. selector: {
  796. 'ticket.group_id' => {
  797. 'operator' => 'is',
  798. 'value' => [Group.lookup(name: 'Users').id],
  799. }
  800. }, # ticket selector to get only a collection of tickets
  801. params: {
  802. type: 'out',
  803. },
  804. )
  805. assert(result)
  806. assert_equal(0, result[0])
  807. assert_equal(0, result[1])
  808. assert_equal(0, result[2])
  809. assert_equal(0, result[3])
  810. assert_equal(0, result[4])
  811. assert_equal(0, result[5])
  812. assert_equal(0, result[6])
  813. assert_equal(0, result[7])
  814. assert_equal(0, result[8])
  815. assert_equal(1, result[9])
  816. assert_equal(0, result[10])
  817. assert_equal(0, result[11])
  818. assert_nil(result[12])
  819. result = Report::TicketMoved.items(
  820. range_start: '2015-01-01T00:00:00Z',
  821. range_end: '2015-12-31T23:59:59Z',
  822. selector: {
  823. 'ticket.group_id' => {
  824. 'operator' => 'is',
  825. 'value' => [Group.lookup(name: 'Users').id],
  826. }
  827. }, # ticket selector to get only a collection of tickets
  828. params: {
  829. type: 'out',
  830. },
  831. )
  832. assert(result)
  833. assert_equal(@ticket2.id, result[:ticket_ids][0])
  834. assert_nil(result[:ticket_ids][1])
  835. # create at
  836. result = Report::TicketGenericTime.aggs(
  837. range_start: '2015-01-01T00:00:00Z',
  838. range_end: '2015-12-31T23:59:59Z',
  839. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  840. selector: {}, # ticket selector to get only a collection of tickets
  841. params: { field: 'created_at' },
  842. )
  843. assert(result)
  844. assert_equal(0, result[0])
  845. assert_equal(0, result[1])
  846. assert_equal(0, result[2])
  847. assert_equal(0, result[3])
  848. assert_equal(0, result[4])
  849. assert_equal(0, result[5])
  850. assert_equal(0, result[6])
  851. assert_equal(0, result[7])
  852. assert_equal(0, result[8])
  853. assert_equal(6, result[9])
  854. assert_equal(1, result[10])
  855. assert_equal(0, result[11])
  856. assert_nil(result[12])
  857. result = Report::TicketGenericTime.items(
  858. range_start: '2015-01-01T00:00:00Z',
  859. range_end: '2015-12-31T23:59:59Z',
  860. selector: {}, # ticket selector to get only a collection of tickets
  861. params: { field: 'created_at' },
  862. )
  863. assert(result)
  864. assert_equal(@ticket7.id, result[:ticket_ids][0].to_i)
  865. assert_equal(@ticket6.id, result[:ticket_ids][1].to_i)
  866. assert_equal(@ticket5.id, result[:ticket_ids][2].to_i)
  867. assert_equal(@ticket4.id, result[:ticket_ids][3].to_i)
  868. assert_equal(@ticket3.id, result[:ticket_ids][4].to_i)
  869. assert_equal(@ticket2.id, result[:ticket_ids][5].to_i)
  870. assert_equal(@ticket1.id, result[:ticket_ids][6].to_i)
  871. assert_nil(result[:ticket_ids][7])
  872. # create at - selector with merge
  873. result = Report::TicketGenericTime.aggs(
  874. range_start: '2015-01-01T00:00:00Z',
  875. range_end: '2015-12-31T23:59:59Z',
  876. interval: 'month', # year, quarter, month, week, day, hour, minute, second
  877. selector: {
  878. 'state' => {
  879. 'operator' => 'is not',
  880. 'value' => 'merged'
  881. }
  882. }, # ticket selector to get only a collection of tickets
  883. params: { field: 'created_at' },
  884. )
  885. assert(result)
  886. assert_equal(0, result[0])
  887. assert_equal(0, result[1])
  888. assert_equal(0, result[2])
  889. assert_equal(0, result[3])
  890. assert_equal(0, result[4])
  891. assert_equal(0, result[5])
  892. assert_equal(0, result[6])
  893. assert_equal(0, result[7])
  894. assert_equal(0, result[8])
  895. assert_equal(6, result[9])
  896. assert_equal(1, result[10])
  897. assert_equal(0, result[11])
  898. assert_nil(result[12])
  899. result = Report::TicketGenericTime.items(
  900. range_start: '2015-01-01T00:00:00Z',
  901. range_end: '2015-12-31T23:59:59Z',
  902. selector: {
  903. 'state' => {
  904. 'operator' => 'is not',
  905. 'value' => 'merged'
  906. }
  907. }, # ticket selector to get only a collection of tickets
  908. params: { field: 'created_at' },
  909. )
  910. assert(result)
  911. assert_equal(@ticket7.id, result[:ticket_ids][0].to_i)
  912. assert_equal(@ticket6.id, result[:ticket_ids][1].to_i)
  913. assert_equal(@ticket5.id, result[:ticket_ids][2].to_i)
  914. assert_equal(@ticket4.id, result[:ticket_ids][3].to_i)
  915. assert_equal(@ticket3.id, result[:ticket_ids][4].to_i)
  916. assert_equal(@ticket2.id, result[:ticket_ids][5].to_i)
  917. assert_equal(@ticket1.id, result[:ticket_ids][6].to_i)
  918. assert_nil(result[:ticket_ids][7])
  919. # cleanup
  920. Rake::Task['searchindex:drop'].execute
  921. end
  922. end