/* eslint-disable @typescript-eslint/no-var-requires */ import { Test, TestingModule } from '@nestjs/testing' import { datatype, random } from 'faker' import { MockedModule } from '../../../../test/types' import { ConfigRepository } from '../../../repositories' import { Omie } from '../../../typings/global' import { OmieConfigService } from './omie-config.service' describe('OmieConfigService', () => { let subject: OmieConfigService let configRepository: MockedModule beforeAll(async () => { configRepository = { getByPrefix: jest.fn(), } const app: TestingModule = await Test.createTestingModule({ providers: [ { provide: ConfigRepository, useValue: configRepository, }, OmieConfigService, ], }).compile() subject = app.get(OmieConfigService) }) afterEach(() => { jest.resetAllMocks() }) afterAll(() => { jest.restoreAllMocks() }) describe('#getConfig', () => { let config = [] beforeAll(async () => { config = [ { key: `omie_app_key`, value: random.word() }, { key: `omie_app_secret`, value: random.word() }, { key: `omie_endpoint`, value: random.word() }, { key: `omie_enable`, value: `${datatype.boolean()}` }, { key: `omie_enable_cancel`, value: `${datatype.boolean()}` }, { key: `omie_checking_account_code`, value: `${datatype.number()}` }, { key: `omie_category_code`, value: random.word() }, { key: `omie_parc_checking_account_code`, value: `${datatype.number()}` }, { key: `omie_parc_category_code`, value: random.word() }, ] }) beforeEach(() => { configRepository.getByPrefix.mockResolvedValue(config) }) it('load config', async () => { const resolved: Omie = { enable: config.find(el => el.key == 'omie_enable').value === 'true', enable_cancel: config.find(el => el.key == 'omie_enable_cancel').value === 'true', endpoint: config.find(el => el.key == 'omie_endpoint').value, app_key: config.find(el => el.key == 'omie_app_key').value, app_secret: config.find(el => el.key == 'omie_app_secret').value, checking_account_code: +config.find(el => el.key == 'omie_checking_account_code').value, category_code: config.find(el => el.key == 'omie_category_code').value, parc_checking_account_code: +config.find(el => el.key == 'omie_parc_checking_account_code').value, parc_category_code: config.find(el => el.key == 'omie_parc_category_code').value, } await expect(subject.getConfig()).resolves.toEqual(resolved) }) it('use cache on second call', async () => { await subject.getConfig() expect(configRepository.getByPrefix).toBeCalledTimes(0) }) }) })