export const getUserID = jest.fn((uid) => uid) export const getPeerHandle = jest.fn((/*uid*/) => undefined) export const getPeerFootprint = jest.fn((/*uid*/) => Promise.resolve(Date.now())) export const sendListener = { callback: null } export const send = jest.fn((uid, channel, message) => { if (sendListener.callback) { sendListener.callback(uid, channel, message) } }) const sendMockClear = send.mockClear send.mockClear = () => { sendListener.callback = null sendMockClear() } export const broadcastListener = { callback: null } export const broadcast = jest.fn((channel, message) => { if (broadcastListener.callback) { broadcastListener.callback(channel, message) } }) const broadcastMockClear = broadcast.mockClear broadcast.mockClear = () => { broadcastListener.callback = null broadcastMockClear() } export const terminatePeer = jest.fn() export const destructor = jest.fn(() => eventListeners.clear()) const eventListeners = new Map() export const getEventListener = (room, event) => eventListeners.get(`${room}:${event}`) export const addEventListener = jest.fn((room, event, callback) => eventListeners.set(`${room}:${event}`, callback), ) const addEventListenerMockClear = addEventListener.mockClear addEventListener.mockClear = () => { eventListeners.clear() addEventListenerMockClear() } const MockConnection = jest.fn().mockImplementation(({ room }) => { setTimeout( () => getEventListener(room, "roomJoined") && getEventListener(room, "roomJoined")(), 0, ) return { getUserID: () => getUserID(room), getPeerHandle, getPeerFootprint, send, broadcast, terminatePeer, destructor, addEventListener: (event, callback) => addEventListener(room, event, callback), } }) export default MockConnection