roomslist.js 7.2 KB

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