agent_ticket_tag_test.rb 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. require 'browser_test_helper'
  3. class AgentTicketTagTest < TestCase
  4. def test_a_tags
  5. @browser = browser_instance
  6. login(
  7. username: 'agent1@example.com',
  8. password: 'test',
  9. url: browser_url,
  10. )
  11. tasks_close_all
  12. # set tag (by tab)
  13. ticket_create(
  14. data: {
  15. customer: 'nico',
  16. group: 'Users',
  17. title: 'some subject 123äöü - tags 1',
  18. body: 'some body 123äöü - tags 1',
  19. },
  20. do_not_submit: true,
  21. )
  22. sleep 1
  23. set(
  24. css: '.active .ticket-form-bottom .token-input',
  25. value: 'tag1, tag2',
  26. )
  27. sendkey(value: :tab)
  28. # reload browser
  29. sleep 6
  30. reload
  31. sleep 2
  32. click(
  33. css: '.active .newTicket button.js-submit',
  34. )
  35. sleep 5
  36. if !@browser.current_url.match?(%r{#{Regexp.quote('#ticket/zoom/')}})
  37. raise 'Unable to create ticket!'
  38. end
  39. # verify tags
  40. tags_verify(
  41. tags: {
  42. 'tag1' => true,
  43. 'tag2' => true,
  44. 'tag3' => false,
  45. 'tag4' => false,
  46. }
  47. )
  48. # set tag (by blur)
  49. ticket_create(
  50. data: {
  51. customer: 'nico',
  52. group: 'Users',
  53. title: 'some subject 123äöü - tags 2',
  54. body: 'some body 123äöü - tags 2',
  55. },
  56. do_not_submit: true,
  57. )
  58. sleep 1
  59. set(
  60. css: '.active .ticket-form-bottom .token-input',
  61. value: 'tag3, tag4',
  62. )
  63. click(css: '#global-search')
  64. click(css: '.active .newTicket button.js-submit')
  65. sleep 5
  66. if !@browser.current_url.match?(%r{#{Regexp.quote('#ticket/zoom/')}})
  67. raise 'Unable to create ticket!'
  68. end
  69. # verify tags
  70. tags_verify(
  71. tags: {
  72. 'tag1' => false,
  73. 'tag2' => false,
  74. 'tag3' => true,
  75. 'tag4' => true,
  76. }
  77. )
  78. ticket3 = ticket_create(
  79. data: {
  80. customer: 'nico',
  81. group: 'Users',
  82. title: 'some subject 123äöü - tags 3',
  83. body: 'some body 123äöü - tags 3',
  84. },
  85. )
  86. # verify changes in second browser
  87. browser2 = browser_instance
  88. login(
  89. browser: browser2,
  90. username: 'admin@example.com',
  91. password: 'test',
  92. url: browser_url,
  93. )
  94. ticket_open_by_search(
  95. browser: browser2,
  96. number: ticket3[:number],
  97. )
  98. empty_search(
  99. browser: browser2,
  100. )
  101. # set tag #1
  102. click(
  103. css: '.content.active .js-newTagLabel',
  104. )
  105. set(
  106. css: '.content.active .js-newTagInput',
  107. value: 'tag1',
  108. )
  109. sleep 2
  110. sendkey(
  111. value: :enter,
  112. )
  113. sleep 10
  114. # set tag #2
  115. click(
  116. css: '.content.active .js-newTagLabel',
  117. )
  118. set(
  119. css: '.content.active .js-newTagInput',
  120. value: 'tag 2',
  121. )
  122. sendkey(
  123. value: :enter,
  124. )
  125. sleep 10
  126. # set tag #3 + #4
  127. click(
  128. css: '.content.active .js-newTagLabel',
  129. )
  130. set(
  131. css: '.content.active .js-newTagInput',
  132. value: 'tag3, tag4',
  133. )
  134. sendkey(
  135. value: :enter,
  136. )
  137. sleep 10
  138. # set tag #5
  139. click(
  140. css: '.content.active .js-newTagLabel',
  141. )
  142. set(
  143. css: '.content.active .js-newTagInput',
  144. value: 'tag5',
  145. )
  146. click(
  147. css: '#global-search',
  148. )
  149. sleep 10
  150. # verify tags
  151. tags_verify(
  152. tags: {
  153. 'tag1' => true,
  154. 'tag 2' => true,
  155. 'tag2' => false,
  156. 'tag3' => true,
  157. 'tag4' => true,
  158. 'tag5' => true,
  159. }
  160. )
  161. sleep 4
  162. tags_verify(
  163. browser: browser2,
  164. tags: {
  165. 'tag1' => true,
  166. 'tag 2' => true,
  167. 'tag2' => false,
  168. 'tag3' => true,
  169. 'tag4' => true,
  170. 'tag5' => true,
  171. }
  172. )
  173. # reload browser
  174. reload
  175. sleep 2
  176. # verify tags
  177. tags_verify(
  178. tags: {
  179. 'tag1' => true,
  180. 'tag 2' => true,
  181. 'tag2' => false,
  182. 'tag3' => true,
  183. 'tag4' => true,
  184. 'tag5' => true,
  185. }
  186. )
  187. tags_verify(
  188. browser: browser2,
  189. tags: {
  190. 'tag1' => true,
  191. 'tag 2' => true,
  192. 'tag2' => false,
  193. 'tag3' => true,
  194. 'tag4' => true,
  195. 'tag5' => true,
  196. }
  197. )
  198. # remove tag1
  199. click(
  200. css: '.content.active .tags .js-delete',
  201. )
  202. sleep 4
  203. # verify tags
  204. tags_verify(
  205. tags: {
  206. 'tag1' => false,
  207. 'tag 2' => true,
  208. 'tag2' => false,
  209. 'tag3' => true,
  210. 'tag4' => true,
  211. 'tag5' => true,
  212. }
  213. )
  214. tags_verify(
  215. browser: browser2,
  216. tags: {
  217. 'tag1' => false,
  218. 'tag 2' => true,
  219. 'tag2' => false,
  220. 'tag3' => true,
  221. 'tag4' => true,
  222. 'tag5' => true,
  223. }
  224. )
  225. # verify changes via admin interface
  226. click(
  227. browser: browser2,
  228. css: 'a[href="#manage"]',
  229. )
  230. click(
  231. browser: browser2,
  232. css: '.content.active a[href="#manage/tags"]',
  233. )
  234. sleep 3
  235. execute(
  236. browser: browser2,
  237. js: "$('.content.active .js-name:contains(\"tag3\")').trigger('click')",
  238. )
  239. modal_ready(
  240. browser: browser2,
  241. )
  242. set(
  243. browser: browser2,
  244. css: '.modal [name="name"]',
  245. value: 'TAGXX',
  246. )
  247. click(
  248. browser: browser2,
  249. css: '.modal .js-submit',
  250. )
  251. modal_disappear(browser: browser2)
  252. ticket_open_by_search(
  253. browser: browser2,
  254. number: ticket3[:number],
  255. )
  256. empty_search(
  257. browser: browser2,
  258. )
  259. # verify tags
  260. tags_verify(
  261. tags: {
  262. 'tag1' => false,
  263. 'tag 2' => true,
  264. 'tag2' => false,
  265. 'tag3' => false,
  266. 'tag4' => true,
  267. 'tag5' => true,
  268. 'TAGXX' => true,
  269. }
  270. )
  271. tags_verify(
  272. browser: browser2,
  273. tags: {
  274. 'tag1' => false,
  275. 'tag 2' => true,
  276. 'tag2' => false,
  277. 'tag3' => false,
  278. 'tag4' => true,
  279. 'tag5' => true,
  280. 'TAGXX' => true,
  281. }
  282. )
  283. click(
  284. browser: browser2,
  285. css: 'a[href="#manage"]',
  286. )
  287. click(
  288. browser: browser2,
  289. css: '.content.active a[href="#manage/tags"]',
  290. )
  291. sleep 3
  292. execute(
  293. browser: browser2,
  294. js: "$('.content.active .js-name:contains(\"tag5\")').closest('tr').find('.js-delete').trigger('click')",
  295. )
  296. modal_ready(
  297. browser: browser2,
  298. )
  299. click(
  300. browser: browser2,
  301. css: '.modal .js-submit',
  302. )
  303. modal_disappear(browser: browser2)
  304. ticket_open_by_search(
  305. browser: browser2,
  306. number: ticket3[:number],
  307. )
  308. # verify tags
  309. tags_verify(
  310. tags: {
  311. 'tag1' => false,
  312. 'tag 2' => true,
  313. 'tag2' => false,
  314. 'tag3' => false,
  315. 'tag4' => true,
  316. 'tag5' => false,
  317. 'TAGXX' => true,
  318. }
  319. )
  320. tags_verify(
  321. browser: browser2,
  322. tags: {
  323. 'tag1' => false,
  324. 'tag 2' => true,
  325. 'tag2' => false,
  326. 'tag3' => false,
  327. 'tag4' => true,
  328. 'tag5' => false,
  329. 'TAGXX' => true,
  330. }
  331. )
  332. end
  333. def test_b_tags
  334. tag_prefix = 'tag6'
  335. @browser = browser_instance
  336. login(
  337. username: 'admin@example.com',
  338. password: 'test',
  339. url: browser_url,
  340. )
  341. tasks_close_all
  342. click(css: 'a[href="#manage"]')
  343. click(css: '.content.active a[href="#manage/tags"]')
  344. switch(
  345. css: '.content.active .js-newTagSetting',
  346. type: 'off',
  347. )
  348. set(
  349. css: '.content.active .js-create input[name="name"]',
  350. value: "#{tag_prefix} A",
  351. )
  352. click(css: '.content.active .js-create .js-submit')
  353. set(
  354. css: '.content.active .js-create input[name="name"]',
  355. value: "#{tag_prefix} a",
  356. )
  357. click(css: '.content.active .js-create .js-submit')
  358. set(
  359. css: '.content.active .js-create input[name="name"]',
  360. value: "#{tag_prefix} B",
  361. )
  362. click(css: '.content.active .js-create .js-submit')
  363. set(
  364. css: '.content.active .js-create input[name="name"]',
  365. value: "#{tag_prefix} C",
  366. )
  367. click(css: '.content.active .js-create .js-submit')
  368. # set tag (by tab)
  369. ticket_create(
  370. data: {
  371. customer: 'nico',
  372. group: 'Users',
  373. title: 'some subject 123äöü - tags no new 1',
  374. body: 'some body 123äöü - tags no new 1',
  375. },
  376. do_not_submit: true,
  377. )
  378. sleep 1
  379. set(
  380. css: '.active .ticket-form-bottom .token-input',
  381. value: "#{tag_prefix} A",
  382. )
  383. sleep 2
  384. sendkey(value: :tab)
  385. sleep 1
  386. set(
  387. css: '.active .ticket-form-bottom .token-input',
  388. value: "#{tag_prefix} a",
  389. )
  390. sleep 2
  391. sendkey(value: :tab)
  392. sleep 1
  393. set(
  394. css: '.active .ticket-form-bottom .token-input',
  395. value: "#{tag_prefix} B",
  396. )
  397. sleep 2
  398. sendkey(value: :tab)
  399. sleep 1
  400. set(
  401. css: '.active .ticket-form-bottom .token-input',
  402. value: 'NOT EXISTING',
  403. )
  404. sleep 2
  405. sendkey(value: :tab)
  406. sleep 1
  407. click(
  408. css: '.active .newTicket button.js-submit',
  409. )
  410. sleep 5
  411. if !@browser.current_url.match?(%r{#{Regexp.quote('#ticket/zoom/')}})
  412. raise 'Unable to create ticket!'
  413. end
  414. # verify tags
  415. tags_verify(
  416. tags: {
  417. "#{tag_prefix} A" => true,
  418. "#{tag_prefix} a" => true,
  419. "#{tag_prefix} B" => true,
  420. 'NOT EXISTING' => false,
  421. }
  422. )
  423. # new ticket with tags in zoom
  424. ticket_create(
  425. data: {
  426. customer: 'nico',
  427. group: 'Users',
  428. title: 'some subject 123äöü - tags no new 2',
  429. body: 'some body 223äöü - tags no new 1',
  430. },
  431. )
  432. sleep 2
  433. click(css: '.active .sidebar .js-newTagLabel')
  434. set(
  435. css: '.active .sidebar .js-newTagInput',
  436. value: "#{tag_prefix} A",
  437. )
  438. sleep 2
  439. sendkey(value: :tab)
  440. sleep 1
  441. click(css: '.active .sidebar .js-newTagLabel')
  442. set(
  443. css: '.active .sidebar .js-newTagInput',
  444. value: "#{tag_prefix} a",
  445. )
  446. sleep 2
  447. sendkey(value: :tab)
  448. sleep 1
  449. click(css: '.active .sidebar .js-newTagLabel')
  450. set(
  451. css: '.active .sidebar .js-newTagInput',
  452. value: "#{tag_prefix} B",
  453. )
  454. sleep 2
  455. sendkey(value: :tab)
  456. sleep 1
  457. click(css: '.active .sidebar .js-newTagLabel')
  458. set(
  459. css: '.active .sidebar .js-newTagInput',
  460. value: 'NOT EXISTING',
  461. )
  462. sleep 2
  463. sendkey(value: :tab)
  464. sleep 1
  465. # verify tags
  466. tags_verify(
  467. tags: {
  468. "#{tag_prefix} A" => true,
  469. "#{tag_prefix} a" => true,
  470. "#{tag_prefix} B" => true,
  471. 'NOT EXISTING' => false,
  472. }
  473. )
  474. reload
  475. sleep 2
  476. # verify tags
  477. tags_verify(
  478. tags: {
  479. "#{tag_prefix} A" => true,
  480. "#{tag_prefix} a" => true,
  481. "#{tag_prefix} B" => true,
  482. 'NOT EXISTING' => false,
  483. }
  484. )
  485. click(css: 'a[href="#manage"]')
  486. click(css: '.content.active a[href="#manage/tags"]')
  487. switch(
  488. css: '.content.active .js-newTagSetting',
  489. type: 'on',
  490. )
  491. end
  492. end