'use strict' const test = require('ava') const { stub } = require('sinon') const Hapi = require('@hapi/hapi') const UserService = require('../lib/services/user.js') const plugin = require('../lib/plugins/user.js') const payload = 'a;lsdkfja;ldfjka;ldfja;lskjdfa;dfjk' const hashedSessionToken = 'a;lsdkfja;ldfjka;ldfja;lskjdfa;dfjk' const activeSessions = { 'a;lsdkfja;ldfjka;ldfja;lskjdfa;dfjk': { email: 'test@testemail.com', name: 'john_doe', seeking: 'position', sessionToken: 'efasdf;laksdfja;lkdjfa;lkdjf', expiration: Date.now() + 600000, emailWasRespondedTo: false, accessToken: null, }, } const mockReturn = { sessionTokenIsRemoved: true, } const pathToTest = { method: 'POST', url: '/remove-session', payload: JSON.stringify(payload), } test('path /remove-session should return confirmation of removed session', async t => { /** * Create a new server and register services, * models and routes for testing */ const server = Hapi.server() server.registrations = { 'main-app-plugin': { options: {}, }, } /** * Register Services */ await plugin.register(server) server.services()['userService'] = new UserService(server) const removeSession = hashedSessionToken => { const userSession = activeSessions[hashedSessionToken] if (!userSession) { throw new Error( 'hashedSessionToken not in activeSessions registry!', ) } else { delete activeSessions[hashedSessionToken] } } stub(server.services()['userService'], 'removeSession').returns( removeSession(hashedSessionToken), ) /** * Test the server with registered models and services */ const { payload } = await server.inject(pathToTest) const res = JSON.parse(payload) t.deepEqual(res.ok, true) t.deepEqual(res.data, mockReturn) server.stop() })