'use strict' const test = require('ava') const { stub } = require('sinon') const Hapi = require('@hapi/hapi') const plugin = require('../lib/plugins/membership') const Grouping = require('../lib/models/grouping') const Membership = require('../lib/models/membership') const ProfileService = require('../lib/services/profile') const params = { profile_id: 3 } const mockReturn = { memberships: [ { membership_id: 1, grouping_id: 1, is_active: false, profile_id: 3}, { membership_id: 2, grouping_id: 2, is_active: false, profile_id: 1}, { membership_id: 4, grouping_id: 3, is_active: false, profile_id: 2}, ], hasMatch: true, groupings: [ { grouping_id: 1, profiles: [{ profile_id: 1 }, { profile_id: 3 }] }, { grouping_id: 2, profiles: [{ profile_id: 2 }, { profile_id: 1 }] }, ] } const pathToTest = { method: 'POST', url: `/${params.profile_id}/join`, payload: { grouping_id: 3, grouping_name: 'test_match', grouping_type: 'test_group', target_id: 1, role: 'participant' }, } test(`path ${pathToTest.url} should return ok on POST`, async t => { console.log('-------------------------------\n') const server = Hapi.server() server.registerModel = () => {} server.models = () => ({ Grouping, Membership, }) await plugin.register(server) server.services()['profileService'] = new ProfileService(server) /** * TODO: adjust stubs to mock joinGrouping more closely */ stub(server.models()['Grouping'], 'query').returns({ whereIn: () => { return mockReturn.groupings }, }) stub(server.models()['Membership'], 'query').returns({ where: (pid) => { console.log('pid', pid) if(pid == 'membership_id') { return { where: () => ({ patch: () => {} }) } } return mockReturn.memberships.filter(membership => { return membership.profile_id == pid.profile_id }) }, insert: () => { mockReturn.memberships.push({ membership_id: 3, grouping_id: 3, is_active: true }) }, whereIn: () => { return mockReturn.memberships }, }) /** * Test the server with registered models and services */ const { payload } = await server.inject(pathToTest) console.log('payload', payload) const res = JSON.parse(payload) t.deepEqual(res.ok, true) t.deepEqual(res.data, mockReturn) server.stop() })