form-group.js 4.5 KB

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