signin-modal.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. (function () {
  2. 'use strict';
  3. var app = null;
  4. QUnit.acceptance("Sign In", {
  5. beforeEach: function() {
  6. $('#hidden-login-form').on('submit.stopInTest', function(event) {
  7. event.stopPropagation();
  8. return false;
  9. });
  10. app = initTestMisago();
  11. },
  12. afterEach: function() {
  13. $('#hidden-login-form').off('submit.stopInTest');
  14. app.destroy();
  15. }
  16. });
  17. QUnit.test('with empty credentials', function(assert) {
  18. var done = assert.async();
  19. waitForElement('.navbar .nav-guest .btn-default');
  20. click('.navbar .nav-guest .btn-default');
  21. waitForElement('.modal-signin');
  22. click('.modal-signin .btn-primary');
  23. onElement('.alerts .alert-danger', function() {
  24. assert.equal(getAlertMessage(), "Fill out both fields.",
  25. "login form raised alert about empty inputs.");
  26. done();
  27. });
  28. });
  29. QUnit.test('with backend error', function(assert) {
  30. $.mockjax({
  31. url: '/test-api/auth/',
  32. status: 500
  33. });
  34. var done = assert.async();
  35. waitForElement('.navbar .nav-guest .btn-default');
  36. click('.navbar .nav-guest .btn-default');
  37. waitForElement('.modal-signin');
  38. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  39. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  40. click('.modal-signin .btn-primary');
  41. onElement('.alerts .alert-danger', function() {
  42. assert.equal(getAlertMessage(), "Unknown error has occured.",
  43. "login form raised alert about backend error.");
  44. done();
  45. });
  46. });
  47. QUnit.test('with invalid credentials', function(assert) {
  48. var message = 'Login or password is incorrect.';
  49. $.mockjax({
  50. url: '/test-api/auth/',
  51. status: 400,
  52. responseText: {
  53. 'detail': message,
  54. 'code': 'invalid_login'
  55. }
  56. });
  57. var done = assert.async();
  58. waitForElement('.navbar .nav-guest .btn-default');
  59. click('.navbar .nav-guest .btn-default');
  60. waitForElement('.modal-signin');
  61. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  62. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  63. click('.modal-signin .btn-primary');
  64. onElement('.alerts .alert-danger', function() {
  65. assert.equal(getAlertMessage(), message,
  66. "login form raised alert about invalid credentials.");
  67. done();
  68. });
  69. });
  70. QUnit.test('to admin-activated account', function(assert) {
  71. var message = "This account has to be activated by admin.";
  72. $.mockjax({
  73. url: '/test-api/auth/',
  74. status: 400,
  75. responseText: {
  76. 'detail': message,
  77. 'code': 'inactive_admin'
  78. }
  79. });
  80. var done = assert.async();
  81. waitForElement('.navbar .nav-guest .btn-default');
  82. click('.navbar .nav-guest .btn-default');
  83. waitForElement('.modal-signin');
  84. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  85. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  86. click('.modal-signin .btn-primary');
  87. onElement('.alerts .alert-info', function() {
  88. assert.equal(getAlertMessage(), message,
  89. "login form raised alert about admin-activated account.");
  90. done();
  91. });
  92. });
  93. QUnit.test('to user-activated account', function(assert) {
  94. var message = "This account has to be activated.";
  95. $.mockjax({
  96. url: '/test-api/auth/',
  97. status: 400,
  98. responseText: {
  99. 'detail': message,
  100. 'code': 'inactive_user'
  101. }
  102. });
  103. var doneAlert = assert.async();
  104. var doneBtn = assert.async();
  105. waitForElement('.navbar .nav-guest .btn-default');
  106. click('.navbar .nav-guest .btn-default');
  107. waitForElement('.modal-signin');
  108. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  109. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  110. click('.modal-signin .btn-primary');
  111. onElement('.alerts .alert-info', function() {
  112. assert.equal(getAlertMessage(), message,
  113. "login form raised alert about admin-activated account.");
  114. doneAlert();
  115. });
  116. onElement('.modal-signin .btn-success', function() {
  117. assert.ok(true, "login form displayed account activation button.");
  118. doneBtn();
  119. });
  120. });
  121. QUnit.test('to banned account', function(assert) {
  122. $.mockjax({
  123. url: '/test-api/auth/',
  124. status: 400,
  125. responseText: {
  126. 'detail': {
  127. 'expires_on': null,
  128. 'message': {
  129. 'plain': 'You are banned for trolling.',
  130. 'html': '<p>You are banned for trolling.</p>',
  131. }
  132. },
  133. 'code': 'banned'
  134. }
  135. });
  136. var done = assert.async();
  137. waitForElement('.navbar .nav-guest .btn-default');
  138. click('.navbar .nav-guest .btn-default');
  139. waitForElement('.modal-signin');
  140. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  141. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  142. click('.modal-signin .btn-primary');
  143. onElement('.page-error-banned .lead', function() {
  144. assert.equal(
  145. getElementText('.page .message-body .lead'),
  146. "You are banned for trolling.",
  147. "login form displayed error banned page with ban message.");
  148. waitForElementRemoval('.modal-signin');
  149. then(function() {
  150. assert.ok(true, "signin modal was closed.");
  151. done();
  152. });
  153. });
  154. });
  155. QUnit.test('success', function(assert) {
  156. $.mockjax({
  157. url: '/test-api/auth/',
  158. status: 200,
  159. responseText: {
  160. 'detail': 'ok'
  161. }
  162. });
  163. var done = assert.async();
  164. waitForElement('.navbar .nav-guest .btn-default');
  165. click('.navbar .nav-guest .btn-default');
  166. waitForElement('.modal-signin');
  167. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  168. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  169. click('.modal-signin .btn-primary');
  170. var $form = $('#hidden-login-form');
  171. $form.on('submit.stopInTest', function(event) {
  172. event.stopPropagation();
  173. assert.ok(true, 'login form was submit');
  174. assert.equal($form.find('input[name="username"]').val(), 'SomeFake',
  175. "hidden form was filled with valid username.");
  176. assert.equal($form.find('input[name="password"]').val(), 'pass1234',
  177. "hidden form was filled with valid password.");
  178. done();
  179. return false;
  180. });
  181. });
  182. }());