tests: Add tests for recoverCron

This commit is contained in:
Blade Barringer
2016-05-26 22:08:31 -05:00
parent 8292903444
commit 91aba965b0
4 changed files with 124 additions and 25 deletions

View File

@@ -4,12 +4,14 @@ import {
generateTodo,
generateDaily,
} from '../../../../helpers/api-unit.helper';
import { cloneDeep } from 'lodash';
import cronMiddleware from '../../../../../website/server/middlewares/api-v3/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 analyticsService from '../../../../../website/server/libs/api-v3/analyticsService';
import * as cronLib from '../../../../../website/server/libs/api-v3/cron';
import { v4 as generateUUID } from 'uuid';
describe('cron middleware', () => {
@@ -45,6 +47,10 @@ describe('cron middleware', () => {
.catch(done);
});
afterEach(() => {
sandbox.restore();
});
it('calls next when user is not attached', (done) => {
res.locals.user = null;
cronMiddleware(req, res, (err) => done(err));
@@ -191,4 +197,28 @@ describe('cron middleware', () => {
done();
});
});
it('recovers from failed cron and does not error when user is already cronning', async (done) => {
user.lastCron = moment(new Date()).subtract({days: 2});
await user.save();
let updatedUser = cloneDeep(user);
updatedUser.nMatched = 0;
sandbox.spy(cronLib, 'recoverCron');
sandbox.stub(User, 'update')
.withArgs({ _id: user._id, _cronSignature: 'NOT_RUNNING' })
.returns({
exec () {
return Promise.resolve(updatedUser);
},
});
cronMiddleware(req, res, () => {
expect(cronLib.recoverCron).to.be.calledOnce;
done();
});
});
});