'use strict' const test = require('ava') const { stub } = require('sinon') const Hapi = require('@hapi/hapi') const plugin = require('../lib/plugins/profile') const MatchQueue = require('../lib/models/matchqueue') test('path / should return ok on GET', 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() server.registerModel = () => {} server.models = () => ({ MatchQueue }) await plugin.register(server) /** * Route parameters */ const profile_id = 1 const target_id = 2 const reinsert = true /** * Replace Objection model methods with our own custom functions * !: Kinda janky - might be better to temp knex sqlite instance */ stub(server.models()['MatchQueue'], 'query').returns({ // Mocked for markAsDeleted() patch: () => ({ where: () => ({ andWhere: () => ({ first: () => ({ patch: 'bop' }), }), }), }), insert: queueRecord => { t.is(queueRecord.profile_id, profile_id) t.is(queueRecord.target_id, target_id) t.is(queueRecord.is_deleted, !reinsert) }, // Mocked for getQueue() where: () => ({ andWhere: (cmd, val) => { return [ { mocked_profile_id: 1, is_deleted: val }, { mocked_profile_id: 2, is_deleted: val }, { mocked_profile_id: 3, is_deleted: val }, ] }, }), }) /** * Test the server with registered models and services */ const { payload } = await server.inject({ method: 'PATCH', url: `/${profile_id}/queue/${target_id}/delete?reinsert=${reinsert}`, }) const res = JSON.parse(payload) t.deepEqual(res, [ { mocked_profile_id: 1, is_deleted: false }, { mocked_profile_id: 2, is_deleted: false }, { mocked_profile_id: 3, is_deleted: false }, ]) })