sign-in.js 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  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. app.context.AUTH_API = '/test-api/auth/';
  12. },
  13. afterEach: function() {
  14. $('#hidden-login-form').off('submit.stopInTest');
  15. app.destroy();
  16. }
  17. });
  18. QUnit.test('with empty credentials', function(assert) {
  19. var done = assert.async();
  20. app.modal('sign-in');
  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. app.modal('sign-in');
  36. waitForElement('.modal-signin');
  37. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  38. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  39. click('.modal-signin .btn-primary');
  40. onElement('.alerts .alert-danger', function() {
  41. assert.equal(getAlertMessage(), "Unknown error has occured.",
  42. "login form raised alert about backend error.");
  43. done();
  44. });
  45. });
  46. QUnit.test('with invalid credentials', function(assert) {
  47. var message = 'Login or password is incorrect.';
  48. $.mockjax({
  49. url: '/test-api/auth/',
  50. status: 400,
  51. responseText: {
  52. 'detail': message,
  53. 'code': 'invalid_login'
  54. }
  55. });
  56. var done = assert.async();
  57. app.modal('sign-in');
  58. waitForElement('.modal-signin');
  59. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  60. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  61. click('.modal-signin .btn-primary');
  62. onElement('.alerts .alert-danger', function() {
  63. assert.equal(getAlertMessage(), message,
  64. "login form raised alert about invalid credentials.");
  65. done();
  66. });
  67. });
  68. QUnit.test('to admin-activated account', function(assert) {
  69. var message = "This account has to be activated by admin.";
  70. $.mockjax({
  71. url: '/test-api/auth/',
  72. status: 400,
  73. responseText: {
  74. 'detail': message,
  75. 'code': 'inactive_admin'
  76. }
  77. });
  78. var done = assert.async();
  79. app.modal('sign-in');
  80. waitForElement('.modal-signin');
  81. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  82. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  83. click('.modal-signin .btn-primary');
  84. onElement('.alerts .alert-info', function() {
  85. assert.equal(getAlertMessage(), message,
  86. "login form raised alert about admin-activated account.");
  87. done();
  88. });
  89. });
  90. QUnit.test('to user-activated account', function(assert) {
  91. var message = "This account has to be activated.";
  92. $.mockjax({
  93. url: '/test-api/auth/',
  94. status: 400,
  95. responseText: {
  96. 'detail': message,
  97. 'code': 'inactive_user'
  98. }
  99. });
  100. var doneAlert = assert.async();
  101. var doneBtn = assert.async();
  102. app.modal('sign-in');
  103. waitForElement('.modal-signin');
  104. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  105. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  106. click('.modal-signin .btn-primary');
  107. onElement('.alerts .alert-info', function() {
  108. assert.equal(getAlertMessage(), message,
  109. "login form raised alert about admin-activated account.");
  110. doneAlert();
  111. });
  112. onElement('.modal-signin .btn-success', function() {
  113. assert.ok(true, "login form displayed account activation button.");
  114. doneBtn();
  115. });
  116. });
  117. QUnit.test('from banned ip', function(assert) {
  118. $.mockjax({
  119. url: '/test-api/auth/',
  120. status: 403,
  121. responseText: {
  122. 'ban': {
  123. 'expires_on': null,
  124. 'message': {
  125. 'plain': 'Your ip is banned for spamming.',
  126. 'html': '<p>Your ip is banned for spamming.</p>',
  127. }
  128. }
  129. }
  130. });
  131. var done = assert.async();
  132. app.modal('sign-in');
  133. waitForElement('.modal-signin');
  134. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  135. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  136. click('.modal-signin .btn-primary');
  137. onElement('.page-error-banned .lead', function() {
  138. assert.equal(
  139. getElementText('.page .message-body .lead'),
  140. "Your ip is banned for spamming.",
  141. "login form displayed error banned page with ban message.");
  142. waitForElementRemoval('.modal-signin');
  143. then(function() {
  144. assert.ok(true, "signin modal was closed.");
  145. done();
  146. });
  147. });
  148. });
  149. QUnit.test('to banned account', function(assert) {
  150. $.mockjax({
  151. url: '/test-api/auth/',
  152. status: 400,
  153. responseText: {
  154. 'detail': {
  155. 'expires_on': null,
  156. 'message': {
  157. 'plain': 'You are banned for trolling.',
  158. 'html': '<p>You are banned for trolling.</p>',
  159. }
  160. },
  161. 'code': 'banned'
  162. }
  163. });
  164. var done = assert.async();
  165. app.modal('sign-in');
  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. onElement('.page-error-banned .lead', function() {
  171. assert.equal(
  172. getElementText('.page .message-body .lead'),
  173. "You are banned for trolling.",
  174. "login form displayed error banned page with ban message.");
  175. waitForElementRemoval('.modal-signin');
  176. then(function() {
  177. assert.ok(true, "signin modal was closed.");
  178. done();
  179. });
  180. });
  181. });
  182. QUnit.test('success', function(assert) {
  183. $.mockjax({
  184. url: '/test-api/auth/',
  185. status: 200,
  186. responseText: {
  187. 'detail': 'ok'
  188. }
  189. });
  190. var done = assert.async();
  191. app.modal('sign-in');
  192. waitForElement('.modal-signin');
  193. fillIn('.modal-signin .form-group:first-child input', 'SomeFake');
  194. fillIn('.modal-signin .form-group:last-child input', 'pass1234');
  195. click('.modal-signin .btn-primary');
  196. var $form = $('#hidden-login-form');
  197. $form.on('submit.stopInTest', function(event) {
  198. event.stopPropagation();
  199. assert.ok(true, 'login form was submit');
  200. assert.equal($form.find('input[name="username"]').val(), 'SomeFake',
  201. "hidden form was filled with valid username.");
  202. assert.equal($form.find('input[name="password"]').val(), 'pass1234',
  203. "hidden form was filled with valid password.");
  204. done();
  205. return false;
  206. });
  207. });
  208. }());