(function () { 'use strict'; var app = null; QUnit.acceptance("Request Password Change Link", { beforeEach: function() { app = initTestMisago(); }, afterEach: function() { app.destroy(); } }); QUnit.test('with empty input', function(assert) { app.router.route('/forgotten-password/'); var done = assert.async(); click('.well-form .btn-primary'); onElement('.alerts .alert-danger', function() { assert.equal(getAlertMessage(), "Enter a valid email address.", "request form raised alert about empty input."); done(); }); }); QUnit.test('with invalid email', function(assert) { app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'not-email'); click('.well-form .btn-primary'); onElement('.alerts .alert-danger', function() { assert.equal(getAlertMessage(), "Enter a valid email address.", "request form raised alert about empty input."); done(); }); }); QUnit.test('with backend banned', function(assert) { $.mockjax({ url: '/test-api/auth/send-password-form/', status: 403, responseText: { 'detail': 'You are banned!', 'ban': { 'expires_on': null, 'message': { 'plain': 'This is test ban.', 'html': '
This is test ban.
' } } } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); onElement('.page-error.page-error-banned .message-body', function() { assert.ok(true, "Permission denied error page was displayed."); assert.equal( getElementText('.page .message-body .lead'), "This is test ban.", "Banned page displayed ban message."); done(); }); }); QUnit.test('with backend error', function(assert) { var message = "No user found for email!"; $.mockjax({ url: '/test-api/auth/send-password-form/', status: 400, responseText: { 'detail': message } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); onElement('.alerts .alert-danger', function() { assert.equal(getAlertMessage(), message, "request form raised alert returned by backend."); done(); }); }); QUnit.test('without admin activation', function(assert) { var message = "Your account needs admin activation!"; $.mockjax({ url: '/test-api/auth/send-password-form/', status: 400, responseText: { 'code': 'inactive_admin', 'detail': message } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); onElement('.message-body p', function() { assert.equal( getElementText('.message-body p:nth-child(2)'), message, "request form displayed admin activation message."); done(); }); }); QUnit.test('without user activation', function(assert) { var message = "Your account needs activation!"; $.mockjax({ url: '/test-api/auth/send-password-form/', status: 400, responseText: { 'code': 'inactive_user', 'detail': message } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); onElement('.message-body .btn-primary', function() { assert.ok(true, "link to activation form displayed."); assert.equal( getElementText('.message-body p:nth-child(2)'), message, "request form displayed user activation message."); done(); }); }); QUnit.test('with success', function(assert) { $.mockjax({ url: '/test-api/auth/send-password-form/', status: 200, responseText: { 'username': 'Bob', 'email': 'bob@boberson.com' } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); onElement('.message-body p', function() { assert.equal( getElementText('.message-body p:nth-child(2)'), "Bob, we have sent link to your password change form to bob@boberson.com.", "request form displayed success message."); done(); }); }); QUnit.test('reset', function(assert) { $.mockjax({ url: '/test-api/auth/send-password-form/', status: 200, responseText: { 'username': 'Bob', 'email': 'bob@boberson.com' } }); app.router.route('/forgotten-password/'); var done = assert.async(); fillIn('.well-form input', 'valid@email.com'); click('.well-form .btn-primary'); waitForElement('.message-body .btn-default'); click('.message-body .btn-default'); onElement('.well-form', function() { assert.ok(true, 'reset button took client back to previous screen.'); done(); }); }); }());