Fixing unit tests

This commit is contained in:
Collin Duncan 2024-04-16 09:52:25 +02:00
parent c7e500ad6f
commit 6340a2328e
No known key found for this signature in database
2 changed files with 43 additions and 9 deletions

13
test/config.ts Normal file
View file

@ -0,0 +1,13 @@
export default {
REDIS_HOST: 'localhost',
REDIS_PORT: '6379',
EMAIL_HOST: 'email_host.com',
EMAIL_USER: 'email@email_host.com',
EMAIL_PASSWORD: 'email_password',
EMAIL_MAILBOX: 'mailbox',
NTFY_HOST: 'host.ntfy.com',
NTFY_TOPIC: 'autobaan',
NTFY_TOKEN: 'tk_123',
BAANRESERVEREN_USERNAME: 'username',
BAANRESERVEREN_PASSWORD: 'password',
}

View file

@ -1,3 +1,4 @@
import { getQueueToken } from '@nestjs/bull'
import { ConfigModule } from '@nestjs/config' import { ConfigModule } from '@nestjs/config'
import { Test, TestingModule } from '@nestjs/testing' import { Test, TestingModule } from '@nestjs/testing'
import { TypeOrmModule } from '@nestjs/typeorm' import { TypeOrmModule } from '@nestjs/typeorm'
@ -6,12 +7,20 @@ import { LoggerModule } from '../../../src/logger/module'
import { LoggerService } from '../../../src/logger/service.logger' import { LoggerService } from '../../../src/logger/service.logger'
import { NtfyModule } from '../../../src/ntfy/module' import { NtfyModule } from '../../../src/ntfy/module'
import { NtfyProvider } from '../../../src/ntfy/provider' import { NtfyProvider } from '../../../src/ntfy/provider'
import { ReservationsCronService } from '../../../src/reservations/cron' import {
RESERVATIONS_QUEUE_NAME,
ReservationsQueue,
} from '../../../src/reservations/config'
import {
DAILY_RESERVATIONS_ATTEMPTS,
ReservationsCronService,
} from '../../../src/reservations/cron'
import { Reservation } from '../../../src/reservations/entity' import { Reservation } from '../../../src/reservations/entity'
import { ReservationsModule } from '../../../src/reservations/module' import { ReservationsModule } from '../../../src/reservations/module'
import { ReservationsService } from '../../../src/reservations/service' import { ReservationsService } from '../../../src/reservations/service'
import { BaanReserverenService } from '../../../src/runner/baanreserveren/service' import { BaanReserverenService } from '../../../src/runner/baanreserveren/service'
import { RunnerModule } from '../../../src/runner/module' import { RunnerModule } from '../../../src/runner/module'
import config from '../../config'
describe('reservations.cron', () => { describe('reservations.cron', () => {
let module: TestingModule let module: TestingModule
@ -24,7 +33,12 @@ describe('reservations.cron', () => {
RunnerModule, RunnerModule,
NtfyModule, NtfyModule,
LoggerModule, LoggerModule,
ConfigModule.forRoot({ isGlobal: true }), ConfigModule.forRoot({
isGlobal: true,
ignoreEnvFile: true,
ignoreEnvVars: true,
load: [() => config],
}),
TypeOrmModule.forRoot({ TypeOrmModule.forRoot({
type: 'sqlite', type: 'sqlite',
database: ':memory:', database: ':memory:',
@ -55,7 +69,7 @@ describe('reservations.cron', () => {
describe('has scheduleable reservations', () => { describe('has scheduleable reservations', () => {
const stubbedReservation = { id: 'abc-123' } const stubbedReservation = { id: 'abc-123' }
let warmupSpy: jest.SpyInstance let warmupSpy: jest.SpyInstance
let performReservationSpy: jest.SpyInstance let reservationsQueueSpy: jest.SpyInstance
let loggerSpy: jest.SpyInstance let loggerSpy: jest.SpyInstance
const loggerInvocationDates: { msg: string; timestamp: Date }[] = [] const loggerInvocationDates: { msg: string; timestamp: Date }[] = []
@ -75,15 +89,17 @@ describe('reservations.cron', () => {
) )
.mockReturnValue(new Promise((res) => setTimeout(res, 1000))) .mockReturnValue(new Promise((res) => setTimeout(res, 1000)))
performReservationSpy = jest reservationsQueueSpy = jest
.spyOn( .spyOn(
module.get<BaanReserverenService>(BaanReserverenService), module.get<ReservationsQueue>(
'performReservation', getQueueToken(RESERVATIONS_QUEUE_NAME),
),
'addBulk',
) )
.mockResolvedValue() .mockResolvedValue([]) // unused so empty array
loggerSpy = jest loggerSpy = jest
.spyOn(module.get<LoggerService>(LoggerService), 'log') .spyOn(module.get<LoggerService>(LoggerService), 'debug')
.mockImplementation((msg: string) => { .mockImplementation((msg: string) => {
loggerInvocationDates.push({ msg, timestamp: new Date() }) loggerInvocationDates.push({ msg, timestamp: new Date() })
}) })
@ -114,7 +130,12 @@ describe('reservations.cron', () => {
}) })
it('should perform reservations', () => { it('should perform reservations', () => {
expect(performReservationSpy).toHaveBeenCalledWith(stubbedReservation) expect(reservationsQueueSpy).toHaveBeenCalledWith([
{
data: stubbedReservation,
opts: { attempts: DAILY_RESERVATIONS_ATTEMPTS },
},
])
}) })
}) })
}) })