user-details-modal.js 4.5 KB

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