wsOrderGateway.test.ts 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import { describe, it, expect, vi } from "vitest";
  2. import nacl from "tweetnacl";
  3. import { PacificaWsOrderGateway } from "../packages/connectors/pacifica/src/wsOrderGateway";
  4. import type { SigningConfig } from "../packages/connectors/pacifica/src/signing";
  5. describe("PacificaWsOrderGateway", () => {
  6. const seed = Uint8Array.from({ length: 32 }, (_, i) => i + 1);
  7. const { secretKey, publicKey } = nacl.sign.keyPair.fromSeed(seed);
  8. const secret = Buffer.from(secretKey).toString("base64");
  9. const apiKey = Buffer.from(publicKey).toString("base64");
  10. const signing: SigningConfig = {
  11. apiKey,
  12. secret,
  13. subaccount: "sub-1"
  14. };
  15. it("extracts numeric order id from websocket response", async () => {
  16. const mockWs = {
  17. connect: vi.fn(),
  18. waitForOpen: vi.fn(),
  19. sendRpc: vi.fn().mockResolvedValue({ s: "BTC", i: 377323582, I: "client-1" })
  20. } as any;
  21. const gateway = new PacificaWsOrderGateway(mockWs, signing);
  22. const result = await gateway.createOrder({
  23. symbol: "BTC",
  24. side: "bid",
  25. price: "50000",
  26. amount: "0.1",
  27. tif: "IOC",
  28. clientOrderId: "client-1"
  29. });
  30. expect(result.orderId).toBe("377323582");
  31. expect(mockWs.sendRpc).toHaveBeenCalled();
  32. });
  33. it("throws when order id missing", async () => {
  34. const mockWs = {
  35. connect: vi.fn(),
  36. waitForOpen: vi.fn(),
  37. sendRpc: vi.fn().mockResolvedValue({ status: "ok" })
  38. } as any;
  39. const gateway = new PacificaWsOrderGateway(mockWs, signing);
  40. await expect(
  41. gateway.createOrder({
  42. symbol: "BTC",
  43. side: "bid",
  44. price: "50000",
  45. amount: "0.1",
  46. tif: "IOC",
  47. clientOrderId: "client-1"
  48. })
  49. ).rejects.toThrow(/missing order id/);
  50. });
  51. });