calendar_subscription_test.rb 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418
  1. # encoding: utf-8
  2. require 'test_helper'
  3. class CalendarSubscriptionTest < ActiveSupport::TestCase
  4. test 'default test' do
  5. # create base
  6. group_default = Group.lookup(name: 'Users')
  7. group_calendar = Group.create_or_update(
  8. name: 'CalendarSubscription',
  9. updated_by_id: 1,
  10. created_by_id: 1,
  11. )
  12. roles = Role.where(name: 'Agent')
  13. agent1 = User.create_or_update(
  14. login: 'ticket-calendar-subscription-agent1@example.com',
  15. firstname: 'Notification',
  16. lastname: 'Agent1',
  17. email: 'ticket-calendar-subscription-agent1@example.com',
  18. password: 'agentpw',
  19. active: true,
  20. roles: roles,
  21. groups: [group_calendar],
  22. preferences: {},
  23. updated_by_id: 1,
  24. created_by_id: 1,
  25. )
  26. agent2 = User.create_or_update(
  27. login: 'ticket-calendar-subscription-agent2@example.com',
  28. firstname: 'Notification',
  29. lastname: 'Agent2',
  30. email: 'ticket-calendar-subscription-agent2@example.com',
  31. password: 'agentpw',
  32. active: true,
  33. roles: roles,
  34. groups: [group_default],
  35. preferences: {},
  36. updated_at: '2016-02-05 16:38:00',
  37. updated_by_id: 1,
  38. created_by_id: 1,
  39. )
  40. roles = Role.where(name: 'Customer')
  41. organization1 = Organization.create_if_not_exists(
  42. name: 'Selector Org',
  43. updated_at: '2016-02-05 16:37:00',
  44. updated_by_id: 1,
  45. created_by_id: 1,
  46. )
  47. customer1 = User.create_or_update(
  48. login: 'ticket-calendar-subscription-customer1@example.com',
  49. firstname: 'Notification',
  50. lastname: 'Customer1',
  51. email: 'ticket-calendar-subscription-customer1@example.com',
  52. password: 'customerpw',
  53. active: true,
  54. organization_id: organization1.id,
  55. roles: roles,
  56. preferences: {},
  57. updated_at: '2016-02-05 16:37:00',
  58. updated_by_id: 1,
  59. created_by_id: 1,
  60. )
  61. customer2 = User.create_or_update(
  62. login: 'ticket-calendar-subscription-customer2@example.com',
  63. firstname: 'Notification',
  64. lastname: 'Customer2',
  65. email: 'ticket-calendar-subscription-customer2@example.com',
  66. password: 'customerpw',
  67. active: true,
  68. organization_id: nil,
  69. roles: roles,
  70. preferences: {},
  71. updated_at: '2016-02-05 16:37:00',
  72. updated_by_id: 1,
  73. created_by_id: 1,
  74. )
  75. Ticket.destroy_all
  76. ticket1 = Ticket.create(
  77. title: 'some title1 - new - group_calendar',
  78. group: group_calendar,
  79. customer_id: customer1.id,
  80. owner_id: agent1.id,
  81. state: Ticket::State.lookup(name: 'new'),
  82. priority: Ticket::Priority.lookup(name: '2 normal'),
  83. created_at: '2016-02-05 16:37:00',
  84. updated_by_id: 1,
  85. created_by_id: 1,
  86. )
  87. ticket2 = Ticket.create(
  88. title: 'some title1 - new - group_default',
  89. group: group_default,
  90. customer_id: customer1.id,
  91. owner_id: agent2.id,
  92. state: Ticket::State.lookup(name: 'new'),
  93. priority: Ticket::Priority.lookup(name: '2 normal'),
  94. created_at: '2016-02-05 16:37:00',
  95. updated_by_id: 1,
  96. created_by_id: 1,
  97. )
  98. ticket3 = Ticket.create(
  99. title: 'some title1 - pending - group_calendar',
  100. group: group_calendar,
  101. customer_id: customer1.id,
  102. owner_id: agent1.id,
  103. state: Ticket::State.lookup(name: 'pending reminder'),
  104. pending_time: '2016-02-07 16:37:00',
  105. priority: Ticket::Priority.lookup(name: '2 normal'),
  106. created_at: '2016-02-05 16:37:00',
  107. updated_by_id: 1,
  108. created_by_id: 1,
  109. )
  110. ticket4 = Ticket.create(
  111. title: 'some title1 - pending - group_default',
  112. group: group_default,
  113. customer_id: customer1.id,
  114. owner_id: agent2.id,
  115. state: Ticket::State.lookup(name: 'pending reminder'),
  116. pending_time: '2016-02-07 16:37:00',
  117. priority: Ticket::Priority.lookup(name: '2 normal'),
  118. created_at: '2016-02-05 16:37:00',
  119. updated_by_id: 1,
  120. created_by_id: 1,
  121. )
  122. ticket5 = Ticket.create(
  123. title: 'some title1 - escalation - group_calendar',
  124. group: group_calendar,
  125. customer_id: customer1.id,
  126. owner_id: agent1.id,
  127. state: Ticket::State.lookup(name: 'new'),
  128. escalation_time: '2016-02-07 17:37:00',
  129. priority: Ticket::Priority.lookup(name: '2 normal'),
  130. created_at: '2016-02-05 16:37:00',
  131. updated_by_id: 1,
  132. created_by_id: 1,
  133. )
  134. ticket6 = Ticket.create(
  135. title: 'some title1 - escalation - group_default',
  136. group: group_default,
  137. customer_id: customer1.id,
  138. owner_id: agent2.id,
  139. state: Ticket::State.lookup(name: 'new'),
  140. escalation_time: '2016-02-07 16:37:00',
  141. priority: Ticket::Priority.lookup(name: '2 normal'),
  142. created_at: '2016-02-05 16:37:00',
  143. updated_by_id: 1,
  144. created_by_id: 1,
  145. )
  146. ticket7 = Ticket.create(
  147. title: 'some title2 - new - group_calendar',
  148. group: group_calendar,
  149. customer_id: customer1.id,
  150. owner_id: 1,
  151. state: Ticket::State.lookup(name: 'new'),
  152. priority: Ticket::Priority.lookup(name: '2 normal'),
  153. created_at: '2016-02-05 17:37:00',
  154. updated_by_id: 1,
  155. created_by_id: 1,
  156. )
  157. ticket8 = Ticket.create(
  158. title: 'some title2 - new - group_default',
  159. group: group_default,
  160. customer_id: customer1.id,
  161. owner_id: 1,
  162. state: Ticket::State.lookup(name: 'new'),
  163. priority: Ticket::Priority.lookup(name: '2 normal'),
  164. created_at: '2016-02-05 17:37:00',
  165. updated_by_id: 1,
  166. created_by_id: 1,
  167. )
  168. ticket9 = Ticket.create(
  169. title: 'some title2 - pending - group_calendar',
  170. group: group_calendar,
  171. customer_id: customer1.id,
  172. owner_id: 1,
  173. state: Ticket::State.lookup(name: 'pending reminder'),
  174. pending_time: '2016-02-08 16:37:00',
  175. priority: Ticket::Priority.lookup(name: '2 normal'),
  176. created_at: '2016-02-05 17:37:00',
  177. updated_by_id: 1,
  178. created_by_id: 1,
  179. )
  180. ticket10 = Ticket.create(
  181. title: 'some title2 - pending - group_default',
  182. group: group_default,
  183. customer_id: customer1.id,
  184. owner_id: 1,
  185. state: Ticket::State.lookup(name: 'pending reminder'),
  186. pending_time: '2016-02-08 16:37:00',
  187. priority: Ticket::Priority.lookup(name: '2 normal'),
  188. created_at: '2016-02-05 17:37:00',
  189. updated_by_id: 1,
  190. created_by_id: 1,
  191. )
  192. ticket11 = Ticket.create(
  193. title: 'some title2 - escalation - group_calendar',
  194. group: group_calendar,
  195. customer_id: customer1.id,
  196. owner_id: 1,
  197. state: Ticket::State.lookup(name: 'new'),
  198. escalation_time: '2016-02-08 17:37:00',
  199. priority: Ticket::Priority.lookup(name: '2 normal'),
  200. created_at: '2016-02-05 17:37:00',
  201. updated_by_id: 1,
  202. created_by_id: 1,
  203. )
  204. ticket12 = Ticket.create(
  205. title: 'some title2 - escalation - group_default',
  206. group: group_default,
  207. customer_id: customer1.id,
  208. owner_id: 1,
  209. state: Ticket::State.lookup(name: 'new'),
  210. escalation_time: '2016-02-08 16:37:00',
  211. priority: Ticket::Priority.lookup(name: '2 normal'),
  212. created_at: '2016-02-05 17:37:00',
  213. updated_by_id: 1,
  214. created_by_id: 1,
  215. )
  216. # check agent 1
  217. calendar_subscriptions = CalendarSubscriptions.new(agent1)
  218. ical_file = calendar_subscriptions.all
  219. cals = Icalendar.parse(ical_file)
  220. assert_equal(cals.count, 1)
  221. cal = cals.first
  222. assert_equal(cals.count, 1)
  223. assert_equal(cal.events.count, 4)
  224. assert_equal(cal.events[0].dtstart, Time.zone.today)
  225. assert_equal(cal.events[0].summary, 'new ticket: \'some title1 - new - group_calendar\'')
  226. assert_equal(cal.events[0].description, "T##{ticket1.number}")
  227. assert_equal(cal.events[0].has_alarm?, false)
  228. assert_equal(cal.events[1].dtstart, Time.zone.today)
  229. assert_equal(cal.events[1].summary, 'new ticket: \'some title1 - escalation - group_calendar\'')
  230. assert_equal(cal.events[1].description, "T##{ticket5.number}")
  231. assert_equal(cal.events[1].has_alarm?, false)
  232. assert_equal(cal.events[2].dtstart, Time.zone.today)
  233. assert_equal(cal.events[2].summary, 'pending reminder ticket: \'some title1 - pending - group_calendar\' customer: Notification Customer1 (Selector Org)')
  234. assert_equal(cal.events[2].description, "T##{ticket3.number}")
  235. assert_equal(cal.events[2].has_alarm?, false)
  236. assert_equal(cal.events[3].dtstart, Time.zone.today)
  237. assert_equal(cal.events[3].summary, 'ticket escalation: \'some title1 - escalation - group_calendar\' customer: Notification Customer1 (Selector Org)')
  238. assert_equal(cal.events[3].description, "T##{ticket5.number}")
  239. assert_equal(cal.events[3].has_alarm?, false)
  240. if !agent1.preferences[:calendar_subscriptions]
  241. agent1.preferences[:calendar_subscriptions] = {}
  242. end
  243. agent1.preferences[:calendar_subscriptions][:tickets] = {
  244. escalation: {
  245. own: true,
  246. not_assigned: true,
  247. },
  248. new_open: {
  249. own: true,
  250. not_assigned: true,
  251. },
  252. pending: {
  253. own: true,
  254. not_assigned: true,
  255. },
  256. alarm: true,
  257. }
  258. agent1.save!
  259. calendar_subscriptions = CalendarSubscriptions.new(agent1)
  260. ical_file = calendar_subscriptions.all
  261. cals = Icalendar.parse(ical_file)
  262. assert_equal(cals.count, 1)
  263. cal = cals.first
  264. assert_equal(cals.count, 1)
  265. assert_equal(cal.events.count, 8)
  266. assert_equal(cal.events[0].dtstart, Time.zone.today)
  267. assert_equal(cal.events[0].summary, 'new ticket: \'some title2 - new - group_calendar\'')
  268. assert_equal(cal.events[0].description, "T##{ticket7.number}")
  269. assert_equal(cal.events[0].has_alarm?, false)
  270. assert_equal(cal.events[1].dtstart, Time.zone.today)
  271. assert_equal(cal.events[1].summary, 'new ticket: \'some title2 - escalation - group_calendar\'')
  272. assert_equal(cal.events[1].description, "T##{ticket11.number}")
  273. assert_equal(cal.events[1].has_alarm?, false)
  274. assert_equal(cal.events[2].dtstart, Time.zone.today)
  275. assert_equal(cal.events[2].summary, 'new ticket: \'some title1 - new - group_calendar\'')
  276. assert_equal(cal.events[2].description, "T##{ticket1.number}")
  277. assert_equal(cal.events[2].has_alarm?, false)
  278. assert_equal(cal.events[3].dtstart, Time.zone.today)
  279. assert_equal(cal.events[3].summary, 'new ticket: \'some title1 - escalation - group_calendar\'')
  280. assert_equal(cal.events[3].description, "T##{ticket5.number}")
  281. assert_equal(cal.events[3].has_alarm?, false)
  282. assert_equal(cal.events[4].dtstart, Time.zone.today)
  283. assert_equal(cal.events[4].summary, 'pending reminder ticket: \'some title2 - pending - group_calendar\' customer: Notification Customer1 (Selector Org)')
  284. assert_equal(cal.events[4].description, "T##{ticket9.number}")
  285. assert_equal(cal.events[4].has_alarm?, true)
  286. assert_equal(cal.events[5].dtstart, Time.zone.today)
  287. assert_equal(cal.events[5].summary, 'pending reminder ticket: \'some title1 - pending - group_calendar\' customer: Notification Customer1 (Selector Org)')
  288. assert_equal(cal.events[5].description, "T##{ticket3.number}")
  289. assert_equal(cal.events[5].has_alarm?, true)
  290. assert_equal(cal.events[6].dtstart, Time.zone.today)
  291. assert_equal(cal.events[6].summary, 'ticket escalation: \'some title2 - escalation - group_calendar\' customer: Notification Customer1 (Selector Org)')
  292. assert_equal(cal.events[6].description, "T##{ticket11.number}")
  293. assert_equal(cal.events[6].has_alarm?, true)
  294. assert_equal(cal.events[7].dtstart, Time.zone.today)
  295. assert_equal(cal.events[7].summary, 'ticket escalation: \'some title1 - escalation - group_calendar\' customer: Notification Customer1 (Selector Org)')
  296. assert_equal(cal.events[7].description, "T##{ticket5.number}")
  297. assert_equal(cal.events[7].has_alarm?, true)
  298. # check agent 2
  299. calendar_subscriptions = CalendarSubscriptions.new(agent2)
  300. ical_file = calendar_subscriptions.all
  301. cals = Icalendar.parse(ical_file)
  302. assert_equal(cals.count, 1)
  303. cal = cals.first
  304. assert_equal(cals.count, 1)
  305. assert_equal(cal.events.count, 4)
  306. assert_equal(cal.events[0].dtstart, Time.zone.today)
  307. assert_equal(cal.events[0].summary, 'new ticket: \'some title1 - new - group_default\'')
  308. assert_equal(cal.events[0].description, "T##{ticket2.number}")
  309. assert_equal(cal.events[1].dtstart, Time.zone.today)
  310. assert_equal(cal.events[1].summary, 'new ticket: \'some title1 - escalation - group_default\'')
  311. assert_equal(cal.events[1].description, "T##{ticket6.number}")
  312. assert_equal(cal.events[2].dtstart, Time.zone.today)
  313. assert_equal(cal.events[2].summary, 'pending reminder ticket: \'some title1 - pending - group_default\' customer: Notification Customer1 (Selector Org)')
  314. assert_equal(cal.events[2].description, "T##{ticket4.number}")
  315. assert_equal(cal.events[3].dtstart, Time.zone.today)
  316. assert_equal(cal.events[3].summary, 'ticket escalation: \'some title1 - escalation - group_default\' customer: Notification Customer1 (Selector Org)')
  317. assert_equal(cal.events[3].description, "T##{ticket6.number}")
  318. if !agent2.preferences[:calendar_subscriptions]
  319. agent2.preferences[:calendar_subscriptions] = {}
  320. end
  321. agent2.preferences[:calendar_subscriptions][:tickets] = {
  322. escalation: {
  323. own: true,
  324. not_assigned: true,
  325. },
  326. new_open: {
  327. own: true,
  328. not_assigned: true,
  329. },
  330. pending: {
  331. own: true,
  332. not_assigned: true,
  333. },
  334. alarm: false,
  335. }
  336. agent2.save!
  337. calendar_subscriptions = CalendarSubscriptions.new(agent2)
  338. ical_file = calendar_subscriptions.all
  339. cals = Icalendar.parse(ical_file)
  340. assert_equal(cals.count, 1)
  341. cal = cals.first
  342. assert_equal(cals.count, 1)
  343. assert_equal(cal.events.count, 8)
  344. assert_equal(cal.events[0].dtstart, Time.zone.today)
  345. assert_equal(cal.events[0].summary, 'new ticket: \'some title2 - new - group_default\'')
  346. assert_equal(cal.events[0].description, "T##{ticket8.number}")
  347. assert_equal(cal.events[0].has_alarm?, false)
  348. assert_equal(cal.events[1].dtstart, Time.zone.today)
  349. assert_equal(cal.events[1].summary, 'new ticket: \'some title2 - escalation - group_default\'')
  350. assert_equal(cal.events[1].description, "T##{ticket12.number}")
  351. assert_equal(cal.events[1].has_alarm?, false)
  352. assert_equal(cal.events[2].dtstart, Time.zone.today)
  353. assert_equal(cal.events[2].summary, 'new ticket: \'some title1 - new - group_default\'')
  354. assert_equal(cal.events[2].description, "T##{ticket2.number}")
  355. assert_equal(cal.events[1].has_alarm?, false)
  356. assert_equal(cal.events[3].dtstart, Time.zone.today)
  357. assert_equal(cal.events[3].summary, 'new ticket: \'some title1 - escalation - group_default\'')
  358. assert_equal(cal.events[3].description, "T##{ticket6.number}")
  359. assert_equal(cal.events[3].has_alarm?, false)
  360. assert_equal(cal.events[4].dtstart, Time.zone.today)
  361. assert_equal(cal.events[4].summary, 'pending reminder ticket: \'some title2 - pending - group_default\' customer: Notification Customer1 (Selector Org)')
  362. assert_equal(cal.events[4].description, "T##{ticket10.number}")
  363. assert_equal(cal.events[4].has_alarm?, false)
  364. assert_equal(cal.events[5].dtstart, Time.zone.today)
  365. assert_equal(cal.events[5].summary, 'pending reminder ticket: \'some title1 - pending - group_default\' customer: Notification Customer1 (Selector Org)')
  366. assert_equal(cal.events[5].description, "T##{ticket4.number}")
  367. assert_equal(cal.events[5].has_alarm?, false)
  368. assert_equal(cal.events[6].dtstart, Time.zone.today)
  369. assert_equal(cal.events[6].summary, 'ticket escalation: \'some title2 - escalation - group_default\' customer: Notification Customer1 (Selector Org)')
  370. assert_equal(cal.events[6].description, "T##{ticket12.number}")
  371. assert_equal(cal.events[6].has_alarm?, false)
  372. assert_equal(cal.events[7].dtstart, Time.zone.today)
  373. assert_equal(cal.events[7].summary, 'ticket escalation: \'some title1 - escalation - group_default\' customer: Notification Customer1 (Selector Org)')
  374. assert_equal(cal.events[7].description, "T##{ticket6.number}")
  375. assert_equal(cal.events[7].has_alarm?, false)
  376. end
  377. end