mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-09 16:28:06 +00:00
83 lines
3.1 KiB
TypeScript
83 lines
3.1 KiB
TypeScript
import { describe, expect, it, beforeEach, afterEach } from "vitest";
|
|
import { createExchangeAdapter, resolveExchangeId } from "../src/exchanges/create-adapter";
|
|
import { AsterExchangeAdapter } from "../src/exchanges/aster-adapter";
|
|
import { GrvtExchangeAdapter } from "../src/exchanges/grvt/adapter";
|
|
import { BackpackExchangeAdapter } from "../src/exchanges/backpack/adapter";
|
|
import { ParadexExchangeAdapter } from "../src/exchanges/paradex/adapter";
|
|
import { StandxExchangeAdapter } from "../src/exchanges/standx/adapter";
|
|
|
|
const ORIGINAL_ENV = { ...process.env };
|
|
|
|
beforeEach(() => {
|
|
process.env = { ...ORIGINAL_ENV };
|
|
});
|
|
|
|
afterEach(() => {
|
|
process.env = { ...ORIGINAL_ENV };
|
|
});
|
|
|
|
describe("exchange factory", () => {
|
|
it("defaults to aster when no env is provided", () => {
|
|
delete process.env.EXCHANGE;
|
|
process.env.ASTER_API_KEY = "key";
|
|
process.env.ASTER_API_SECRET = "secret";
|
|
const adapter = createExchangeAdapter({ symbol: "BTCUSDT" });
|
|
expect(adapter).toBeInstanceOf(AsterExchangeAdapter);
|
|
expect(adapter.id).toBe("aster");
|
|
});
|
|
|
|
it("resolves exchange id case-insensitively", () => {
|
|
expect(resolveExchangeId("Grvt")).toBe("grvt");
|
|
expect(resolveExchangeId("ASTER")).toBe("aster");
|
|
expect(resolveExchangeId("BACKPACK")).toBe("backpack");
|
|
expect(resolveExchangeId("PaRaDeX")).toBe("paradex");
|
|
expect(resolveExchangeId("StandX")).toBe("standx");
|
|
});
|
|
|
|
it("creates grvt adapter when EXCHANGE=grvt", () => {
|
|
process.env.EXCHANGE = "grvt";
|
|
process.env.GRVT_API_KEY = "api-key";
|
|
process.env.GRVT_API_SECRET = "0x" + "1".repeat(64);
|
|
process.env.GRVT_SUB_ACCOUNT_ID = "sub";
|
|
process.env.GRVT_INSTRUMENT = "BTC_USDT_Perp";
|
|
process.env.GRVT_SYMBOL = "BTCUSDT";
|
|
delete process.env.GRVT_SIGNER_PATH;
|
|
|
|
const adapter = createExchangeAdapter({ symbol: "BTCUSDT" });
|
|
expect(adapter).toBeInstanceOf(GrvtExchangeAdapter);
|
|
expect(adapter.id).toBe("grvt");
|
|
});
|
|
|
|
it("creates backpack adapter when EXCHANGE=backpack", () => {
|
|
process.env.EXCHANGE = "backpack";
|
|
process.env.BACKPACK_API_KEY = "api-key";
|
|
process.env.BACKPACK_API_SECRET = "secret";
|
|
process.env.TRADE_SYMBOL = "BTCUSDC";
|
|
|
|
const adapter = createExchangeAdapter({ symbol: "BTCUSDC" });
|
|
expect(adapter).toBeInstanceOf(BackpackExchangeAdapter);
|
|
expect(adapter.id).toBe("backpack");
|
|
});
|
|
|
|
it("creates paradex adapter when EXCHANGE=paradex", () => {
|
|
process.env.EXCHANGE = "paradex";
|
|
process.env.PARADEX_PRIVATE_KEY = "0x" + "1".repeat(64);
|
|
process.env.PARADEX_WALLET_ADDRESS = "0x" + "2".repeat(40);
|
|
process.env.PARADEX_SYMBOL = "BTC/USDC";
|
|
|
|
const adapter = createExchangeAdapter({ symbol: "BTC/USDC" });
|
|
expect(adapter).toBeInstanceOf(ParadexExchangeAdapter);
|
|
expect(adapter.id).toBe("paradex");
|
|
});
|
|
|
|
it("creates standx adapter when EXCHANGE=standx", () => {
|
|
process.env.EXCHANGE = "standx";
|
|
process.env.STANDX_TOKEN = "token";
|
|
process.env.STANDX_SYMBOL = "BTC-USD";
|
|
|
|
const adapter = createExchangeAdapter({ symbol: "BTC-USD" });
|
|
expect(adapter).toBeInstanceOf(StandxExchangeAdapter);
|
|
expect(adapter.id).toBe("standx");
|
|
});
|
|
});
|