roomslist.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. (function (root, factory) {
  2. define(["jasmine", "mock", "converse-core", "converse-roomslist", "test-utils"], factory);
  3. } (this, function (jasmine, mock, converse, roomslist, test_utils) {
  4. var _ = converse.env._;
  5. var $msg = converse.env.$msg;
  6. var Promise = converse.env.Promise;
  7. describe("The converse-roomslist plugin", function () {
  8. it("is shown under a list of open rooms in the \"Rooms\" panel", mock.initConverseWithPromises(
  9. null, ['rosterGroupsFetched'],
  10. { whitelisted_plugins: ['converse-roomslist'],
  11. allow_bookmarks: false // Makes testing easier, otherwise we
  12. // have to mock stanza traffic.
  13. },
  14. function (done, _converse) {
  15. test_utils.openControlBox().openRoomsPanel(_converse);
  16. var controlbox = _converse.chatboxviews.get('controlbox');
  17. var list = controlbox.el.querySelector('div.rooms-list-container');
  18. expect(_.includes(list.classList, 'hidden')).toBeTruthy();
  19. test_utils.openChatRoom(
  20. _converse, 'room', 'conference.shakespeare.lit', 'JC');
  21. expect(_.isUndefined(_converse.rooms_list_view)).toBeFalsy();
  22. var room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  23. expect(room_els.length).toBe(1);
  24. expect(room_els[0].innerText).toBe('room');
  25. test_utils.openChatRoom(_converse, 'lounge', 'localhost', 'dummy');
  26. room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  27. expect(room_els.length).toBe(2);
  28. var view = _converse.chatboxviews.get('room@conference.shakespeare.lit');
  29. view.close();
  30. room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  31. expect(room_els.length).toBe(1);
  32. expect(room_els[0].innerText).toBe('lounge');
  33. list = controlbox.el.querySelector('div.rooms-list-container');
  34. expect(_.includes(list.classList, 'hidden')).toBeFalsy();
  35. view = _converse.chatboxviews.get('lounge@localhost');
  36. view.close();
  37. room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  38. expect(room_els.length).toBe(0);
  39. list = controlbox.el.querySelector('div.rooms-list-container');
  40. expect(_.includes(list.classList, 'hidden')).toBeTruthy();
  41. done();
  42. }
  43. ));
  44. });
  45. describe("An room shown in the rooms list", function () {
  46. it("can be closed", mock.initConverseWithPromises(
  47. null, ['rosterGroupsFetched'],
  48. { whitelisted_plugins: ['converse-roomslist'],
  49. allow_bookmarks: false // Makes testing easier, otherwise we
  50. // have to mock stanza traffic.
  51. },
  52. function (done, _converse) {
  53. spyOn(window, 'confirm').and.callFake(function () {
  54. return true;
  55. });
  56. expect(_converse.chatboxes.length).toBe(1);
  57. test_utils.openChatRoom(
  58. _converse, 'lounge', 'conference.shakespeare.lit', 'JC');
  59. expect(_converse.chatboxes.length).toBe(2);
  60. test_utils.openControlBox().openRoomsPanel(_converse);
  61. var room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  62. expect(room_els.length).toBe(1);
  63. var close_el = _converse.rooms_list_view.el.querySelector(".close-room");
  64. close_el.click();
  65. expect(window.confirm).toHaveBeenCalledWith(
  66. 'Are you sure you want to leave the room "lounge"?');
  67. room_els = _converse.rooms_list_view.el.querySelectorAll(".open-room");
  68. expect(room_els.length).toBe(0);
  69. expect(_converse.chatboxes.length).toBe(1);
  70. done();
  71. }));
  72. it("shows unread messages directed at the user", mock.initConverseWithAsync(
  73. { whitelisted_plugins: ['converse-roomslist'],
  74. allow_bookmarks: false // Makes testing easier, otherwise we
  75. // have to mock stanza traffic.
  76. }, function (done, _converse) {
  77. test_utils.waitUntil(function () {
  78. return !_.isUndefined(_converse.rooms_list_view)
  79. }, 500)
  80. .then(function () {
  81. var room_jid = 'kitchen@conference.shakespeare.lit';
  82. test_utils.openAndEnterChatRoom(
  83. _converse, 'kitchen', 'conference.shakespeare.lit', 'romeo').then(function () {
  84. var view = _converse.chatboxviews.get(room_jid);
  85. view.model.set({'minimized': true});
  86. var contact_jid = mock.cur_names[5].replace(/ /g,'.').toLowerCase() + '@localhost';
  87. var nick = mock.chatroom_names[0];
  88. view.handleMUCMessage(
  89. $msg({
  90. from: room_jid+'/'+nick,
  91. id: (new Date()).getTime(),
  92. to: 'dummy@localhost',
  93. type: 'groupchat'
  94. }).c('body').t('foo').tree());
  95. // If the user isn't mentioned, the counter doesn't get incremented, but the text of the room is bold
  96. var room_el = _converse.rooms_list_view.el.querySelector(
  97. ".available-chatroom"
  98. );
  99. expect(_.includes(room_el.classList, 'unread-msgs'));
  100. // If the user is mentioned, the counter also gets updated
  101. view.handleMUCMessage(
  102. $msg({
  103. from: room_jid+'/'+nick,
  104. id: (new Date()).getTime(),
  105. to: 'dummy@localhost',
  106. type: 'groupchat'
  107. }).c('body').t('romeo: Your attention is required').tree()
  108. );
  109. var indicator_el = _converse.rooms_list_view.el.querySelector(".msgs-indicator");
  110. expect(indicator_el.textContent).toBe('1');
  111. view.handleMUCMessage(
  112. $msg({
  113. from: room_jid+'/'+nick,
  114. id: (new Date()).getTime(),
  115. to: 'dummy@localhost',
  116. type: 'groupchat'
  117. }).c('body').t('romeo: and another thing...').tree()
  118. );
  119. indicator_el = _converse.rooms_list_view.el.querySelector(".msgs-indicator");
  120. expect(indicator_el.textContent).toBe('2');
  121. // When the chat gets maximized again, the unread indicators are removed
  122. view.model.set({'minimized': false});
  123. indicator_el = _converse.rooms_list_view.el.querySelector(".msgs-indicator");
  124. expect(_.isNull(indicator_el));
  125. room_el = _converse.rooms_list_view.el.querySelector(".available-chatroom");
  126. expect(_.includes(room_el.classList, 'unread-msgs')).toBeFalsy();
  127. done();
  128. });
  129. });
  130. }));
  131. });
  132. }));