header.js 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. import assert from 'assert';
  2. import moment from 'moment';
  3. import React from 'react'; // jshint ignore:line
  4. import Header from 'misago/components/profile/header'; // jshint ignore:line
  5. import * as testUtils from 'misago/utils/test-utils';
  6. let profileMock = null;
  7. describe("User Profile Header", function() {
  8. beforeEach(function() {
  9. profileMock = {
  10. id: 42,
  11. username: "BobBoberson",
  12. email: '',
  13. joined_on: moment(),
  14. title: '',
  15. rank: {
  16. id: 321,
  17. name: "Test Rank",
  18. slug: "test-rank",
  19. css_class: '',
  20. is_tab: false,
  21. title: ''
  22. },
  23. status: {
  24. is_online: true
  25. },
  26. is_followed: false,
  27. acl: {
  28. can_follow: false,
  29. can_moderate: false
  30. }
  31. };
  32. });
  33. afterEach(function() {
  34. testUtils.unmountComponents();
  35. });
  36. it("renders", function() {
  37. /* jshint ignore:start */
  38. testUtils.render(<Header profile={profileMock} />);
  39. /* jshint ignore:end */
  40. let element = $('#test-mount .page-header');
  41. assert.ok(element.length, "component renders");
  42. assert.equal(element.find('h1 .user-name').text(), profileMock.username,
  43. "header displays correct username");
  44. assert.equal(element.find('.user-joined-on abbr').text(),
  45. "Joined a few seconds ago",
  46. "correct join date is displayed");
  47. assert.equal(element.find('.user-rank span').text(), "Test Rank",
  48. "correct rank name is displaued");
  49. assert.ok(element.find('.user-status-display').length,
  50. "user status is displayed");
  51. assert.ok(!element.find('.user-title').length, "no title is displayed");
  52. assert.ok(!element.find('.user-email').length, "no email is displayed");
  53. assert.ok(!element.find('.btn-follow').length,
  54. "follow button is hidden");
  55. assert.ok(!element.find('.btn-moderate').length,
  56. "moderate button is hidden");
  57. });
  58. it("renders follow button", function() {
  59. /* jshint ignore:start */
  60. profileMock.acl.can_follow = true;
  61. testUtils.render(<Header profile={profileMock} />);
  62. /* jshint ignore:end */
  63. let element = $('#test-mount .page-header');
  64. assert.ok(element.length, "component renders");
  65. assert.ok(element.find('.btn-follow').length,
  66. "follow button is shown");
  67. });
  68. it("renders moderation button", function() {
  69. /* jshint ignore:start */
  70. profileMock.acl.can_moderate = true;
  71. testUtils.render(<Header profile={profileMock} />);
  72. /* jshint ignore:end */
  73. let element = $('#test-mount .page-header');
  74. assert.ok(element.length, "component renders");
  75. assert.ok(element.find('.btn-moderate').length,
  76. "moderate button is shown");
  77. });
  78. it("renders email", function() {
  79. /* jshint ignore:start */
  80. profileMock.email = 'lorem@ipsum.com';
  81. testUtils.render(<Header profile={profileMock} />);
  82. /* jshint ignore:end */
  83. let element = $('#test-mount .page-header');
  84. assert.ok(element.length, "component renders");
  85. assert.ok(element.find('.user-email a').text(), 'lorem@ipsum.com',
  86. "email address renders");
  87. });
  88. it("renders user title", function() {
  89. /* jshint ignore:start */
  90. profileMock.title = "Test User";
  91. testUtils.render(<Header profile={profileMock} />);
  92. /* jshint ignore:end */
  93. let element = $('#test-mount .page-header');
  94. assert.ok(element.length, "component renders");
  95. assert.ok(element.find('.user-title').text(), "Test User",
  96. "user title renders");
  97. });
  98. it("renders rank title", function() {
  99. /* jshint ignore:start */
  100. profileMock.rank.title = "Test Rank User";
  101. testUtils.render(<Header profile={profileMock} />);
  102. /* jshint ignore:end */
  103. let element = $('#test-mount .page-header');
  104. assert.ok(element.length, "component renders");
  105. assert.ok(element.find('.user-title').text(), "Test Rank User",
  106. "user rank title renders");
  107. });
  108. it("renders rank url", function() {
  109. /* jshint ignore:start */
  110. profileMock.rank.is_tab = true;
  111. profileMock.rank.absolute_url = '/rank-url/';
  112. testUtils.render(<Header profile={profileMock} />);
  113. /* jshint ignore:end */
  114. let element = $('#test-mount .page-header');
  115. assert.ok(element.length, "component renders");
  116. assert.ok(element.find('.user-rank a').text(), profileMock.rank.name,
  117. "user rank renders as link to profile");
  118. });
  119. it("renders compact menu toggle", function(done) { // jshint ignore:line
  120. /* jshint ignore:start */
  121. let toggleNav = function() {
  122. assert.ok(true, "callback was called!");
  123. done();
  124. }
  125. testUtils.render(<Header profile={profileMock} toggleNav={toggleNav} />);
  126. /* jshint ignore:end */
  127. let element = $('#test-mount .page-header');
  128. assert.ok(element.length, "component renders");
  129. testUtils.simulateClick('.btn-dropdown-toggle');
  130. });
  131. });