nav.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. import assert from 'assert';
  2. import React from 'react'; // jshint ignore:line
  3. import Nav from 'misago/components/profile/moderation/nav'; // jshint ignore:line
  4. import * as testUtils from 'misago/utils/test-utils';
  5. let profileMock = null;
  6. describe("User Profile Moderation Menu", function() {
  7. beforeEach(function() {
  8. profileMock = {
  9. acl: {
  10. can_moderate_avatar: false,
  11. can_rename: false,
  12. can_delete: false
  13. }
  14. };
  15. });
  16. afterEach(function() {
  17. testUtils.unmountComponents();
  18. });
  19. it("renders", function() {
  20. /* jshint ignore:start */
  21. testUtils.render(<Nav profile={profileMock} />);
  22. /* jshint ignore:end */
  23. let element = $('#test-mount .dropdown-menu');
  24. assert.ok(element.length, "component renders");
  25. assert.ok(!element.find('.btn-link').length,
  26. "no moderation buttons are defautly displayed");
  27. });
  28. it("renders avatar moderation button", function() {
  29. /* jshint ignore:start */
  30. profileMock.acl.can_moderate_avatar = true;
  31. testUtils.render(<Nav profile={profileMock} />);
  32. /* jshint ignore:end */
  33. let element = $('#test-mount .dropdown-menu');
  34. assert.ok(element.length, "component renders");
  35. assert.equal(element.find('.btn-link').length, 1,
  36. "moderation button is displayed");
  37. assert.equal(element.find('.btn-link .material-icon').text(), 'portrait',
  38. "avatar moderation button has valid icon");
  39. assert.ok(element.find('.btn-link').text().indexOf("Avatar controls") > 0,
  40. "avatar moderation button has valid label");
  41. });
  42. it("renders username moderation button", function() {
  43. /* jshint ignore:start */
  44. profileMock.acl.can_rename = true;
  45. testUtils.render(<Nav profile={profileMock} />);
  46. /* jshint ignore:end */
  47. let element = $('#test-mount .dropdown-menu');
  48. assert.ok(element.length, "component renders");
  49. assert.equal(element.find('.btn-link').length, 1,
  50. "moderation button is displayed");
  51. assert.equal(element.find('.btn-link .material-icon').text(), 'credit_card',
  52. "username moderation button has valid icon");
  53. assert.ok(element.find('.btn-link').text().indexOf("Change username") > 0,
  54. "username moderation button has valid label");
  55. });
  56. it("renders delete button", function() {
  57. /* jshint ignore:start */
  58. profileMock.acl.can_delete = true;
  59. testUtils.render(<Nav profile={profileMock} />);
  60. /* jshint ignore:end */
  61. let element = $('#test-mount .dropdown-menu');
  62. assert.ok(element.length, "component renders");
  63. assert.equal(element.find('.btn-link').length, 1,
  64. "moderation button is displayed");
  65. assert.equal(element.find('.btn-link .material-icon').text(), 'clear',
  66. "delete user button has valid icon");
  67. assert.ok(element.find('.btn-link').text().indexOf("Delete account") > 0,
  68. "delete user button has valid label");
  69. });
  70. it("renders menu toggle", function(done) { // jshint ignore:line
  71. /* jshint ignore:start */
  72. let toggleNav = function() {
  73. assert.ok(true, "callback was called!");
  74. done();
  75. }
  76. testUtils.render(<Nav profile={profileMock} toggleNav={toggleNav} />);
  77. /* jshint ignore:end */
  78. let element = $('#test-mount .dropdown-menu');
  79. assert.ok(element.length, "component renders");
  80. testUtils.simulateClick('.btn-default');
  81. });
  82. });