'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 JWT = require('jsonwebtoken') const payload = { email: 'test@testemail.com', name: 'fk', seeking: 'seeker', } const data = payload const pathToTest = { method: 'POST', url: '/token', payload: JSON.stringify(payload), } test('path /token should return OK', 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 createToken = (data, expiration = 600) => { const key = process.env.APP_SECRET const obj = {} Object.assign(obj, { ...data }) return JWT.sign(obj, key, { expiresIn: expiration }) } stub(server.services()['userService'], 'createToken').returns( createToken(data), ) /** * 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.assert(res.data) t.is(res.data.error, undefined) server.stop() })