import { datatype } from 'faker' import { Vonage } from './vonage' let error: Error let session: any const mockCreateSession = jest.fn((_options, callback) => callback(error, session)) const mockGenerateToken = jest.fn() jest.mock('opentok', () => { return jest.fn().mockImplementation(() => { return { createSession: mockCreateSession, generateToken: mockGenerateToken } }) }) globalThis.secret = { vonage: { key: datatype.uuid(), secret: datatype.uuid(), }, } as any describe('Vonage', () => { let subject: Vonage beforeAll(() => { subject = new Vonage() }) describe('#createSession', () => { beforeAll(() => { session = { sessionId: datatype.uuid() } }) it("call opentok's createSession", async () => { await subject.createSession() expect(mockCreateSession).toBeCalled() }) describe('when opentok returns an error', () => { beforeAll(() => { error = new Error() }) it('rejects with an error', async () => { await expect(subject.createSession()).rejects.toThrowError(error) }) }) describe('when opentok returns the session', () => { beforeAll(() => { error = undefined }) it('return the session id', async () => { await expect(subject.createSession()).resolves.toEqual(session.sessionId) }) }) }) describe('#generateToken', () => { it("call opentok's generateToken", async () => { await subject.generateToken(datatype.uuid()) expect(mockGenerateToken).toBeCalled() }) }) })