2020-04-05 16:58:33 +03:00
|
|
|
const express = require('express');
|
|
|
|
const sinon = require('sinon');
|
|
|
|
const should = require('should');
|
2022-07-26 16:52:05 +03:00
|
|
|
const SessionFromToken = require('../');
|
2020-04-05 16:58:33 +03:00
|
|
|
|
|
|
|
describe('SessionFromToken', function () {
|
|
|
|
it('Parses the request, matches the user to the token, sets the user on req.user and calls createSession', async function () {
|
|
|
|
const createSession = sinon.spy(async (req, res, user) => {
|
|
|
|
req.session = user;
|
|
|
|
});
|
|
|
|
const findUserByLookup = sinon.spy(async email => ({id: '1', email}));
|
|
|
|
const getTokenFromRequest = sinon.spy(async req => req.token);
|
|
|
|
const getLookupFromToken = sinon.spy(async token => token.email);
|
|
|
|
|
|
|
|
const handler = SessionFromToken({
|
|
|
|
getTokenFromRequest,
|
|
|
|
getLookupFromToken,
|
|
|
|
findUserByLookup,
|
|
|
|
createSession,
|
|
|
|
callNextWithError: true
|
|
|
|
});
|
|
|
|
|
|
|
|
const req = Object.create(express.request);
|
|
|
|
const res = Object.create(express.response);
|
|
|
|
const next = sinon.spy();
|
|
|
|
|
|
|
|
req.token = {
|
|
|
|
email: 'user@host.tld'
|
|
|
|
};
|
|
|
|
|
|
|
|
await handler(req, res, next);
|
|
|
|
|
|
|
|
should.ok(getTokenFromRequest.calledOnceWith(req));
|
|
|
|
const token = await getTokenFromRequest.returnValues[0];
|
|
|
|
|
|
|
|
should.ok(getLookupFromToken.calledOnceWith(token));
|
|
|
|
const email = await getLookupFromToken.returnValues[0];
|
|
|
|
|
|
|
|
should.ok(findUserByLookup.calledOnceWith(email));
|
|
|
|
const foundUser = await findUserByLookup.returnValues[0];
|
|
|
|
|
|
|
|
should.ok(createSession.calledOnceWith(req, res, foundUser));
|
|
|
|
});
|
|
|
|
});
|