2
0

user-details-modal.js 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*global mock, converse */
  2. const u = converse.env.utils;
  3. describe("The User Details Modal", function () {
  4. it("can be used to remove a contact",
  5. mock.initConverse(['chatBoxesFetched'], {}, async function (done, _converse) {
  6. await mock.waitForRoster(_converse, 'current', 1);
  7. _converse.api.trigger('rosterContactsFetched');
  8. const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
  9. await mock.openChatBoxFor(_converse, contact_jid);
  10. await u.waitUntil(() => _converse.chatboxes.length > 1);
  11. const view = _converse.chatboxviews.get(contact_jid);
  12. let show_modal_button = view.querySelector('.show-user-details-modal');
  13. show_modal_button.click();
  14. const modal = _converse.api.modal.get('user-details-modal');
  15. await u.waitUntil(() => u.isVisible(modal.el), 1000);
  16. spyOn(window, 'confirm').and.returnValue(true);
  17. spyOn(view.model.contact, 'removeFromRoster').and.callFake(callback => callback());
  18. let remove_contact_button = modal.el.querySelector('button.remove-contact');
  19. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  20. remove_contact_button.click();
  21. await u.waitUntil(() => modal.el.getAttribute('aria-hidden'), 1000);
  22. await u.waitUntil(() => !u.isVisible(modal.el));
  23. show_modal_button = view.querySelector('.show-user-details-modal');
  24. show_modal_button.click();
  25. remove_contact_button = modal.el.querySelector('button.remove-contact');
  26. expect(remove_contact_button === null).toBeTruthy();
  27. done();
  28. }));
  29. it("shows an alert when an error happened while removing the contact",
  30. mock.initConverse([], {}, async function (done, _converse) {
  31. await mock.waitForRoster(_converse, 'current', 1);
  32. _converse.api.trigger('rosterContactsFetched');
  33. const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@montague.lit';
  34. await mock.openChatBoxFor(_converse, contact_jid)
  35. const view = _converse.chatboxviews.get(contact_jid);
  36. let show_modal_button = view.querySelector('.show-user-details-modal');
  37. show_modal_button.click();
  38. let modal = _converse.api.modal.get('user-details-modal');
  39. await u.waitUntil(() => u.isVisible(modal.el), 2000);
  40. spyOn(window, 'confirm').and.returnValue(true);
  41. spyOn(view.model.contact, 'removeFromRoster').and.callFake((callback, errback) => errback());
  42. let remove_contact_button = modal.el.querySelector('button.remove-contact');
  43. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  44. remove_contact_button.click();
  45. await u.waitUntil(() => !u.isVisible(modal.el))
  46. await u.waitUntil(() => u.isVisible(document.querySelector('.alert-danger')), 2000);
  47. const header = document.querySelector('.alert-danger .modal-title');
  48. expect(header.textContent).toBe("Error");
  49. expect(u.ancestor(header, '.modal-content').querySelector('.modal-body p').textContent.trim())
  50. .toBe("Sorry, there was an error while trying to remove Mercutio as a contact.");
  51. document.querySelector('.alert-danger button.close').click();
  52. show_modal_button = view.querySelector('.show-user-details-modal');
  53. show_modal_button.click();
  54. modal = _converse.api.modal.get('user-details-modal');
  55. await u.waitUntil(() => u.isVisible(modal.el), 2000)
  56. show_modal_button = view.querySelector('.show-user-details-modal');
  57. show_modal_button.click();
  58. await u.waitUntil(() => u.isVisible(modal.el), 2000)
  59. remove_contact_button = modal.el.querySelector('button.remove-contact');
  60. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  61. done();
  62. }));
  63. });