profiling.js 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. (function (root, factory) {
  2. define(["jasmine", "mock", "test-utils"], factory);
  3. } (this, function (jasmine, mock, test_utils) {
  4. var _ = converse.env._;
  5. var $iq = converse.env.$iq;
  6. var $pres = converse.env.$pres;
  7. var $msg = converse.env.$msg;
  8. var u = converse.env.utils;
  9. describe("Profiling", function() {
  10. it("loads lots of messages in a chat",
  11. mock.initConverse(
  12. null, ['rosterGroupsFetched', 'chatBoxesFetched'], {},
  13. async function (done, _converse) {
  14. await test_utils.openAndEnterChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
  15. const view = _converse.api.chatviews.get('lounge@montague.lit');
  16. const chat_content = view.el.querySelector('.chat-content');
  17. await test_utils.waitUntil(() => chat_content.querySelector('.message'));
  18. await test_utils.waitUntil(() => u.isVisible(chat_content.querySelector('.message')));
  19. await test_utils.waitUntil(() => !view.el.querySelector('.spinner'));
  20. const nick = mock.chatroom_names[0];
  21. const message = `First Post!`;
  22. const msg = $msg({
  23. from: 'lounge@montague.lit/'+nick,
  24. id: u.getUniqueId(),
  25. to: 'romeo@montague.lit',
  26. type: 'groupchat'
  27. }).c('body').t(message).tree();
  28. await view.model.onMessage(msg);
  29. await new Promise((resolve, reject) => view.once('messageInserted', resolve));
  30. _.range(0, 3000).forEach(i => {
  31. const message = `Message ${i.toString().padStart(5, '0')}`;
  32. const msg = $msg({
  33. from: 'lounge@montague.lit/'+nick,
  34. id: u.getUniqueId(),
  35. to: 'romeo@montague.lit',
  36. type: 'groupchat'
  37. }).c('body').t(message).tree();
  38. view.model.onMessage(msg);
  39. });
  40. done();
  41. }));
  42. xit("shows users currently present in the groupchat",
  43. mock.initConverse(
  44. null, ['rosterGroupsFetched'], {'muc_show_join_leave': false},
  45. async function (done, _converse) {
  46. test_utils.openControlBox();
  47. await test_utils.openAndEnterChatRoom(_converse, 'lounge', 'montague.lit', 'romeo');
  48. const view = _converse.chatboxviews.get('lounge@montague.lit'),
  49. occupants = view.el.querySelector('.occupant-list');
  50. _.rangeRight(3000, 0).forEach(i => {
  51. const name = `User ${i.toString().padStart(5, '0')}`;
  52. const presence = $pres({
  53. 'to': 'romeo@montague.lit/orchard',
  54. 'from': 'lounge@montague.lit/'+name
  55. }).c('x').attrs({xmlns:'http://jabber.org/protocol/muc#user'})
  56. .c('item').attrs({
  57. affiliation: 'none',
  58. jid: name.replace(/ /g,'.').toLowerCase() + '@montague.lit',
  59. });
  60. _converse.connection._dataRecv(test_utils.createRequest(presence));
  61. // expect(occupants.querySelectorAll('li').length).toBe(1+i);
  62. // const model = view.model.occupants.where({'nick': name})[0];
  63. // const index = view.model.occupants.indexOf(model);
  64. // expect(occupants.querySelectorAll('li .occupant-nick')[index].textContent.trim()).toBe(name);
  65. });
  66. done();
  67. }));
  68. xit("adds hundreds of contacts to the roster",
  69. mock.initConverse(
  70. null, ['rosterGroupsFetched'], {},
  71. function (done, _converse) {
  72. _converse.roster_groups = false;
  73. test_utils.openControlBox();
  74. expect(_converse.roster.pluck('jid').length).toBe(0);
  75. var stanza = $iq({
  76. to: _converse.connection.jid,
  77. type: 'result',
  78. id: 'roster_1'
  79. }).c('query', {
  80. xmlns: 'jabber:iq:roster'
  81. });
  82. _.each(['Friends', 'Colleagues', 'Family', 'Acquaintances'], function (group) {
  83. var i;
  84. for (i=0; i<50; i++) {
  85. stanza = stanza.c('item', {
  86. jid: Math.random().toString().replace('0.', '')+'@example.net',
  87. subscription:'both'
  88. }).c('group').t(group).up().up();
  89. }
  90. });
  91. _converse.roster.onReceivedFromServer(stanza.tree());
  92. return test_utils.waitUntil(function () {
  93. var $group = _converse.rosterview.$el.find('.roster-group')
  94. return $group.length && u.isVisible($group[0]);
  95. }).then(function () {
  96. var count = 0;
  97. _converse.roster.each(function (contact) {
  98. if (count < 10) {
  99. contact.set('chat_status', 'online');
  100. count += 1;
  101. }
  102. });
  103. return test_utils.waitUntil(function () {
  104. return _converse.rosterview.$el.find('li.online').length
  105. })
  106. }).then(done);
  107. }));
  108. xit("adds hundreds of contacts to the roster, with roster groups",
  109. mock.initConverse(
  110. null, ['rosterGroupsFetched'], {},
  111. function (done, _converse) {
  112. // _converse.show_only_online_users = true;
  113. _converse.roster_groups = true;
  114. test_utils.openControlBox();
  115. expect(_converse.roster.pluck('jid').length).toBe(0);
  116. var stanza = $iq({
  117. to: _converse.connection.jid,
  118. type: 'result',
  119. id: 'roster_1'
  120. }).c('query', {
  121. xmlns: 'jabber:iq:roster'
  122. });
  123. _.each(['Friends', 'Colleagues', 'Family', 'Acquaintances'], function (group) {
  124. var i;
  125. for (i=0; i<100; i++) {
  126. stanza = stanza.c('item', {
  127. jid: Math.random().toString().replace('0.', '')+'@example.net',
  128. subscription:'both'
  129. }).c('group').t(group).up().up();
  130. }
  131. });
  132. _converse.roster.onReceivedFromServer(stanza.tree());
  133. return test_utils.waitUntil(function () {
  134. var $group = _converse.rosterview.$el.find('.roster-group')
  135. return $group.length && u.isVisible($group[0]);
  136. }).then(function () {
  137. _.each(['Friends', 'Colleagues', 'Family', 'Acquaintances'], function (group) {
  138. var count = 0;
  139. _converse.roster.each(function (contact) {
  140. if (_.includes(contact.get('groups'), group)) {
  141. if (count < 10) {
  142. contact.set('chat_status', 'online');
  143. count += 1;
  144. }
  145. }
  146. });
  147. });
  148. return test_utils.waitUntil(function () {
  149. return _converse.rosterview.$el.find('li.online').length
  150. })
  151. }).then(done);
  152. }));
  153. });
  154. }));