password-strength.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. import assert from 'assert';
  2. import React from 'react'; // jshint ignore:line
  3. import PasswordStrength from 'misago/components/password-strength'; // jshint ignore:line
  4. import zxcvbn from 'misago/services/zxcvbn';
  5. import * as testUtils from 'misago/utils/test-utils';
  6. describe("Password Strength", function() {
  7. afterEach(function() {
  8. testUtils.unmountComponents();
  9. delete window.zxcvbn;
  10. });
  11. it('renders very weak password', function(done) {
  12. window.zxcvbn = function(password, inputs) {
  13. assert.equal(password, 'very-weak', "valid password is passed to API");
  14. assert.deepEqual(inputs, ['a', 'b', 'c'],
  15. "valid password is passed to API");
  16. return {
  17. score: 0
  18. };
  19. };
  20. zxcvbn.init({
  21. include: function() {
  22. /* noop */
  23. }
  24. });
  25. zxcvbn.load();
  26. /* jshint ignore:start */
  27. testUtils.render(
  28. <PasswordStrength password="very-weak" inputs={['a', 'b', 'c']} />
  29. );
  30. /* jshint ignore:end */
  31. let element = $('#test-mount .password-strength');
  32. assert.ok(element.length, "component renders very weak password");
  33. window.setTimeout(function() {
  34. assert.ok(element.find('.progress-bar').hasClass('progress-bar-danger'),
  35. "progress bar has valid class");
  36. assert.equal(element.find('.sr-only').text().trim(),
  37. "Entered password is very weak.",
  38. "progress bar has valid sr-only label");
  39. assert.equal(element.find('p').text().trim(),
  40. "Entered password is very weak.",
  41. "progress bar has valid description");
  42. done();
  43. }, 200);
  44. });
  45. it('renders weak password', function(done) {
  46. window.zxcvbn = function(password, inputs) {
  47. assert.equal(password, 'weak', "valid password is passed to API");
  48. assert.deepEqual(inputs, ['a', 'b', 'c'],
  49. "valid password is passed to API");
  50. return {
  51. score: 1
  52. };
  53. };
  54. zxcvbn.init({
  55. include: function() {
  56. /* noop */
  57. }
  58. });
  59. zxcvbn.load();
  60. /* jshint ignore:start */
  61. testUtils.render(
  62. <PasswordStrength password="weak" inputs={['a', 'b', 'c']} />
  63. );
  64. /* jshint ignore:end */
  65. let element = $('#test-mount .password-strength');
  66. assert.ok(element.length, "component renders weak password");
  67. window.setTimeout(function() {
  68. assert.ok(element.find('.progress-bar').hasClass('progress-bar-warning'),
  69. "progress bar has valid class");
  70. assert.equal(element.find('.sr-only').text().trim(),
  71. "Entered password is weak.",
  72. "progress bar has valid sr-only label");
  73. assert.equal(element.find('p').text().trim(),
  74. "Entered password is weak.",
  75. "progress bar has valid description");
  76. done();
  77. }, 200);
  78. });
  79. it('renders average password', function(done) {
  80. window.zxcvbn = function(password, inputs) {
  81. assert.equal(password, 'average', "valid password is passed to API");
  82. assert.deepEqual(inputs, ['a', 'b', 'c'],
  83. "valid password is passed to API");
  84. return {
  85. score: 2
  86. };
  87. };
  88. zxcvbn.init({
  89. include: function() {
  90. /* noop */
  91. }
  92. });
  93. zxcvbn.load();
  94. /* jshint ignore:start */
  95. testUtils.render(
  96. <PasswordStrength password="average" inputs={['a', 'b', 'c']} />
  97. );
  98. /* jshint ignore:end */
  99. let element = $('#test-mount .password-strength');
  100. assert.ok(element.length, "component renders average password");
  101. window.setTimeout(function() {
  102. assert.ok(element.find('.progress-bar').hasClass('progress-bar-warning'),
  103. "progress bar has valid class");
  104. assert.equal(element.find('.sr-only').text().trim(),
  105. "Entered password is average.",
  106. "progress bar has valid sr-only label");
  107. assert.equal(element.find('p').text().trim(),
  108. "Entered password is average.",
  109. "progress bar has valid description");
  110. done();
  111. }, 200);
  112. });
  113. it('renders strong password', function(done) {
  114. window.zxcvbn = function(password, inputs) {
  115. assert.equal(password, 'stronk', "valid password is passed to API");
  116. assert.deepEqual(inputs, ['a', 'b', 'c'],
  117. "valid password is passed to API");
  118. return {
  119. score: 3
  120. };
  121. };
  122. zxcvbn.init({
  123. include: function() {
  124. /* noop */
  125. }
  126. });
  127. zxcvbn.load();
  128. /* jshint ignore:start */
  129. testUtils.render(
  130. <PasswordStrength password="stronk" inputs={['a', 'b', 'c']} />
  131. );
  132. /* jshint ignore:end */
  133. let element = $('#test-mount .password-strength');
  134. assert.ok(element.length, "component renders strong password");
  135. window.setTimeout(function() {
  136. assert.ok(element.find('.progress-bar').hasClass('progress-bar-primary'),
  137. "progress bar has valid class");
  138. assert.equal(element.find('.sr-only').text().trim(),
  139. "Entered password is strong.",
  140. "progress bar has valid sr-only label");
  141. assert.equal(element.find('p').text().trim(),
  142. "Entered password is strong.",
  143. "progress bar has valid description");
  144. done();
  145. }, 200);
  146. });
  147. it('renders very strong password', function(done) {
  148. window.zxcvbn = function(password, inputs) {
  149. assert.equal(password, 'very-stronk', "valid password is passed to API");
  150. assert.deepEqual(inputs, ['a', 'b', 'c'],
  151. "valid password is passed to API");
  152. return {
  153. score: 4
  154. };
  155. };
  156. zxcvbn.init({
  157. include: function() {
  158. /* noop */
  159. }
  160. });
  161. zxcvbn.load();
  162. /* jshint ignore:start */
  163. testUtils.render(
  164. <PasswordStrength password="very-stronk" inputs={['a', 'b', 'c']} />
  165. );
  166. /* jshint ignore:end */
  167. let element = $('#test-mount .password-strength');
  168. assert.ok(element.length, "component renders very strong password");
  169. window.setTimeout(function() {
  170. assert.ok(element.find('.progress-bar').hasClass('progress-bar-success'),
  171. "progress bar has valid class");
  172. assert.equal(element.find('.sr-only').text().trim(),
  173. "Entered password is very strong.",
  174. "progress bar has valid sr-only label");
  175. assert.equal(element.find('p').text().trim(),
  176. "Entered password is very strong.",
  177. "progress bar has valid description");
  178. done();
  179. }, 200);
  180. });
  181. });