form-group.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. import assert from 'assert';
  2. import React from 'react'; // jshint ignore:line
  3. import ReactDOM from 'react-dom'; // jshint ignore:line
  4. import FormGroup from 'misago/components/form-group'; // jshint ignore:line
  5. describe("Form Group", function() {
  6. afterEach(function() {
  7. window.emptyTestContainers();
  8. });
  9. it('renders', function() {
  10. /* jshint ignore:start */
  11. ReactDOM.render(
  12. <FormGroup label="Lorem Ipsum"
  13. for="test_input">
  14. <input name="lorem" type="text" />
  15. </FormGroup>,
  16. document.getElementById('test-mount')
  17. );
  18. /* jshint ignore:end */
  19. let element = $('#test-mount .form-group');
  20. assert.ok(element.length, "component renders");
  21. assert.equal(element.find('label').text().trim(), "Lorem Ipsum:",
  22. "input label is rendered");
  23. assert.equal(element.find('label').attr('for'), 'test_input',
  24. "input label for attribute is valid");
  25. assert.ok(element.find('input[name="lorem"]').length,
  26. "input field is rendered");
  27. });
  28. it('renders label and control classes', function() {
  29. /* jshint ignore:start */
  30. ReactDOM.render(
  31. <FormGroup label="Lorem Ipsum"
  32. labelClass="test-label"
  33. controlClass="test-control"
  34. for="test_input">
  35. <input name="lorem" type="text" />
  36. </FormGroup>,
  37. document.getElementById('test-mount')
  38. );
  39. /* jshint ignore:end */
  40. let element = $('#test-mount .form-group');
  41. assert.ok(element.length, "component renders");
  42. assert.ok(element.find('label').hasClass('test-label'),
  43. "label has additional css class");
  44. assert.ok(element.find('div').hasClass('test-control'),
  45. "control has additional css class");
  46. });
  47. it('renders positive feedback', function() {
  48. /* jshint ignore:start */
  49. ReactDOM.render(
  50. <FormGroup label="Lorem Ipsum"
  51. for="test_input"
  52. validation={null}>
  53. <input name="lorem" type="text" />
  54. </FormGroup>,
  55. document.getElementById('test-mount')
  56. );
  57. /* jshint ignore:end */
  58. let element = $('#test-mount .form-group');
  59. assert.ok(element.length, "component renders");
  60. assert.ok(element.hasClass('has-feedback'), "has feedback");
  61. assert.ok(element.hasClass('has-success'), "has success");
  62. assert.ok(element.find('.form-control-feedback').text().trim(), 'check',
  63. "has feedback icon");
  64. assert.ok(element.find('#test_input_status').text().trim(), '(success)',
  65. "has feedback label for screen readers");
  66. });
  67. it('renders negative feedback', function() {
  68. /* jshint ignore:start */
  69. ReactDOM.render(
  70. <FormGroup label="Lorem Ipsum"
  71. for="test_input"
  72. validation={["First issue.", "Second issue."]}>
  73. <input name="lorem" type="text" />
  74. </FormGroup>,
  75. document.getElementById('test-mount')
  76. );
  77. /* jshint ignore:end */
  78. let element = $('#test-mount .form-group');
  79. assert.ok(element.length, "component renders");
  80. assert.ok(element.hasClass('has-feedback'), "has feedback");
  81. assert.ok(element.hasClass('has-error'), "has error");
  82. assert.ok(element.find('.form-control-feedback').text().trim(), 'clear',
  83. "has feedback icon");
  84. assert.ok(element.find('#test_input_status').text().trim(), '(error)',
  85. "has feedback label for screen readers");
  86. assert.ok(element.find('.help-block.errors p').length, 2,
  87. "errors list is rendered");
  88. assert.ok(element.find('.help-block.errors p').first().text().trim(),
  89. "First issue.",
  90. "first error is rendered");
  91. assert.ok(element.find('.help-block.errors p').last().text().trim(),
  92. "Second issue.",
  93. "second error is rendered");
  94. });
  95. it('renders help text', function() {
  96. /* jshint ignore:start */
  97. ReactDOM.render(
  98. <FormGroup label="Lorem Ipsum"
  99. for="test_input"
  100. helpText="Lorem ipsum dolor met.">
  101. <input name="lorem" type="text" />
  102. </FormGroup>,
  103. document.getElementById('test-mount')
  104. );
  105. /* jshint ignore:end */
  106. let element = $('#test-mount .form-group');
  107. assert.ok(element.length, "component renders");
  108. assert.equal(element.find('p.help-block').text().trim(),
  109. "Lorem ipsum dolor met.",
  110. "help text renders");
  111. });
  112. it('renders extra', function() {
  113. /* jshint ignore:start */
  114. ReactDOM.render(
  115. <FormGroup label="Lorem Ipsum"
  116. for="test_input"
  117. extra={<p id="row-extra">Extra!!!</p>}>
  118. <input name="lorem" type="text" />
  119. </FormGroup>,
  120. document.getElementById('test-mount')
  121. );
  122. /* jshint ignore:end */
  123. let element = $('#test-mount .form-group');
  124. assert.ok(element.length, "component renders");
  125. assert.equal(element.find('#row-extra').text().trim(), "Extra!!!",
  126. "extra component was rendered");
  127. });
  128. });