import dotenv from 'dotenv'; dotenv.config(); import { MongoClient } from 'mongodb'; import * as lambdaModule from '../../src/lambda/zombieCleanupLambda'; const { createMongoUri } = require('../utils'); const agentsMocks = require('../__mocks__/zombieCleanup/networkDeviceChannelClientMocks.json'); const gatewaysMocks = require('../__mocks__/zombieCleanup/networkDeviceChannelGatewayMocks.json'); describe('Lambda manager Handler Service', () => { let mongodbMock: MongoClient; beforeAll(async () => { await createMongoUri(); mongodbMock = await lambdaModule.connectToMongo(); }); test('Normal flow - database is empty', async () => { // Spy on sendCandidateToGlobalEventQueue, This function sends each candidate to the exchange const spy = jest.spyOn(lambdaModule, 'sendCandidateToGlobalEventQueue'); await lambdaModule.zombieCleanupLambda(); // Assertion expect(spy).toHaveBeenCalledTimes(0); }); test('Normal flow - 1 agent connected, 2 agents are zombies and 2 gateways should be ignored', async () => { // Set the first agent record to be valid on connection time( connected agent ) const nowDate = new Date(); agentsMocks[0].updatedAt = nowDate; agentsMocks[1].updatedAt = nowDate.setHours(nowDate.getHours() - 10); await mongodbMock.db().collection('SDPC_NetworkDeviceChannel').insertMany(agentsMocks); await mongodbMock.db().collection('SDPC_NetworkDeviceChannel').insertMany(gatewaysMocks); // Spy on sendCandidateToGlobalEventQueue, This function sends each candidate to the exchange const spy = jest.spyOn(lambdaModule, 'sendCandidateToGlobalEventQueue'); // Logic await lambdaModule.zombieCleanupLambda(); // Assertion expect(spy).toHaveBeenCalledTimes(1); expect(spy).toBeCalledWith({ type: agentsMocks[0].type, deviceId: agentsMocks[0].deviceId, _id: agentsMocks[0]._id, tenantId: agentsMocks[0].tenantId, }); }); });