import 'jest' jest.mock('../bots/storageService') import { getBotsFromStorage, saveBotToStorage } from '../bots/storageService' import botsProvider from '../bots' import { NotFoundError, InternalError, WrongInputError } from '../../utils/customErrors' const setFunctionMock = (fn: any, result: any) => { fn.mockImplementation(jest.fn(result)) } beforeEach(() => { jest.resetAllMocks() }) describe('data:', () => { describe('bots.ts:', () => { describe('getBots():', () => { it('gets and returns all bots', async done => { const bots = [{ id: 'test' }] setFunctionMock(getBotsFromStorage, () => bots) const res = await botsProvider.getBots() expect(res).toEqual(bots) expect(botsProvider.getBots).not.toThrowError() done() }) it('fails retrieving bot and throws InternalError', async done => { setFunctionMock(getBotsFromStorage, () => { throw new Error('test error') }) try { await botsProvider.getBots() expect(false).toBe(true) // fail if doesnt throw Error } catch (err) { expect(err).toMatchObject(new NotFoundError('Error: test error')) expect(getBotsFromStorage).toThrowError(Error) done() } }) }) describe('postBot():', () => { it('saves bot and returns undefined', async done => { const req: any = { body: { bot: { id: 'testt', version: '1' } } } setFunctionMock(saveBotToStorage, () => Promise.resolve()) const res = await botsProvider.postBot(req) expect(res).toEqual(undefined) expect(saveBotToStorage).toBeCalledWith(req.body.bot) expect(botsProvider.postBot).not.toThrowError() done() }) it('fails saving bot and throws InternalError', async done => { const req: any = { body: { bot: { id: 'testt', version: '1' } } } setFunctionMock(saveBotToStorage, () => { throw new Error('test error') }) try { await botsProvider.postBot(req) expect(true).toBe(false) } catch (err) { expect(saveBotToStorage).toBeCalledWith(req.body.bot) expect(err).toMatchObject(new InternalError('Error: test error')) expect(saveBotToStorage).toThrowError(Error) done() } }) it('throws WrongInputError because wrong input (no version)', async done => { const req: any = { body: { bot: { id: 'testt' } } } setFunctionMock(saveBotToStorage, () => Promise.resolve()) try { await botsProvider.postBot(req) expect(true).toBe(false) } catch (err) { expect(saveBotToStorage).not.toBeCalled() expect(err).toMatchObject(new WrongInputError('id or version not found in bot body')) done() } done() }) it('throws WrongInputError because wrong input (no bot)', async done => { const req: any = { body: { bot: undefined } } setFunctionMock(saveBotToStorage, () => Promise.resolve()) try { await botsProvider.postBot(req) expect(true).toBe(false) } catch (err) { expect(saveBotToStorage).not.toBeCalled() expect(err).toMatchObject(new WrongInputError('request body doesnt have parameter bot')) done() } done() }) }) }) })