taskbar_spec.rb 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464
  1. # Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
  2. require 'rails_helper'
  3. require 'models/taskbar/has_attachments_examples'
  4. RSpec.describe Taskbar do
  5. it_behaves_like 'Taskbar::HasAttachments'
  6. context 'key = Search' do
  7. context 'multiple taskbars', current_user_id: 1 do
  8. let(:key) { 'Search' }
  9. let(:other_taskbar) { create(:taskbar, key: key) }
  10. describe '#create' do
  11. it "doesn't update other taskbar" do
  12. expect do
  13. create(:taskbar, key: key)
  14. end.not_to change { other_taskbar.reload.updated_at }
  15. end
  16. end
  17. context 'existing taskbar' do
  18. subject(:taskbar) { create(:taskbar, key: key) }
  19. describe '#update' do
  20. it "doesn't update other taskbar" do
  21. expect do
  22. taskbar.update!(state: { foo: :bar })
  23. end.not_to change { other_taskbar.reload.updated_at }
  24. end
  25. end
  26. describe '#destroy' do
  27. it "doesn't update other taskbar" do
  28. expect do
  29. taskbar.destroy!
  30. end.not_to change { other_taskbar.reload.updated_at }
  31. end
  32. end
  33. end
  34. end
  35. end
  36. context 'single creation' do
  37. let(:taskbar) do
  38. described_class.destroy_all
  39. UserInfo.current_user_id = 1
  40. create(:taskbar, params: {
  41. id: 1234,
  42. })
  43. end
  44. it 'existing key' do
  45. expect(taskbar.key).to eq('Ticket-1234')
  46. end
  47. it 'params' do
  48. expect(taskbar.params[:id]).to eq(1234)
  49. end
  50. it 'state' do
  51. expect(taskbar.state.blank?).to be(true)
  52. end
  53. it 'check last_contact' do
  54. UserInfo.current_user_id = 1
  55. last_contact1 = taskbar.last_contact
  56. travel 2.minutes
  57. taskbar.notify = false
  58. taskbar.state = { a: 1 }
  59. taskbar.save!
  60. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  61. last_contact2 = taskbar.last_contact
  62. travel 2.minutes
  63. taskbar.notify = true
  64. taskbar.save!
  65. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  66. expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s)
  67. travel 2.minutes
  68. taskbar.notify = true
  69. taskbar.save!
  70. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  71. expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s)
  72. travel 2.minutes
  73. taskbar.notify = false
  74. taskbar.state = { a: 1 }
  75. taskbar.save!
  76. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  77. expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s)
  78. travel 2.minutes
  79. taskbar.notify = true
  80. taskbar.state = { a: 1 }
  81. taskbar.save!
  82. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  83. expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s)
  84. travel 2.minutes
  85. taskbar.notify = true
  86. taskbar.state = { a: 2 }
  87. taskbar.save!
  88. expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s)
  89. expect(taskbar.last_contact.to_s).not_to eq(last_contact2.to_s)
  90. end
  91. end
  92. context 'multiple creation' do
  93. it 'create tasks' do
  94. described_class.destroy_all
  95. UserInfo.current_user_id = 1
  96. taskbar1 = described_class.create(
  97. client_id: 123,
  98. key: 'Ticket-1234',
  99. callback: 'TicketZoom',
  100. params: {
  101. id: 1234,
  102. },
  103. state: {},
  104. prio: 1,
  105. notify: false,
  106. user_id: 1,
  107. )
  108. UserInfo.current_user_id = 2
  109. taskbar2 = described_class.create(
  110. client_id: 123,
  111. key: 'Ticket-1234',
  112. callback: 'TicketZoom',
  113. params: {
  114. id: 1234,
  115. },
  116. state: {},
  117. prio: 2,
  118. notify: false,
  119. user_id: 1,
  120. )
  121. taskbar1.reload
  122. expect(taskbar1.preferences[:tasks].count).to eq(2)
  123. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  124. expect(taskbar1.preferences[:tasks][0][:changed]).to be(false)
  125. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  126. expect(taskbar1.preferences[:tasks][1][:changed]).to be(false)
  127. taskbar2.reload
  128. expect(taskbar2.preferences[:tasks].count).to eq(2)
  129. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  130. expect(taskbar2.preferences[:tasks][0][:changed]).to be(false)
  131. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  132. expect(taskbar2.preferences[:tasks][1][:changed]).to be(false)
  133. taskbar3 = described_class.create(
  134. client_id: 123,
  135. key: 'Ticket-4444',
  136. callback: 'TicketZoom',
  137. params: {
  138. id: 4444,
  139. },
  140. state: {},
  141. prio: 2,
  142. notify: false,
  143. user_id: 1,
  144. )
  145. taskbar1.reload
  146. expect(taskbar1.preferences[:tasks].count).to eq(2)
  147. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  148. expect(taskbar1.preferences[:tasks][0][:changed]).to be(false)
  149. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  150. expect(taskbar1.preferences[:tasks][1][:changed]).to be(false)
  151. taskbar2.reload
  152. expect(taskbar2.preferences[:tasks].count).to eq(2)
  153. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  154. expect(taskbar2.preferences[:tasks][0][:changed]).to be(false)
  155. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  156. expect(taskbar2.preferences[:tasks][1][:changed]).to be(false)
  157. taskbar3.reload
  158. expect(taskbar3.preferences[:tasks].count).to eq(1)
  159. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  160. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  161. agent_id = create(:agent).id
  162. UserInfo.current_user_id = agent_id
  163. taskbar4 = described_class.create(
  164. client_id: 123,
  165. key: 'Ticket-1234',
  166. callback: 'TicketZoom',
  167. params: {
  168. id: 1234,
  169. },
  170. state: {},
  171. prio: 4,
  172. notify: false,
  173. user_id: 1,
  174. )
  175. taskbar1.reload
  176. expect(taskbar1.preferences[:tasks].count).to eq(3)
  177. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  178. expect(taskbar1.preferences[:tasks][0][:changed]).to be(false)
  179. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  180. expect(taskbar1.preferences[:tasks][1][:changed]).to be(false)
  181. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  182. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  183. taskbar2.reload
  184. expect(taskbar2.preferences[:tasks].count).to eq(3)
  185. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  186. expect(taskbar2.preferences[:tasks][0][:changed]).to be(false)
  187. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  188. expect(taskbar2.preferences[:tasks][1][:changed]).to be(false)
  189. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  190. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  191. taskbar3.reload
  192. expect(taskbar3.preferences[:tasks].count).to eq(1)
  193. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  194. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  195. taskbar4.reload
  196. expect(taskbar4.preferences[:tasks].count).to eq(3)
  197. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  198. expect(taskbar4.preferences[:tasks][0][:changed]).to be(false)
  199. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  200. expect(taskbar4.preferences[:tasks][1][:changed]).to be(false)
  201. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  202. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  203. UserInfo.current_user_id = 2
  204. taskbar2.state = { article: {}, ticket: {} }
  205. taskbar2.save!
  206. taskbar1.reload
  207. expect(taskbar1.preferences[:tasks].count).to eq(3)
  208. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  209. expect(taskbar1.preferences[:tasks][0][:changed]).to be(false)
  210. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  211. expect(taskbar1.preferences[:tasks][1][:changed]).to be(false)
  212. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  213. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  214. taskbar2.reload
  215. expect(taskbar2.preferences[:tasks].count).to eq(3)
  216. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  217. expect(taskbar2.preferences[:tasks][0][:changed]).to be(false)
  218. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  219. expect(taskbar2.preferences[:tasks][1][:changed]).to be(false)
  220. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  221. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  222. taskbar3.reload
  223. expect(taskbar3.preferences[:tasks].count).to eq(1)
  224. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  225. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  226. taskbar4.reload
  227. expect(taskbar4.preferences[:tasks].count).to eq(3)
  228. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  229. expect(taskbar4.preferences[:tasks][0][:changed]).to be(false)
  230. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  231. expect(taskbar4.preferences[:tasks][1][:changed]).to be(false)
  232. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  233. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  234. UserInfo.current_user_id = 2
  235. taskbar2.state = { article: { body: 'some body' }, ticket: {} }
  236. taskbar2.save!
  237. taskbar1.reload
  238. expect(taskbar1.preferences[:tasks].count).to eq(3)
  239. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  240. expect(taskbar1.preferences[:tasks][0][:changed]).to be(false)
  241. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  242. expect(taskbar1.preferences[:tasks][1][:changed]).to be(true)
  243. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  244. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  245. taskbar2.reload
  246. expect(taskbar2.preferences[:tasks].count).to eq(3)
  247. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  248. expect(taskbar2.preferences[:tasks][0][:changed]).to be(false)
  249. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  250. expect(taskbar2.preferences[:tasks][1][:changed]).to be(true)
  251. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  252. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  253. taskbar3.reload
  254. expect(taskbar3.preferences[:tasks].count).to eq(1)
  255. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  256. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  257. taskbar4.reload
  258. expect(taskbar4.preferences[:tasks].count).to eq(3)
  259. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  260. expect(taskbar4.preferences[:tasks][0][:changed]).to be(false)
  261. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  262. expect(taskbar4.preferences[:tasks][1][:changed]).to be(true)
  263. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  264. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  265. UserInfo.current_user_id = 1
  266. taskbar1.state = { article: { body: '' }, ticket: { state_id: 123 } }
  267. taskbar1.save!
  268. taskbar1.reload
  269. expect(taskbar1.preferences[:tasks].count).to eq(3)
  270. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  271. expect(taskbar1.preferences[:tasks][0][:changed]).to be(true)
  272. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  273. expect(taskbar1.preferences[:tasks][1][:changed]).to be(true)
  274. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  275. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  276. taskbar2.reload
  277. expect(taskbar2.preferences[:tasks].count).to eq(3)
  278. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  279. expect(taskbar2.preferences[:tasks][0][:changed]).to be(true)
  280. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  281. expect(taskbar2.preferences[:tasks][1][:changed]).to be(true)
  282. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  283. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  284. taskbar3.reload
  285. expect(taskbar3.preferences[:tasks].count).to eq(1)
  286. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  287. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  288. taskbar4.reload
  289. expect(taskbar4.preferences[:tasks].count).to eq(3)
  290. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  291. expect(taskbar4.preferences[:tasks][0][:changed]).to be(true)
  292. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  293. expect(taskbar4.preferences[:tasks][1][:changed]).to be(true)
  294. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  295. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  296. taskbar1_last_contact = taskbar1.last_contact.to_s
  297. taskbar2_last_contact = taskbar2.last_contact.to_s
  298. taskbar3_last_contact = taskbar3.last_contact.to_s
  299. taskbar4_last_contact = taskbar4.last_contact.to_s
  300. travel 2.minutes
  301. UserInfo.current_user_id = 2
  302. taskbar2.state = { article: { body: 'some body' }, ticket: {} }
  303. taskbar2.notify = true
  304. taskbar2.save!
  305. taskbar1.reload
  306. expect(taskbar1.preferences[:tasks].count).to eq(3)
  307. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  308. expect(taskbar1.preferences[:tasks][0][:changed]).to be(true)
  309. expect(taskbar1.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  310. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  311. expect(taskbar1.preferences[:tasks][1][:changed]).to be(true)
  312. expect(taskbar1.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact)
  313. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  314. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  315. expect(taskbar1.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  316. taskbar2.reload
  317. expect(taskbar2.preferences[:tasks].count).to eq(3)
  318. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  319. expect(taskbar2.preferences[:tasks][0][:changed]).to be(true)
  320. expect(taskbar2.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  321. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  322. expect(taskbar2.preferences[:tasks][1][:changed]).to be(true)
  323. expect(taskbar2.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact)
  324. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  325. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  326. expect(taskbar2.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  327. taskbar3.reload
  328. expect(taskbar3.preferences[:tasks].count).to eq(1)
  329. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  330. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  331. expect(taskbar3.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar3_last_contact)
  332. taskbar4.reload
  333. expect(taskbar4.preferences[:tasks].count).to eq(3)
  334. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  335. expect(taskbar4.preferences[:tasks][0][:changed]).to be(true)
  336. expect(taskbar4.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  337. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  338. expect(taskbar4.preferences[:tasks][1][:changed]).to be(true)
  339. expect(taskbar4.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact)
  340. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  341. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  342. expect(taskbar4.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  343. UserInfo.current_user_id = 2
  344. taskbar2.state = { article: { body: 'some body 222' }, ticket: {} }
  345. taskbar2.notify = true
  346. taskbar2.save!
  347. taskbar1.reload
  348. expect(taskbar1.preferences[:tasks].count).to eq(3)
  349. expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1)
  350. expect(taskbar1.preferences[:tasks][0][:changed]).to be(true)
  351. expect(taskbar1.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  352. expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2)
  353. expect(taskbar1.preferences[:tasks][1][:changed]).to be(true)
  354. expect(taskbar1.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact)
  355. expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(agent_id)
  356. expect(taskbar1.preferences[:tasks][2][:changed]).to be(false)
  357. expect(taskbar1.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  358. taskbar2.reload
  359. expect(taskbar2.preferences[:tasks].count).to eq(3)
  360. expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1)
  361. expect(taskbar2.preferences[:tasks][0][:changed]).to be(true)
  362. expect(taskbar2.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  363. expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2)
  364. expect(taskbar2.preferences[:tasks][1][:changed]).to be(true)
  365. expect(taskbar2.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact)
  366. expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(agent_id)
  367. expect(taskbar2.preferences[:tasks][2][:changed]).to be(false)
  368. expect(taskbar2.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  369. taskbar3.reload
  370. expect(taskbar3.preferences[:tasks].count).to eq(1)
  371. expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2)
  372. expect(taskbar3.preferences[:tasks][0][:changed]).to be(false)
  373. expect(taskbar3.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar3_last_contact)
  374. taskbar4.reload
  375. expect(taskbar4.preferences[:tasks].count).to eq(3)
  376. expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1)
  377. expect(taskbar4.preferences[:tasks][0][:changed]).to be(true)
  378. expect(taskbar4.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact)
  379. expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2)
  380. expect(taskbar4.preferences[:tasks][1][:changed]).to be(true)
  381. expect(taskbar4.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact)
  382. expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(agent_id)
  383. expect(taskbar4.preferences[:tasks][2][:changed]).to be(false)
  384. expect(taskbar4.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact)
  385. travel_back
  386. UserInfo.current_user_id = nil
  387. end
  388. end
  389. end