2
0

user-details-modal.js 4.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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() + '@localhost';
  22. test_utils.openChatBoxFor(_converse, contact_jid);
  23. await test_utils.waitUntil(() => _converse.chatboxes.length);
  24. const view = _converse.chatboxviews.get(contact_jid);
  25. await new Promise((resolve) => view.model.once('contactAdded', resolve));
  26. let show_modal_button = view.el.querySelector('.show-user-details-modal');
  27. expect(u.isVisible(show_modal_button)).toBeTruthy();
  28. show_modal_button.click();
  29. const modal = view.user_details_modal;
  30. await test_utils.waitUntil(() => u.isVisible(modal.el), 1000);
  31. spyOn(window, 'confirm').and.returnValue(true);
  32. spyOn(view.model.contact, 'removeFromRoster').and.callFake(function (callback) {
  33. callback();
  34. });
  35. let remove_contact_button = modal.el.querySelector('button.remove-contact');
  36. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  37. remove_contact_button.click();
  38. await test_utils.waitUntil(() => modal.el.getAttribute('aria-hidden'), 1000);
  39. show_modal_button = view.el.querySelector('.show-user-details-modal');
  40. show_modal_button.click();
  41. remove_contact_button = modal.el.querySelector('button.remove-contact');
  42. expect(_.isNull(remove_contact_button)).toBeTruthy();
  43. done();
  44. }));
  45. it("shows an alert when an error happened while removing the contact",
  46. mock.initConverse(
  47. null, ['rosterGroupsFetched'], {},
  48. async function (done, _converse) {
  49. test_utils.createContacts(_converse, 'current');
  50. _converse.api.trigger('rosterContactsFetched');
  51. const contact_jid = mock.cur_names[0].replace(/ /g,'.').toLowerCase() + '@localhost';
  52. await test_utils.openChatBoxFor(_converse, contact_jid)
  53. const view = _converse.chatboxviews.get(contact_jid);
  54. let show_modal_button = view.el.querySelector('.show-user-details-modal');
  55. expect(u.isVisible(show_modal_button)).toBeTruthy();
  56. show_modal_button.click();
  57. const modal = view.user_details_modal;
  58. await test_utils.waitUntil(() => u.isVisible(modal.el), 2000);
  59. spyOn(window, 'confirm').and.returnValue(true);
  60. spyOn(view.model.contact, 'removeFromRoster').and.callFake(function (callback, errback) {
  61. errback();
  62. });
  63. let remove_contact_button = modal.el.querySelector('button.remove-contact');
  64. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  65. remove_contact_button.click();
  66. await test_utils.waitUntil(() => u.isVisible(document.querySelector('.alert-danger')), 2000);
  67. const header = document.querySelector('.alert-danger .modal-title');
  68. expect(header.textContent).toBe("Error");
  69. expect(u.ancestor(header, '.modal-content').querySelector('.modal-body p').textContent.trim())
  70. .toBe("Sorry, there was an error while trying to remove Max Frankfurter as a contact.");
  71. document.querySelector('.alert-danger button.close').click();
  72. show_modal_button = view.el.querySelector('.show-user-details-modal');
  73. show_modal_button.click();
  74. await test_utils.waitUntil(() => u.isVisible(modal.el), 2000)
  75. show_modal_button = view.el.querySelector('.show-user-details-modal');
  76. show_modal_button.click();
  77. await test_utils.waitUntil(() => u.isVisible(modal.el), 2000)
  78. remove_contact_button = modal.el.querySelector('button.remove-contact');
  79. expect(u.isVisible(remove_contact_button)).toBeTruthy();
  80. done();
  81. }));
  82. });
  83. }));