fix test lint

This commit is contained in:
Matteo Pagliazzi
2019-10-08 20:45:38 +02:00
parent e37f4467f8
commit 85fb5f33aa
367 changed files with 6635 additions and 6080 deletions

View File

@@ -1,16 +1,17 @@
/* eslint-disable global-require */
import nconf from 'nconf';
import requireAgain from 'require-again';
import {
generateRes,
generateReq,
generateNext,
} from '../../../helpers/api-unit.helper';
import * as analyticsService from '../../../../website/server/libs/analyticsService';
import nconf from 'nconf';
import requireAgain from 'require-again';
describe('analytics middleware', () => {
let res, req, next;
let pathToAnalyticsMiddleware = '../../../../website/server/middlewares/analytics';
let res; let req; let
next;
const pathToAnalyticsMiddleware = '../../../../website/server/middlewares/analytics';
beforeEach(() => {
res = generateRes();
@@ -19,7 +20,7 @@ describe('analytics middleware', () => {
});
it('attaches analytics object res.locals', () => {
let attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
const attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
attachAnalytics(req, res, next);
@@ -28,7 +29,7 @@ describe('analytics middleware', () => {
it('attaches stubbed methods for non-prod environments', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(false);
let attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
const attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
attachAnalytics(req, res, next);
@@ -39,7 +40,7 @@ describe('analytics middleware', () => {
it('attaches real methods for prod environments', () => {
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
let attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
const attachAnalytics = requireAgain(pathToAnalyticsMiddleware).default;
attachAnalytics(req, res, next);

View File

@@ -5,7 +5,8 @@ import {
import { authWithHeaders as authWithHeadersFactory } from '../../../../website/server/middlewares/auth';
describe('auth middleware', () => {
let res, req, user;
let res; let req; let
user;
beforeEach(async () => {
res = generateRes();
@@ -14,7 +15,7 @@ describe('auth middleware', () => {
});
describe('auth with headers', () => {
it('allows to specify a list of user field that we do not want to load', (done) => {
it('allows to specify a list of user field that we do not want to load', done => {
const authWithHeaders = authWithHeadersFactory({
userFieldsToExclude: ['items'],
});
@@ -22,18 +23,18 @@ describe('auth middleware', () => {
req.headers['x-api-user'] = user._id;
req.headers['x-api-key'] = user.apiToken;
authWithHeaders(req, res, (err) => {
authWithHeaders(req, res, err => {
if (err) return done(err);
const userToJSON = res.locals.user.toJSON();
expect(userToJSON.items).to.not.exist;
expect(userToJSON.auth).to.exist;
done();
return done();
});
});
it('makes sure some fields are always included', (done) => {
it('makes sure some fields are always included', done => {
const authWithHeaders = authWithHeadersFactory({
userFieldsToExclude: [
'items', 'auth.timestamps',
@@ -44,7 +45,7 @@ describe('auth middleware', () => {
req.headers['x-api-user'] = user._id;
req.headers['x-api-key'] = user.apiToken;
authWithHeaders(req, res, (err) => {
authWithHeaders(req, res, err => {
if (err) return done(err);
const userToJSON = res.locals.user.toJSON();
@@ -56,7 +57,7 @@ describe('auth middleware', () => {
expect(userToJSON._id).to.exist;
expect(userToJSON.flags).to.exist;
done();
return done();
});
});
});

View File

@@ -7,7 +7,8 @@ import {
import cors from '../../../../website/server/middlewares/cors';
describe('cors middleware', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
req = generateReq();

View File

@@ -1,3 +1,5 @@
import moment from 'moment';
import { v4 as generateUUID } from 'uuid';
import {
generateRes,
generateReq,
@@ -5,22 +7,21 @@ import {
generateDaily,
} from '../../../helpers/api-unit.helper';
import cronMiddleware from '../../../../website/server/middlewares/cron';
import moment from 'moment';
import { model as User } from '../../../../website/server/models/user';
import { model as Group } from '../../../../website/server/models/group';
import * as Tasks from '../../../../website/server/models/task';
import * as analyticsService from '../../../../website/server/libs/analyticsService';
import * as cronLib from '../../../../website/server/libs/cron';
import { v4 as generateUUID } from 'uuid';
const CRON_TIMEOUT_WAIT = new Date(60 * 60 * 1000).getTime();
const CRON_TIMEOUT_UNIT = new Date(60 * 1000).getTime();
describe('cron middleware', () => {
let res, req;
let res; let
req;
let user;
beforeEach((done) => {
beforeEach(done => {
res = generateRes();
req = generateReq();
user = new User({
@@ -48,33 +49,35 @@ describe('cron middleware', () => {
sandbox.restore();
});
it('calls next when user is not attached', (done) => {
it('calls next when user is not attached', done => {
res.locals.user = null;
cronMiddleware(req, res, done);
});
it('calls next when days have not been missed', (done) => {
it('calls next when days have not been missed', done => {
cronMiddleware(req, res, done);
});
it('should clear todos older than 30 days for free users', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
let task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({days: 31});
user.lastCron = moment(new Date()).subtract({ days: 2 });
const task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
task.completed = true;
await task.save();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
Tasks.Task.findOne({_id: task}, function (secondErr, taskFound) {
Tasks.Task.findOne({ _id: task }, (secondErr, taskFound) => {
if (secondErr) return reject(err);
expect(secondErr).to.not.exist;
expect(taskFound).to.not.exist;
resolve();
return resolve();
});
return null;
});
});
});
@@ -82,22 +85,23 @@ describe('cron middleware', () => {
it('should not clear todos older than 30 days for subscribed users', async () => {
user.purchased.plan.customerId = 'subscribedId';
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
user.lastCron = moment(new Date()).subtract({days: 2});
let task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({days: 31});
user.lastCron = moment(new Date()).subtract({ days: 2 });
const task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
task.completed = true;
await task.save();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
Tasks.Task.findOne({_id: task}, function (secondErr, taskFound) {
Tasks.Task.findOne({ _id: task }, (secondErr, taskFound) => {
if (secondErr) return reject(secondErr);
expect(secondErr).to.not.exist;
expect(taskFound).to.exist;
resolve();
return resolve();
});
return null;
});
});
});
@@ -105,105 +109,106 @@ describe('cron middleware', () => {
it('should clear todos older than 90 days for subscribed users', async () => {
user.purchased.plan.customerId = 'subscribedId';
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
user.lastCron = moment(new Date()).subtract({days: 2});
user.lastCron = moment(new Date()).subtract({ days: 2 });
let task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({days: 91});
const task = generateTodo(user);
task.dateCompleted = moment(new Date()).subtract({ days: 91 });
task.completed = true;
await task.save();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
Tasks.Task.findOne({_id: task}, function (secondErr, taskFound) {
Tasks.Task.findOne({ _id: task }, (secondErr, taskFound) => {
if (secondErr) return reject(secondErr);
expect(secondErr).to.not.exist;
expect(taskFound).to.not.exist;
resolve();
return resolve();
});
return null;
});
});
});
it('should call next if user was not modified after cron', async () => {
let hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({days: 2});
const hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
expect(hpBefore).to.equal(user.stats.hp);
resolve();
return resolve();
});
});
});
it('updates user.auth.timestamps.loggedin and lastCron', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
let now = new Date();
user.lastCron = moment(new Date()).subtract({ days: 2 });
const now = new Date();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
expect(moment(now).isSame(user.lastCron, 'day'));
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
resolve();
return resolve();
});
});
});
it('does damage for missing dailies', async () => {
let hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({days: 2});
let daily = generateDaily(user);
daily.startDate = moment(new Date()).subtract({days: 2});
const hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({ days: 2 });
const daily = generateDaily(user);
daily.startDate = moment(new Date()).subtract({ days: 2 });
await daily.save();
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
User.findOne({_id: user._id}, function (secondErr, updatedUser) {
return User.findOne({ _id: user._id }, (secondErr, updatedUser) => {
if (secondErr) return reject(secondErr);
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
resolve();
return resolve();
});
});
});
});
it('updates tasks', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
let todo = generateTodo(user);
let todoValueBefore = todo.value;
user.lastCron = moment(new Date()).subtract({ days: 2 });
const todo = generateTodo(user);
const todoValueBefore = todo.value;
await Promise.all([todo.save(), user.save()]);
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
Tasks.Task.findOne({_id: todo._id}, function (secondErr, todoFound) {
return Tasks.Task.findOne({ _id: todo._id }, (secondErr, todoFound) => {
if (secondErr) return reject(secondErr);
expect(todoFound.value).to.be.lessThan(todoValueBefore);
resolve();
return resolve();
});
});
});
});
it('applies quest progress', async () => {
let hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({days: 2});
let daily = generateDaily(user);
daily.startDate = moment(new Date()).subtract({days: 2});
const hpBefore = user.stats.hp;
user.lastCron = moment(new Date()).subtract({ days: 2 });
const daily = generateDaily(user);
daily.startDate = moment(new Date()).subtract({ days: 2 });
await daily.save();
let questKey = 'dilatory';
const questKey = 'dilatory';
user.party.quest.key = questKey;
let party = new Group({
const party = new Group({
type: 'party',
name: generateUUID(),
leader: user._id,
@@ -218,22 +223,22 @@ describe('cron middleware', () => {
party.startQuest(user);
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
User.findOne({_id: user._id}, function (secondErr, updatedUser) {
return User.findOne({ _id: user._id }, (secondErr, updatedUser) => {
if (secondErr) return reject(secondErr);
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
resolve();
return resolve();
});
});
});
});
it('recovers from failed cron and does not error when user is already cronning', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
user.lastCron = moment(new Date()).subtract({ days: 2 });
await user.save();
let updatedUser = user.toObject();
const updatedUser = user.toObject();
updatedUser.nMatched = 0;
sandbox.spy(cronLib, 'recoverCron');
@@ -242,8 +247,8 @@ describe('cron middleware', () => {
.withArgs({
_id: user._id,
$or: [
{_cronSignature: 'NOT_RUNNING'},
{_cronSignature: {$lt: sinon.match.number}},
{ _cronSignature: 'NOT_RUNNING' },
{ _cronSignature: { $lt: sinon.match.number } },
],
})
.returns({
@@ -253,18 +258,18 @@ describe('cron middleware', () => {
});
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
expect(cronLib.recoverCron).to.be.calledOnce;
resolve();
return resolve();
});
});
});
it('cronSignature less than an hour ago should error', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
let now = new Date();
user.lastCron = moment(new Date()).subtract({ days: 2 });
const now = new Date();
await User.update({
_id: user._id,
}, {
@@ -273,20 +278,20 @@ describe('cron middleware', () => {
},
}).exec();
await user.save();
let expectedErrMessage = `Impossible to recover from cron for user ${user._id}.`;
const expectedErrMessage = `Impossible to recover from cron for user ${user._id}.`;
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (!err) return reject(new Error('Cron should have failed.'));
expect(err.message).to.be.equal(expectedErrMessage);
resolve();
return resolve();
});
});
});
it('cronSignature longer than an hour ago should allow cron', async () => {
user.lastCron = moment(new Date()).subtract({days: 2});
let now = new Date();
user.lastCron = moment(new Date()).subtract({ days: 2 });
const now = new Date();
await User.update({
_id: user._id,
}, {
@@ -297,11 +302,11 @@ describe('cron middleware', () => {
await user.save();
await new Promise((resolve, reject) => {
cronMiddleware(req, res, (err) => {
cronMiddleware(req, res, err => {
if (err) return reject(err);
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
expect(user._cronSignature).to.be.equal('NOT_RUNNING');
resolve();
return resolve();
});
});
});

View File

@@ -10,7 +10,8 @@ import { NotAuthorized } from '../../../../website/server/libs/errors';
import apiError from '../../../../website/server/libs/apiError';
describe('ensure access middlewares', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
res = generateRes();
@@ -20,7 +21,7 @@ describe('ensure access middlewares', () => {
context('ensure admin', () => {
it('returns not authorized when user is not an admin', () => {
res.locals = {user: {contributor: {admin: false}}};
res.locals = { user: { contributor: { admin: false } } };
ensureAdmin(req, res, next);
@@ -30,7 +31,7 @@ describe('ensure access middlewares', () => {
});
it('passes when user is an admin', () => {
res.locals = {user: {contributor: {admin: true}}};
res.locals = { user: { contributor: { admin: true } } };
ensureAdmin(req, res, next);
@@ -41,7 +42,7 @@ describe('ensure access middlewares', () => {
context('ensure sudo', () => {
it('returns not authorized when user is not a sudo user', () => {
res.locals = {user: {contributor: {sudo: false}}};
res.locals = { user: { contributor: { sudo: false } } };
ensureSudo(req, res, next);
@@ -51,7 +52,7 @@ describe('ensure access middlewares', () => {
});
it('passes when user is a sudo user', () => {
res.locals = {user: {contributor: {sudo: true}}};
res.locals = { user: { contributor: { sudo: true } } };
ensureSudo(req, res, next);

View File

@@ -1,4 +1,5 @@
/* eslint-disable global-require */
import nconf from 'nconf';
import {
generateRes,
generateReq,
@@ -6,10 +7,10 @@ import {
} from '../../../helpers/api-unit.helper';
import ensureDevelpmentMode from '../../../../website/server/middlewares/ensureDevelpmentMode';
import { NotFound } from '../../../../website/server/libs/errors';
import nconf from 'nconf';
describe('developmentMode middleware', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
res = generateRes();

View File

@@ -15,7 +15,8 @@ import { BadRequest } from '../../../../website/server/libs/errors';
import logger from '../../../../website/server/libs/logger';
describe('errorHandler', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
res = generateRes();
@@ -29,7 +30,7 @@ describe('errorHandler', () => {
});
it('sends internal server error if error is not a CustomError and is not identified', () => {
let error = new Error();
const error = new Error();
errorHandler(error, req, res, next);
@@ -45,7 +46,7 @@ describe('errorHandler', () => {
});
it('identifies errors with statusCode property and format them correctly', () => {
let error = new Error('Error message');
const error = new Error('Error message');
error.statusCode = 400;
errorHandler(error, req, res, next);
@@ -62,7 +63,7 @@ describe('errorHandler', () => {
});
it('doesn\'t leak info about 500 errors', () => {
let error = new Error('Some secret error message');
const error = new Error('Some secret error message');
error.statusCode = 500;
errorHandler(error, req, res, next);
@@ -79,7 +80,7 @@ describe('errorHandler', () => {
});
it('sends CustomError', () => {
let error = new BadRequest();
const error = new BadRequest();
errorHandler(error, req, res, next);
@@ -95,7 +96,7 @@ describe('errorHandler', () => {
});
it('handle http-errors errors', () => {
let error = new Error('custom message');
const error = new Error('custom message');
error.statusCode = 422;
errorHandler(error, req, res, next);
@@ -112,7 +113,7 @@ describe('errorHandler', () => {
});
it('handle express-validator errors', () => {
let error = [{param: 'param', msg: 'invalid param', value: 123}];
const error = [{ param: 'param', msg: 'invalid param', value: 123 }];
errorHandler(error, req, res, next);
@@ -131,7 +132,7 @@ describe('errorHandler', () => {
});
it('handle Mongoose Validation errors', () => {
let error = new Error('User validation failed');
const error = new Error('User validation failed');
error.name = 'ValidationError';
error.errors = {
@@ -159,7 +160,7 @@ describe('errorHandler', () => {
});
it('logs error', () => {
let error = new BadRequest();
const error = new BadRequest();
errorHandler(error, req, res, next);

View File

@@ -10,11 +10,12 @@ import {
import common from '../../../../website/common';
import { model as User } from '../../../../website/server/models/user';
const i18n = common.i18n;
const { i18n } = common;
describe('language middleware', () => {
describe('res.t', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
res = generateRes();
@@ -46,9 +47,10 @@ describe('language middleware', () => {
});
describe('getUserLanguage', () => {
let res, req, next;
let res; let req; let
next;
let checkResT = (resToCheck) => {
const checkResT = resToCheck => {
expect(resToCheck.t).to.be.a('function');
expect(resToCheck.t('help')).to.equal(i18n.t('help', req.language));
};
@@ -119,7 +121,7 @@ describe('language middleware', () => {
checkResT(res);
});
it('falls back to english if the user preferred language is not avalaible', (done) => {
it('falls back to english if the user preferred language is not avalaible', done => {
req.locals = {
user: {
preferences: {
@@ -155,7 +157,7 @@ describe('language middleware', () => {
});
context('request with session', () => {
it('uses the user preferred language if avalaible', (done) => {
it('uses the user preferred language if avalaible', done => {
sandbox.stub(User, 'findOne').returns({
lean () {
return this;
@@ -182,7 +184,7 @@ describe('language middleware', () => {
});
context('browser fallback', () => {
it('uses browser specificed language', (done) => {
it('uses browser specificed language', done => {
req.headers['accept-language'] = 'pt';
getUserLanguage(req, res, () => {
@@ -192,7 +194,7 @@ describe('language middleware', () => {
});
});
it('uses first language in series if browser specifies multiple', (done) => {
it('uses first language in series if browser specifies multiple', done => {
req.headers['accept-language'] = 'he, pt, it';
getUserLanguage(req, res, () => {
@@ -202,7 +204,7 @@ describe('language middleware', () => {
});
});
it('skips invalid lanaguages and uses first language in series if browser specifies multiple', (done) => {
it('skips invalid lanaguages and uses first language in series if browser specifies multiple', done => {
req.headers['accept-language'] = 'blah, he, pt, it';
getUserLanguage(req, res, () => {
@@ -212,7 +214,7 @@ describe('language middleware', () => {
});
});
it('uses normal version of language if specialized locale is passed in', (done) => {
it('uses normal version of language if specialized locale is passed in', done => {
req.headers['accept-language'] = 'fr-CA';
getUserLanguage(req, res, () => {
@@ -222,7 +224,7 @@ describe('language middleware', () => {
});
});
it('uses normal version of language if specialized locale is passed in', (done) => {
it('uses normal version of language if specialized locale is passed in', done => {
req.headers['accept-language'] = 'fr-CA';
getUserLanguage(req, res, () => {
@@ -232,7 +234,7 @@ describe('language middleware', () => {
});
});
it('uses es if es is passed in', (done) => {
it('uses es if es is passed in', done => {
req.headers['accept-language'] = 'es';
getUserLanguage(req, res, () => {
@@ -242,7 +244,7 @@ describe('language middleware', () => {
});
});
it('uses es_419 if applicable es-languages are passed in', (done) => {
it('uses es_419 if applicable es-languages are passed in', done => {
req.headers['accept-language'] = 'es-mx';
getUserLanguage(req, res, () => {
@@ -252,7 +254,7 @@ describe('language middleware', () => {
});
});
it('uses es_419 if multiple es languages are passed in', (done) => {
it('uses es_419 if multiple es languages are passed in', done => {
req.headers['accept-language'] = 'es-GT, es-MX, es-CR';
getUserLanguage(req, res, () => {
@@ -262,7 +264,7 @@ describe('language middleware', () => {
});
});
it('zh', (done) => {
it('zh', done => {
req.headers['accept-language'] = 'zh-TW';
getUserLanguage(req, res, () => {
@@ -272,7 +274,7 @@ describe('language middleware', () => {
});
});
it('uses english if browser specified language is not compatible', (done) => {
it('uses english if browser specified language is not compatible', done => {
req.headers['accept-language'] = 'blah';
getUserLanguage(req, res, () => {
@@ -282,7 +284,7 @@ describe('language middleware', () => {
});
});
it('uses english if browser does not specify', (done) => {
it('uses english if browser does not specify', done => {
req.headers['accept-language'] = '';
getUserLanguage(req, res, () => {
@@ -292,7 +294,7 @@ describe('language middleware', () => {
});
});
it('uses english if browser does not supply an accept-language header', (done) => {
it('uses english if browser does not supply an accept-language header', done => {
delete req.headers['accept-language'];
getUserLanguage(req, res, () => {

View File

@@ -1,14 +1,15 @@
import nconf from 'nconf';
import requireAgain from 'require-again';
import {
generateRes,
generateReq,
generateNext,
} from '../../../helpers/api-unit.helper';
import nconf from 'nconf';
import requireAgain from 'require-again';
describe('maintenance mode middleware', () => {
let res, req, next;
let pathToMaintenanceModeMiddleware = '../../../../website/server/middlewares/maintenanceMode';
let res; let req; let
next;
const pathToMaintenanceModeMiddleware = '../../../../website/server/middlewares/maintenanceMode';
beforeEach(() => {
res = generateRes();
@@ -18,7 +19,7 @@ describe('maintenance mode middleware', () => {
it('does not return 503 error when maintenance mode is off', () => {
req = generateReq();
sandbox.stub(nconf, 'get').withArgs('MAINTENANCE_MODE').returns('false');
let attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
const attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
attachMaintenanceMode(req, res, next);
@@ -29,7 +30,7 @@ describe('maintenance mode middleware', () => {
it('returns 503 error when maintenance mode is on', () => {
req = generateReq();
sandbox.stub(nconf, 'get').withArgs('MAINTENANCE_MODE').returns('true');
let attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
const attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
attachMaintenanceMode(req, res, next);
@@ -39,18 +40,18 @@ describe('maintenance mode middleware', () => {
});
it('renders maintenance page when request type is HTML', () => {
req = generateReq({headers: {accept: 'text/html'}});
req = generateReq({ headers: { accept: 'text/html' } });
sandbox.stub(nconf, 'get').withArgs('MAINTENANCE_MODE').returns('true');
let attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
const attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
attachMaintenanceMode(req, res, next);
expect(res.render).to.have.been.calledOnce;
});
it('sends error message when request type is JSON', () => {
req = generateReq({headers: {accept: 'application/json'}});
req = generateReq({ headers: { accept: 'application/json' } });
sandbox.stub(nconf, 'get').withArgs('MAINTENANCE_MODE').returns('true');
let attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
const attachMaintenanceMode = requireAgain(pathToMaintenanceModeMiddleware).default;
attachMaintenanceMode(req, res, next);
expect(res.send).to.have.been.calledOnce;

View File

@@ -1,14 +1,15 @@
import nconf from 'nconf';
import requireAgain from 'require-again';
import {
generateRes,
generateReq,
generateNext,
} from '../../../helpers/api-unit.helper';
import nconf from 'nconf';
import requireAgain from 'require-again';
describe('redirects middleware', () => {
let res, req, next;
let pathToRedirectsMiddleware = '../../../../website/server/middlewares/redirects';
let res; let req; let
next;
const pathToRedirectsMiddleware = '../../../../website/server/middlewares/redirects';
beforeEach(() => {
res = generateRes();
@@ -18,13 +19,13 @@ describe('redirects middleware', () => {
context('forceSSL', () => {
it('sends http requests to https', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.originalUrl = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceSSL(req, res, next);
@@ -33,13 +34,13 @@ describe('redirects middleware', () => {
});
it('does not redirect https forwarded requests', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('https');
req.originalUrl = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceSSL(req, res, next);
@@ -47,13 +48,13 @@ describe('redirects middleware', () => {
});
it('does not redirect outside of production environments', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(false);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.originalUrl = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceSSL(req, res, next);
@@ -61,13 +62,13 @@ describe('redirects middleware', () => {
});
it('does not redirect if base URL is not https', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('http://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
req.header = sandbox.stub().withArgs('x-forwarded-proto').returns('http');
req.originalUrl = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceSSL(req, res, next);
@@ -75,7 +76,7 @@ describe('redirects middleware', () => {
});
it('does not redirect if passed skip ssl request param is passed with corrrect key', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns('test-key');
@@ -91,7 +92,7 @@ describe('redirects middleware', () => {
});
it('does redirect if skip ssl request param is passed with incorrrect key', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns('test-key');
@@ -108,7 +109,7 @@ describe('redirects middleware', () => {
});
it('does redirect if skip ssl check key is not set', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IS_PROD').returns(true);
nconfStub.withArgs('SKIP_SSL_CHECK_KEY').returns(null);
@@ -127,7 +128,7 @@ describe('redirects middleware', () => {
context('forceHabitica', () => {
it('sends requests with differing hostname to base URL host', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('false');
nconfStub.withArgs('IS_PROD').returns(true);
@@ -136,7 +137,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/static/front';
req.url = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);
@@ -145,7 +146,7 @@ describe('redirects middleware', () => {
});
it('does not redirect outside of production environments', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('false');
nconfStub.withArgs('IS_PROD').returns(false);
@@ -154,7 +155,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/static/front';
req.url = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);
@@ -162,7 +163,7 @@ describe('redirects middleware', () => {
});
it('does not redirect if env is set to ignore redirection', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('true');
nconfStub.withArgs('IS_PROD').returns(true);
@@ -171,7 +172,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/static/front';
req.url = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);
@@ -179,7 +180,7 @@ describe('redirects middleware', () => {
});
it('does not redirect if request hostname matches base URL host', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('false');
nconfStub.withArgs('IS_PROD').returns(true);
@@ -188,7 +189,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/static/front';
req.url = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);
@@ -196,7 +197,7 @@ describe('redirects middleware', () => {
});
it('does not redirect if request is an API URL', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('false');
nconfStub.withArgs('IS_PROD').returns(true);
@@ -205,7 +206,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/api/v3/challenges';
req.url = '/api/v3/challenges';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);
@@ -213,7 +214,7 @@ describe('redirects middleware', () => {
});
it('does not redirect if request method is not GET', () => {
let nconfStub = sandbox.stub(nconf, 'get');
const nconfStub = sandbox.stub(nconf, 'get');
nconfStub.withArgs('BASE_URL').returns('https://habitica.com');
nconfStub.withArgs('IGNORE_REDIRECT').returns('false');
nconfStub.withArgs('IS_PROD').returns(true);
@@ -222,7 +223,7 @@ describe('redirects middleware', () => {
req.originalUrl = '/static/front';
req.url = '/static/front';
let attachRedirects = requireAgain(pathToRedirectsMiddleware);
const attachRedirects = requireAgain(pathToRedirectsMiddleware);
attachRedirects.forceHabitica(req, res, next);

View File

@@ -7,7 +7,8 @@ import responseMiddleware from '../../../../website/server/middlewares/response'
import packageInfo from '../../../../package.json';
describe('response middleware', () => {
let res, req, next;
let res; let req; let
next;
beforeEach(() => {
res = generateRes();
@@ -24,7 +25,7 @@ describe('response middleware', () => {
it('can be used to respond to requests', () => {
responseMiddleware(req, res, next);
res.respond(200, {field: 1});
res.respond(200, { field: 1 });
expect(res.status).to.be.calledOnce;
expect(res.json).to.be.calledOnce;
@@ -32,7 +33,7 @@ describe('response middleware', () => {
expect(res.status).to.be.calledWith(200);
expect(res.json).to.be.calledWith({
success: true,
data: {field: 1},
data: { field: 1 },
notifications: [],
userV: res.locals.user._v,
appVersion: packageInfo.version,
@@ -41,7 +42,7 @@ describe('response middleware', () => {
it('can be passed a third parameter to be used as optional message', () => {
responseMiddleware(req, res, next);
res.respond(200, {field: 1}, 'hello');
res.respond(200, { field: 1 }, 'hello');
expect(res.status).to.be.calledOnce;
expect(res.json).to.be.calledOnce;
@@ -49,7 +50,7 @@ describe('response middleware', () => {
expect(res.status).to.be.calledWith(200);
expect(res.json).to.be.calledWith({
success: true,
data: {field: 1},
data: { field: 1 },
message: 'hello',
notifications: [],
userV: res.locals.user._v,
@@ -59,7 +60,7 @@ describe('response middleware', () => {
it('treats status >= 400 as failures', () => {
responseMiddleware(req, res, next);
res.respond(403, {field: 1});
res.respond(403, { field: 1 });
expect(res.status).to.be.calledOnce;
expect(res.json).to.be.calledOnce;
@@ -67,7 +68,7 @@ describe('response middleware', () => {
expect(res.status).to.be.calledWith(403);
expect(res.json).to.be.calledWith({
success: false,
data: {field: 1},
data: { field: 1 },
notifications: [],
userV: res.locals.user._v,
appVersion: packageInfo.version,
@@ -76,13 +77,13 @@ describe('response middleware', () => {
it('returns userV if a user is authenticated', () => {
responseMiddleware(req, res, next);
res.respond(200, {field: 1});
res.respond(200, { field: 1 });
expect(res.json).to.be.calledOnce;
expect(res.json).to.be.calledWith({
success: true,
data: {field: 1},
data: { field: 1 },
notifications: [],
userV: 0,
appVersion: packageInfo.version,
@@ -90,24 +91,25 @@ describe('response middleware', () => {
});
it('returns notifications if a user is authenticated', () => {
const user = res.locals.user;
const { user } = res.locals;
user.notifications = [
null, // invalid, not an object
{seen: true}, // invalid, no type or id
{id: 123}, // invalid, no type
// {type: 'ABC'}, // invalid, no id, not included here because the id would be added automatically
{type: 'ABC', id: '123'}, // valid
{ seen: true }, // invalid, no type or id
{ id: 123 }, // invalid, no type
// invalid, no id, not included here because the id would be added automatically
// {type: 'ABC'},
{ type: 'ABC', id: '123' }, // valid
];
responseMiddleware(req, res, next);
res.respond(200, {field: 1});
res.respond(200, { field: 1 });
expect(res.json).to.be.calledOnce;
expect(res.json).to.be.calledWith({
success: true,
data: {field: 1},
data: { field: 1 },
notifications: [
{
type: 'ABC',