chat_test.rb 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. # encoding: utf-8
  2. require 'browser_test_helper'
  3. class ChatTest < TestCase
  4. def test_basic
  5. agent = browser_instance
  6. login(
  7. browser: agent,
  8. username: 'master@example.com',
  9. password: 'test',
  10. url: browser_url,
  11. )
  12. tasks_close_all(
  13. browser: agent,
  14. )
  15. # disable chat
  16. click(
  17. browser: agent,
  18. css: 'a[href="#manage"]',
  19. )
  20. click(
  21. browser: agent,
  22. css: 'a[href="#channels/chat"]',
  23. )
  24. switch(
  25. browser: agent,
  26. css: '#content .js-chatSetting',
  27. type: 'off',
  28. )
  29. sleep 25 # wait for rerendering
  30. click(
  31. browser: agent,
  32. css: 'a[href="#customer_chat"]',
  33. )
  34. match(
  35. browser: agent,
  36. css: '.active.content',
  37. value: 'disabled',
  38. )
  39. customer = browser_instance
  40. location(
  41. browser: customer,
  42. url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
  43. )
  44. sleep 4
  45. exists_not(
  46. browser: customer,
  47. css: '.zammad-chat',
  48. )
  49. match(
  50. browser: customer,
  51. css: '.settings',
  52. value: '{"state":"chat_disabled"}',
  53. )
  54. click(
  55. browser: agent,
  56. css: 'a[href="#manage"]',
  57. )
  58. click(
  59. browser: agent,
  60. css: 'a[href="#channels/chat"]',
  61. )
  62. switch(
  63. browser: agent,
  64. css: '#content .js-chatSetting',
  65. type: 'on',
  66. )
  67. sleep 15 # wait for rerendering
  68. switch(
  69. browser: agent,
  70. css: '#navigation .js-switch',
  71. type: 'off',
  72. )
  73. click(
  74. browser: agent,
  75. css: 'a[href="#customer_chat"]',
  76. wait: 2,
  77. )
  78. match_not(
  79. browser: agent,
  80. css: '.active.content',
  81. value: 'disabled',
  82. )
  83. reload(
  84. browser: customer,
  85. )
  86. sleep 4
  87. exists_not(
  88. browser: customer,
  89. css: '.zammad-chat',
  90. )
  91. match_not(
  92. browser: customer,
  93. css: '.settings',
  94. value: '{"state":"chat_disabled"}',
  95. )
  96. match(
  97. browser: customer,
  98. css: '.settings',
  99. value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
  100. )
  101. click(
  102. browser: agent,
  103. css: 'a[href="#customer_chat"]',
  104. )
  105. switch(
  106. browser: agent,
  107. css: '#navigation .js-switch',
  108. type: 'on',
  109. )
  110. reload(
  111. browser: customer,
  112. )
  113. watch_for(
  114. browser: customer,
  115. css: '.zammad-chat',
  116. timeout: 5,
  117. )
  118. match_not(
  119. browser: customer,
  120. css: '.settings',
  121. value: '{"state":"chat_disabled"}',
  122. )
  123. match_not(
  124. browser: customer,
  125. css: '.settings',
  126. value: '{"event":"chat_status_customer","data":{"state":"offline"}}',
  127. )
  128. match(
  129. browser: customer,
  130. css: '.settings',
  131. value: '"data":{"state":"online"}',
  132. )
  133. # init chat
  134. click(
  135. browser: customer,
  136. css: '.js-chat-open',
  137. )
  138. exists(
  139. browser: customer,
  140. css: '.zammad-chat-is-shown',
  141. )
  142. watch_for(
  143. browser: customer,
  144. css: '.zammad-chat',
  145. value: '(waiting|warte)',
  146. )
  147. watch_for(
  148. browser: agent,
  149. css: '.js-chatMenuItem .counter',
  150. value: '1',
  151. )
  152. click(
  153. browser: customer,
  154. css: '.js-chat-close',
  155. )
  156. watch_for_disappear(
  157. browser: customer,
  158. css: '.zammad-chat',
  159. value: '(waiting|warte)',
  160. )
  161. watch_for_disappear(
  162. browser: agent,
  163. css: '.js-chatMenuItem .counter',
  164. )
  165. end
  166. def test_basic_usecase1
  167. agent = browser_instance
  168. login(
  169. browser: agent,
  170. username: 'master@example.com',
  171. password: 'test',
  172. url: browser_url,
  173. )
  174. tasks_close_all(
  175. browser: agent,
  176. )
  177. click(
  178. browser: agent,
  179. css: 'a[href="#customer_chat"]',
  180. )
  181. agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
  182. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  183. customer = browser_instance
  184. location(
  185. browser: customer,
  186. url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
  187. )
  188. watch_for(
  189. browser: customer,
  190. css: '.zammad-chat',
  191. timeout: 5,
  192. )
  193. click(
  194. browser: customer,
  195. css: '.js-chat-open',
  196. )
  197. exists(
  198. browser: customer,
  199. css: '.zammad-chat-is-shown',
  200. )
  201. watch_for(
  202. browser: customer,
  203. css: '.zammad-chat',
  204. value: '(waiting|warte)',
  205. )
  206. click(
  207. browser: agent,
  208. css: '.active .js-acceptChat',
  209. )
  210. sleep 2
  211. exists_not(
  212. browser: agent,
  213. css: '.active .chat-window .chat-status.is-modified',
  214. )
  215. set(
  216. browser: agent,
  217. css: '.active .chat-window .js-customerChatInput',
  218. value: 'my name is me',
  219. )
  220. click(
  221. browser: agent,
  222. css: '.active .chat-window .js-send',
  223. )
  224. watch_for(
  225. browser: customer,
  226. css: '.zammad-chat .zammad-chat-agent-status',
  227. value: 'online',
  228. )
  229. watch_for(
  230. browser: customer,
  231. css: '.zammad-chat',
  232. value: 'my name is me',
  233. )
  234. set(
  235. browser: customer,
  236. css: '.zammad-chat .zammad-chat-input',
  237. value: 'my name is customer',
  238. )
  239. click(
  240. browser: customer,
  241. css: '.zammad-chat .zammad-chat-send',
  242. )
  243. watch_for(
  244. browser: agent,
  245. css: '.active .chat-window',
  246. value: 'my name is customer',
  247. )
  248. exists(
  249. browser: agent,
  250. css: '.active .chat-window .chat-status.is-modified',
  251. )
  252. click(
  253. browser: agent,
  254. css: '.active .chat-window .js-customerChatInput',
  255. )
  256. exists_not(
  257. browser: agent,
  258. css: '.active .chat-window .chat-status.is-modified',
  259. )
  260. click(
  261. browser: customer,
  262. css: '.js-chat-close',
  263. )
  264. watch_for(
  265. browser: agent,
  266. css: '.active .chat-window',
  267. value: 'closed the conversation',
  268. )
  269. end
  270. def test_basic_usecase2
  271. agent = browser_instance
  272. login(
  273. browser: agent,
  274. username: 'master@example.com',
  275. password: 'test',
  276. url: browser_url,
  277. )
  278. tasks_close_all(
  279. browser: agent,
  280. )
  281. click(
  282. browser: agent,
  283. css: 'a[href="#customer_chat"]',
  284. )
  285. agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
  286. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  287. customer = browser_instance
  288. location(
  289. browser: customer,
  290. url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
  291. )
  292. watch_for(
  293. browser: customer,
  294. css: '.zammad-chat',
  295. timeout: 5,
  296. )
  297. click(
  298. browser: customer,
  299. css: '.js-chat-open',
  300. )
  301. exists(
  302. browser: customer,
  303. css: '.zammad-chat-is-shown',
  304. )
  305. watch_for(
  306. browser: customer,
  307. css: '.zammad-chat',
  308. value: '(waiting|warte)',
  309. )
  310. click(
  311. browser: agent,
  312. css: '.active .js-acceptChat',
  313. )
  314. sleep 2
  315. exists_not(
  316. browser: agent,
  317. css: '.active .chat-window .chat-status.is-modified',
  318. )
  319. # keep focus outside of chat window to check .chat-status.is-modified later
  320. click(
  321. browser: agent,
  322. css: '#global-search',
  323. )
  324. watch_for(
  325. browser: customer,
  326. css: '.zammad-chat .zammad-chat-agent-status',
  327. value: 'online',
  328. )
  329. set(
  330. browser: customer,
  331. css: '.zammad-chat .zammad-chat-input',
  332. value: 'my name is customer',
  333. )
  334. click(
  335. browser: customer,
  336. css: '.zammad-chat .zammad-chat-send',
  337. )
  338. watch_for(
  339. browser: agent,
  340. css: '.active .chat-window',
  341. value: 'my name is customer',
  342. )
  343. exists(
  344. browser: agent,
  345. css: '.active .chat-window .chat-status.is-modified',
  346. )
  347. set(
  348. browser: agent,
  349. css: '.active .chat-window .js-customerChatInput',
  350. value: 'my name is me',
  351. )
  352. exists_not(
  353. browser: agent,
  354. css: '.active .chat-window .chat-status.is-modified',
  355. )
  356. click(
  357. browser: agent,
  358. css: '.active .chat-window .js-send',
  359. )
  360. watch_for(
  361. browser: customer,
  362. css: '.zammad-chat',
  363. value: 'my name is me',
  364. )
  365. click(
  366. browser: agent,
  367. css: '.active .chat-window .js-disconnect',
  368. )
  369. click(
  370. browser: agent,
  371. css: '.active .chat-window .js-close',
  372. )
  373. watch_for(
  374. browser: customer,
  375. css: '.zammad-chat .zammad-chat-agent-status',
  376. value: 'offline',
  377. )
  378. watch_for(
  379. browser: customer,
  380. css: '.zammad-chat',
  381. value: 'Chat closed by',
  382. )
  383. click(
  384. browser: customer,
  385. css: '.zammad-chat .js-chat-close',
  386. )
  387. watch_for_disappear(
  388. browser: customer,
  389. css: '.zammad-chat-is-open',
  390. )
  391. agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
  392. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  393. sleep 2
  394. click(
  395. browser: customer,
  396. css: '.js-chat-open',
  397. )
  398. exists(
  399. browser: customer,
  400. css: '.zammad-chat-is-shown',
  401. )
  402. watch_for(
  403. browser: customer,
  404. css: '.zammad-chat',
  405. value: '(waiting|warte)',
  406. )
  407. click(
  408. browser: agent,
  409. css: '.active .js-acceptChat',
  410. )
  411. sleep 2
  412. exists_not(
  413. browser: agent,
  414. css: '.active .chat-window .chat-status.is-modified',
  415. )
  416. exists(
  417. browser: agent,
  418. css: '.active .chat-window .chat-status',
  419. )
  420. end
  421. def test_basic_usecase3
  422. agent = browser_instance
  423. login(
  424. browser: agent,
  425. username: 'master@example.com',
  426. password: 'test',
  427. url: browser_url,
  428. )
  429. tasks_close_all(
  430. browser: agent,
  431. )
  432. click(
  433. browser: agent,
  434. css: 'a[href="#customer_chat"]',
  435. )
  436. agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
  437. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  438. # set chat preferences
  439. click(
  440. browser: agent,
  441. css: '.active .js-settings',
  442. )
  443. set(
  444. browser: agent,
  445. css: '.modal [name="chat::phrase::1"]',
  446. value: 'Hi Stranger!;My Greeting',
  447. )
  448. click(
  449. browser: agent,
  450. css: '.modal .js-submit',
  451. )
  452. customer = browser_instance
  453. location(
  454. browser: customer,
  455. url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
  456. )
  457. watch_for(
  458. browser: customer,
  459. css: '.zammad-chat',
  460. timeout: 5,
  461. )
  462. click(
  463. browser: customer,
  464. css: '.js-chat-open',
  465. )
  466. exists(
  467. browser: customer,
  468. css: '.zammad-chat-is-shown',
  469. )
  470. watch_for(
  471. browser: agent,
  472. css: '.active .js-badgeWaitingCustomers',
  473. value: '1',
  474. )
  475. click(
  476. browser: agent,
  477. css: '.active .js-acceptChat',
  478. )
  479. watch_for(
  480. browser: customer,
  481. css: '.zammad-chat',
  482. value: 'Hi Stranger|My Greeting',
  483. )
  484. watch_for(
  485. browser: customer,
  486. css: '.zammad-chat .zammad-chat-agent-status',
  487. value: 'online',
  488. )
  489. set(
  490. browser: agent,
  491. css: '.active .chat-window .js-customerChatInput',
  492. value: 'my name is me',
  493. )
  494. click(
  495. browser: agent,
  496. css: '.active .chat-window .js-send',
  497. )
  498. watch_for(
  499. browser: customer,
  500. css: '.zammad-chat',
  501. value: 'my name is me',
  502. )
  503. set(
  504. browser: customer,
  505. css: '.zammad-chat .zammad-chat-input',
  506. value: 'my name is customer',
  507. )
  508. click(
  509. browser: customer,
  510. css: '.zammad-chat .zammad-chat-send',
  511. )
  512. watch_for(
  513. browser: agent,
  514. css: '.active .chat-window',
  515. value: 'my name is customer',
  516. )
  517. click(
  518. browser: agent,
  519. css: '.active .chat-window .js-customerChatInput',
  520. )
  521. reload(
  522. browser: customer,
  523. )
  524. exists(
  525. browser: customer,
  526. css: '.zammad-chat',
  527. )
  528. watch_for(
  529. browser: customer,
  530. css: '.zammad-chat',
  531. value: 'Hi Stranger|My Greeting',
  532. )
  533. watch_for(
  534. browser: customer,
  535. css: '.zammad-chat',
  536. value: 'my name is me',
  537. )
  538. watch_for(
  539. browser: customer,
  540. css: '.zammad-chat',
  541. value: 'my name is customer',
  542. )
  543. click(
  544. browser: customer,
  545. css: '.js-chat-close',
  546. )
  547. watch_for(
  548. browser: agent,
  549. css: '.active .chat-window',
  550. value: 'closed the conversation',
  551. )
  552. end
  553. def test_timeouts
  554. agent = browser_instance
  555. login(
  556. browser: agent,
  557. username: 'master@example.com',
  558. password: 'test',
  559. url: browser_url,
  560. )
  561. tasks_close_all(
  562. browser: agent,
  563. )
  564. click(
  565. browser: agent,
  566. css: 'a[href="#customer_chat"]',
  567. )
  568. agent.find_elements( { css: '.active .chat-window .js-disconnect' } ).each(&:click)
  569. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  570. exists(
  571. browser: agent,
  572. css: '#navigation .js-switch input[checked]'
  573. )
  574. # no customer action, hide widget
  575. customer = browser_instance
  576. location(
  577. browser: customer,
  578. url: "#{browser_url}/assets/chat/znuny.html?port=#{ENV['WS_PORT']}",
  579. )
  580. watch_for(
  581. browser: customer,
  582. css: '.zammad-chat',
  583. timeout: 5,
  584. )
  585. watch_for_disappear(
  586. browser: customer,
  587. css: '.zammad-chat',
  588. timeout: 95,
  589. )
  590. # no agent action, show sorry screen
  591. reload(
  592. browser: customer,
  593. )
  594. exists(
  595. browser: customer,
  596. css: '.zammad-chat',
  597. )
  598. click(
  599. browser: customer,
  600. css: '.js-chat-open',
  601. )
  602. watch_for(
  603. browser: customer,
  604. css: '.zammad-chat',
  605. value: '(waiting|warte)',
  606. timeout: 35,
  607. )
  608. watch_for(
  609. browser: customer,
  610. css: '.zammad-chat',
  611. value: '(takes longer|dauert länger)',
  612. timeout: 120,
  613. )
  614. # check if agent is offline, idle timeout, chat not answered
  615. exists_not(
  616. browser: agent,
  617. css: '#navigation .js-switch input[checked]'
  618. )
  619. switch(
  620. browser: agent,
  621. css: '#navigation .js-switch',
  622. type: 'on',
  623. )
  624. # no customer action, show sorry screen
  625. reload(
  626. browser: customer,
  627. )
  628. exists(
  629. browser: customer,
  630. css: '.zammad-chat',
  631. )
  632. click(
  633. browser: customer,
  634. css: '.js-chat-open',
  635. )
  636. watch_for(
  637. browser: agent,
  638. css: '.js-chatMenuItem .counter',
  639. value: '1',
  640. )
  641. click(
  642. browser: agent,
  643. css: '.active .js-acceptChat',
  644. )
  645. sleep 2
  646. set(
  647. browser: agent,
  648. css: '.active .chat-window .js-customerChatInput',
  649. value: 'agent is asking',
  650. )
  651. click(
  652. browser: agent,
  653. css: '.active .chat-window .js-send',
  654. )
  655. watch_for(
  656. browser: customer,
  657. css: '.zammad-chat',
  658. value: 'agent is asking',
  659. )
  660. watch_for(
  661. browser: customer,
  662. css: '.zammad-chat',
  663. value: '(Since you didn\'t respond|Da Sie in den letzten)',
  664. timeout: 150,
  665. )
  666. agent.find_elements( { css: '.active .chat-window .js-close' } ).each(&:click)
  667. sleep 2
  668. click(
  669. browser: customer,
  670. css: '.js-restart',
  671. )
  672. sleep 5
  673. click(
  674. browser: customer,
  675. css: '.js-chat-open',
  676. )
  677. exists(
  678. browser: customer,
  679. css: '.zammad-chat-is-shown',
  680. )
  681. watch_for(
  682. browser: customer,
  683. css: '.zammad-chat',
  684. value: '(waiting|warte)',
  685. )
  686. click(
  687. browser: agent,
  688. css: '.active .js-acceptChat',
  689. )
  690. sleep 2
  691. exists(
  692. browser: agent,
  693. css: '.active .chat-window .chat-status',
  694. )
  695. set(
  696. browser: agent,
  697. css: '.active .chat-window .js-customerChatInput',
  698. value: 'my name is me',
  699. )
  700. click(
  701. browser: agent,
  702. css: '.active .chat-window .js-send',
  703. )
  704. watch_for(
  705. browser: customer,
  706. css: '.zammad-chat .zammad-chat-agent-status',
  707. value: 'online',
  708. )
  709. watch_for(
  710. browser: customer,
  711. css: '.zammad-chat',
  712. value: 'my name is me',
  713. )
  714. end
  715. end