header.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. import assert from 'assert';
  2. import React from 'react'; // jshint ignore:line
  3. import Header from 'misago/components/threads/header'; // jshint ignore:line
  4. import * as testUtils from 'misago/utils/test-utils';
  5. let route = null;
  6. describe("Threads List Header", function() {
  7. beforeEach(function() {
  8. route = {
  9. lists: [],
  10. list: {
  11. name: "All",
  12. nameLong: "All threads",
  13. path: ''
  14. },
  15. category: {
  16. name: "Root",
  17. parent: null
  18. }
  19. };
  20. });
  21. afterEach(function() {
  22. testUtils.unmountComponents();
  23. });
  24. it("renders title", function() {
  25. /* jshint ignore:start */
  26. testUtils.render(
  27. <Header route={route} title="Lorem Ipsum" user={{id: null}} />
  28. );
  29. /* jshint ignore:end */
  30. let element = $('#test-mount .page-header h1');
  31. assert.ok(element.length, "component renders");
  32. assert.equal(element.text(), "Lorem Ipsum", "heading has valid text");
  33. });
  34. it("renders without nav", function() {
  35. /* jshint ignore:start */
  36. testUtils.render(<Header route={route} title="Test" user={{id: null}} />);
  37. /* jshint ignore:end */
  38. let element = $('#test-mount .page-header');
  39. assert.ok(element.length, "component renders");
  40. assert.ok(!element.hasClass('tabbed'), "tabbed class is not present");
  41. assert.ok(!element.find('.page-tabs').length, "tabs are hidden");
  42. assert.ok(!element.find('.btn').length, "toggle nav button is hidden");
  43. });
  44. it("renders with nav", function(done) { // jshint ignore:line
  45. /* jshint ignore:start */
  46. route = {
  47. lists: [
  48. {
  49. name: "All",
  50. nameLong: "All threads",
  51. path: ''
  52. },
  53. {
  54. name: "New",
  55. nameLong: "New threads",
  56. path: 'new/'
  57. }
  58. ],
  59. list: {
  60. name: "All",
  61. nameLong: "All threads",
  62. path: ''
  63. },
  64. category: {
  65. name: "Root",
  66. parent: null
  67. }
  68. };
  69. let callback = function() {
  70. assert.ok(true, "toggleNav() was called");
  71. done();
  72. };
  73. testUtils.render(
  74. <Header route={route}
  75. title="Test"
  76. toggleNav={callback}
  77. user={{id: null}} />
  78. );
  79. /* jshint ignore:end */
  80. let element = $('#test-mount .page-header');
  81. assert.ok(element.length, "heading renders");
  82. assert.ok(element.hasClass('tabbed'), "tabbed class is not present");
  83. assert.ok(element.find('.page-tabs').length, "tabs are hidden");
  84. assert.ok(element.find('.btn').length, "toggle nav button is hidden");
  85. testUtils.simulateClick('#test-mount .btn-dropdown-toggle');
  86. });
  87. it("renders go back button", function() {
  88. /* jshint ignore:start */
  89. route.list= {
  90. name: "New",
  91. nameLong: "New threads",
  92. path: 'new/'
  93. };
  94. route.category.parent = {
  95. name: "Parent",
  96. absolute_url: '/parent-12/'
  97. }
  98. testUtils.render(<Header route={route} title="Test" user={{id: null}} />);
  99. /* jshint ignore:end */
  100. let element = $('#test-mount .page-header .btn-go-back');
  101. assert.ok(element.length, "button renders");
  102. });
  103. it("renders new thread button for authenticated", function() {
  104. /* jshint ignore:start */
  105. route.list= {
  106. name: "New",
  107. nameLong: "New threads",
  108. path: 'new/'
  109. };
  110. route.category.parent = {
  111. name: "Parent",
  112. absolute_url: '/parent-12/'
  113. }
  114. testUtils.render(<Header route={route} title="Test" user={{id: null}} />);
  115. /* jshint ignore:end */
  116. let element = $('#test-mount .page-header .btn-success');
  117. assert.ok(!element.length, "button is hidden for guest");
  118. /* jshint ignore:start */
  119. testUtils.render(<Header route={route} title="Test" user={{id: 123}} />);
  120. /* jshint ignore:end */
  121. element = $('#test-mount .page-header .btn-success');
  122. assert.ok(element.length, "button is rendered for authenticated");
  123. });
  124. });