notbank
Version:
The Notbank for Node.js
323 lines (322 loc) • 15.5 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import assert from "assert";
import "mocha";
import { NotbankClient } from "../../lib/services/notbankClient.js";
import { WebsocketServiceFactory } from "../../lib/services/websocketServiceFactory.js";
import { TestHelper } from "./TestHelper.js";
describe("Subscription Service websocket", () => {
const client = NotbankClient.Factory.createWebsocketClient();
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield client.connect();
yield client.authenticateUser(TestHelper.getCredentials());
subscriptionService = client.getSubscriptionService();
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield client.close();
}));
const mockCallback = (data) => {
console.log("Evento recibido:", data);
};
describe("subscribeLevel1", () => {
it("debería suscribirse correctamente a Level1", function () {
return __awaiter(this, void 0, void 0, function* () {
this.timeout(70000);
const request = {
InstrumentId: 1,
Symbol: "BTCUSD",
};
assert.doesNotThrow(() => subscriptionService.subscribeLevel1(request, mockCallback, mockCallback));
});
});
it("debería lanzar un error si falta InstrumentId y Symbol", () => {
const request = {};
assert.rejects(() => subscriptionService.subscribeLevel1(request, mockCallback, mockCallback), Error);
});
});
// Prueba para desuscribirse de Level1
describe("unsubscribeLevel1", () => {
it("debería desuscribirse correctamente de Level1", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
InstrumentId: 1,
Symbol: "BTCUSD",
};
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeLevel1(request); }), Error);
}));
});
// Prueba para suscribirse a Level2
describe("subscribeLevel2", () => {
it("debería suscribirse correctamente a Level2", () => {
const request = {
InstrumentId: 1,
Depth: 10,
};
assert.doesNotThrow(() => subscriptionService.subscribeLevel2(request, mockCallback, mockCallback));
});
it("debería lanzar un error si falta InstrumentId o Symbol", () => {
const request = {
Depth: 2
};
assert.rejects(() => subscriptionService.subscribeLevel2(request, mockCallback, mockCallback));
});
});
// Prueba para suscribirse a Trades
describe("subscribeTrades", () => {
it("debería suscribirse correctamente a Trades", () => {
const request = {
InstrumentId: 1,
IncludeLastCount: 10,
};
assert.doesNotThrow(() => subscriptionService.subscribeTrades(request, mockCallback));
});
it("debería lanzar un error si falta IncludeLastCount", () => {
const request = {
InstrumentId: 1,
IncludeLastCount: -1, // Invalid
};
assert.rejects(() => subscriptionService.subscribeTrades(request, mockCallback), Error);
});
});
// Prueba para desuscribirse de Trades
describe("unsubscribeTrades", () => {
it("debería desuscribirse correctamente de Trades", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
InstrumentId: 1,
};
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeTrades(request); }), Error);
}));
});
// Prueba para suscribirse a Eventos de Cuenta
describe("subscribeAccountEvents", () => {
it("debería suscribirse correctamente a Eventos de Cuenta", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 55,
};
assert.doesNotThrow(() => subscriptionService.subscribeAccountEvents(request, {
accountInfoUpdateEventHandler: mockCallback,
}));
}));
it("debería lanzar un error si falta AccountId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: null,
};
yield assert.rejects(subscriptionService.subscribeAccountEvents(request, {
withdrawTicketUpdateEventHandler: mockCallback,
}));
}));
});
});
describe("subscriptionService - SubscribeAccountEvents", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.close();
}));
const mockCallback = (data) => {
console.log("Evento recibido:", data);
};
// Manejador de eventos simulado
describe("subscribeAccountEvents", () => {
it("debería suscribirse correctamente a eventos de cuenta", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { AccountId: 1 };
assert.doesNotThrow(() => subscriptionService.subscribeAccountEvents(request, {
accountInfoUpdateEventHandler: mockCallback,
}));
}));
it("debería lanzar un error si falta AccountId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { AccountId: null };
yield assert.rejects(subscriptionService.subscribeAccountEvents(request, {}), Error);
}));
it("debería lanzar error en la suscripción", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 999,
}; // Datos inválidos
yield assert.rejects(subscriptionService.subscribeAccountEvents(request, {}), Error);
}));
});
});
describe("subscriptionService - UnsubscribeAccountEvents", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.close();
}));
describe("unsubscribeAccountEvents", () => {
it("debería desuscribirse correctamente de eventos de cuenta", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 1,
};
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeAccountEvents(request); }), Error);
}));
it("debería lanzar un error si falta AccountId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { AccountId: null };
yield assert.rejects(subscriptionService.unsubscribeAccountEvents(request), Error);
}));
it("debería manejar errores durante la desuscripción", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 999,
}; // Datos inválidos
yield assert.rejects(subscriptionService.unsubscribeAccountEvents(request), Error);
}));
});
});
describe("SubscriptionService - SubscribeOrderStateEvents", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.close();
}));
// Manejador de eventos simulado
const mockEventHandler = (data) => {
console.log("Evento de estado de orden recibido:", data);
};
describe("subscribeOrderStateEvents", () => {
it("debería suscribirse correctamente a eventos de estado de órdenes", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 1,
};
assert.doesNotThrow(() => subscriptionService.subscribeOrderStateEvents(request, mockEventHandler));
}));
it("debería suscribirse correctamente con filtro de InstrumentId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 1,
InstrumentId: 1,
};
assert.doesNotThrow(() => subscriptionService.subscribeOrderStateEvents(request, mockEventHandler));
}));
it("debería lanzar un error si falta AccountId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { AccountId: null };
yield assert.rejects(subscriptionService.subscribeOrderStateEvents(request, mockEventHandler), Error);
}));
it("debería manejar errores durante la suscripción", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 999,
}; // Datos inválidos
yield assert.rejects(subscriptionService.subscribeOrderStateEvents(request, mockEventHandler), Error);
}));
});
});
describe("subscriptionService - UnsubscribeOrderStateEvents", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
describe("unsubscribeOrderStateEvents", () => {
it("debería desuscribirse correctamente de eventos de estado de órdenes", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 1,
};
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeOrderStateEvents(request); }), Error);
}));
it("debería desuscribirse correctamente con filtro de InstrumentId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 1,
InstrumentId: 1,
};
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeOrderStateEvents(request); }), Error);
}));
it("debería lanzar un error si falta AccountId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { AccountId: null };
yield assert.rejects(subscriptionService.unsubscribeOrderStateEvents(request), Error);
}));
it("debería manejar errores durante la desuscripción", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {
AccountId: 999,
}; // Datos inválidos
yield assert.rejects(subscriptionService.unsubscribeOrderStateEvents(request), Error);
}));
});
});
describe("SubscribeTicker", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
after(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.close();
}));
it("debería suscribirse correctamente a SubscribeTicker 1", function () {
return __awaiter(this, void 0, void 0, function* () {
this.timeout(70000);
const request = {
InstrumentId: 1,
Interval: 60,
IncludeLastCount: 2,
};
let snapshotResolved = false;
yield new Promise((resolve, reject) => {
subscriptionService.subscribeTicker(request, (snapshot) => {
console.debug("Snapshot", snapshot);
snapshotResolved = true;
}, (update) => {
console.debug("Update", update);
if (snapshotResolved)
resolve();
});
// Safety timeout in case no data arrives
setTimeout(() => reject(new Error("Timeout: no data received")), 60000);
});
});
});
});
describe("subscriptionService - UnsubscribeTicker", () => {
const wsServiceFactory = new WebsocketServiceFactory({
domain: "stgapi.notbank.exchange",
});
let subscriptionService;
before(() => __awaiter(void 0, void 0, void 0, function* () {
yield wsServiceFactory.connect();
yield wsServiceFactory.authenticateUser(TestHelper.getCredentials());
subscriptionService = wsServiceFactory.getSubscriptionService();
}));
describe("unsubscribeTicker", () => {
it("debería desuscribirse correctamente de un ticker", () => __awaiter(void 0, void 0, void 0, function* () {
const request = { InstrumentId: 1 };
assert.doesNotThrow(() => __awaiter(void 0, void 0, void 0, function* () { return yield subscriptionService.unsubscribeTicker(request); }), Error);
}));
it("debería lanzar un error si falta InstrumentId", () => __awaiter(void 0, void 0, void 0, function* () {
const request = {};
// @ts-expect-error
yield assert.rejects(subscriptionService.unsubscribeTicker(request), Error);
}));
});
});