UNPKG

linagora-rse

Version:
144 lines (126 loc) 4.37 kB
'use strict'; var expect = require('chai').expect, mockery = require('mockery'); describe('The verify-recaptcha middleware', function() { var req, next; beforeEach(function() { req = { connection: { remoteAddress: '1' }, body: { username: 'usename', password: 'password', recaptcha: { data: { response: 'response', challenge: 'challenge' } } }, recaptchaFlag: true }; next = function(cb) { return cb; }; }); it('should be pass through and call next() if there is no recaptchaFlag setted to true in req', function(done) { delete req.recaptchaFlag; var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, {}, next(done)); }); it('should response a 403 json with a flag recpatcha setted to true for the client if recaptcha data is not in the req', function(done) { delete req.body.recaptcha; var res = this.helpers.express.jsonResponse( function(code, data) { expect(code).to.equal(403); expect(data.recaptcha).to.be.true; done(); } ); var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, res, function() {}); }); it('should create a Recaptcha object and verify the data challenge/response', function(done) { var RecaptchaMock = { Recaptcha: function Recaptcha(pubkey, privkey, data) { this.data = data; } }; RecaptchaMock.Recaptcha.prototype.verify = function() { expect(this.data.response).to.equal('response'); expect(this.data.challenge).to.equal('challenge'); done(); }; mockery.registerMock('recaptcha', RecaptchaMock); var esnConfig = function() { return { get: function(callback) { return callback(null, {publickey: 'publickey', privatekey: 'privatekey'}); } }; }; mockery.registerMock('../../core/esn-config', esnConfig); var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, {}, {}); }); it('should call next() if verify is a success', function(done) { var RecaptchaMock = { Recaptcha: function Recaptcha() {} }; RecaptchaMock.Recaptcha.prototype.verify = function(callback) { return callback(true, null); }; mockery.registerMock('recaptcha', RecaptchaMock); var esnConfig = function() { return { get: function(callback) { return callback(null, {publickey: 'publickey', privatekey: 'privatekey'}); } }; }; mockery.registerMock('../../core/esn-config', esnConfig); var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, {}, next(done)); }); it('should return a json error if verify is a fail witch recaptcha setted to true', function(done) { var res = this.helpers.express.jsonResponse( function(statusCode, error) { expect(error.recaptcha).to.be.true; expect(statusCode).to.equal(403); expect(error.error.message).to.equal('Login error'); done(); } ); var RecaptchaMock = { Recaptcha: function Recaptcha() {} }; RecaptchaMock.Recaptcha.prototype.verify = function(callback) { return callback(false, null); }; mockery.registerMock('recaptcha', RecaptchaMock); var esnConfig = function() { return { get: function(callback) { return callback(null, {publickey: 'publickey', privatekey: 'privatekey'}); } }; }; mockery.registerMock('../../core/esn-config', esnConfig); var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, res, {}); }); it('should be pass through if the no recaptcha config from the esnConfig is available', function(done) { mockery.registerMock('recaptcha', {}); var esnConfig = function() { return { get: function(callback) { return callback(null, null); } }; }; mockery.registerMock('../../core/esn-config', esnConfig); var verify = this.helpers.requireBackend('webserver/middleware/verify-recaptcha').verify; verify(req, {}, next(done)); }); });