'use strict' const test = require('ava') const { stub } = require('sinon') const Hapi = require('@hapi/hapi') const plugin = require('../lib/plugins/profile') const Response = require('../lib/models/response') const ResponseKey = require('../lib/models/response-key') /** * Route parameters */ const params = { profile_id: 38, } const mockReturn = { responses: [ { response_id: 1, profile_id: 38, response_key_id: 6, val: '2056', }, { response_id: 2, profile_id: 38, response_key_id: 7, val: '90012', }, ], } const pathToTest = { method: 'POST', url: `/${params.profile_id}/respond?response_key_id=5&val=2053`, } test('path //respond should return ok on POST', async t => { /** * Create a new server and register services, * models and routes for testing * - * NOTE: We use a mocked registerModel() and register * models manually. Normally this is handled by * Schwifty at runtime. */ const server = Hapi.server() /** * Overload so we don't register any models * using the plugin call (see plugins/profile.js) * and Manually load the model we need for the test */ server.registerModel = () => {} server.models = () => ({ Response, ResponseKey }) /** * Register mock authentication just for testing * - * Profile plugin does not do this */ server.auth.scheme('jwt', () => ({ authenticate: (req, h) => h.authenticated({ credentials: {} }), })) server.auth.strategy('default_jwt', 'jwt') /** * Register Routes and Services as usual */ await plugin.register(server) /** * Replace Objection model methods with our own mock functions * !: Janky - might be better to temp knex sqlite instance */ stub(server.models()['Response'], 'query').returns({ where: () => mockReturn.responses, insert: response => { response.response_id = 3 mockReturn.responses.push(response) }, }) /** * 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.responses) server.stop() })