diff --git a/test/contract/ws.public.inverse.test.ts b/test/contract/ws.public.inverse.test.ts new file mode 100644 index 0000000..fd7a5cf --- /dev/null +++ b/test/contract/ws.public.inverse.test.ts @@ -0,0 +1,74 @@ +import { + WebsocketClient, + WSClientConfigurableOptions, + WS_KEY_MAP, +} from '../../src'; +import { + logAllEvents, + getSilentLogger, + waitForSocketEvent, + WS_OPEN_EVENT_PARTIAL, +} from '../ws.util'; + +describe('Public Contract Inverse Websocket Client', () => { + let wsClient: WebsocketClient; + + const wsClientOptions: WSClientConfigurableOptions = { + market: 'contractInverse', + }; + + beforeAll(() => { + wsClient = new WebsocketClient( + wsClientOptions, + getSilentLogger('expectSuccessNoAuth') + ); + wsClient.connectPublic(); + }); + + afterAll(() => { + wsClient.closeAll(true); + }); + + it('should open a public ws connection', async () => { + const wsOpenPromise = waitForSocketEvent(wsClient, 'open'); + try { + expect(await wsOpenPromise).toMatchObject({ + event: WS_OPEN_EVENT_PARTIAL, + wsKey: WS_KEY_MAP.contractInversePublic, + }); + } catch (e) { + console.error('open: ', e); + expect(e).toBeFalsy(); + } + }); + + it('should subscribe to public orderbook events', async () => { + const wsResponsePromise = waitForSocketEvent(wsClient, 'response'); + const wsUpdatePromise = waitForSocketEvent(wsClient, 'update'); + + const wsTopic = 'orderbook.25.BTCUSD'; + wsClient.subscribe(wsTopic); + + try { + expect(await wsResponsePromise).toMatchObject({ + success: true, + op: 'subscribe', + }); + } catch (e) { + console.error('response: ', e); + // sub failed (or jest expect threw) + expect(e).toBeFalsy(); + } + + try { + expect(await wsUpdatePromise).toMatchObject({ + topic: wsTopic, + data: { + a: expect.any(Array), + }, + }); + } catch (e) { + console.error(`Wait for "${wsTopic}" event exception: `, e); + } + }); +});