jspurefix
Version:
pure node js fix engine
207 lines • 9.93 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());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
const path = require("path");
const quickfix_1 = require("../../types/FIX4.4/quickfix");
const setup_1 = require("../env/setup");
const root = path.join(__dirname, '../../../data');
let definitions;
let session;
let views;
let structure;
let view;
let setup;
beforeAll(() => __awaiter(void 0, void 0, void 0, function* () {
setup = new setup_1.Setup('session/qf-fix44.json', null);
yield setup.init();
definitions = setup.definitions;
session = setup.client.transmitter;
views = yield setup.client.replayer.replayFixFile(path.join(root, 'examples/FIX.4.4/quickfix/md-data-snapshot/fix.txt'));
if (views && views.length > 0) {
view = views[0];
structure = view.structure;
}
}), 45000);
test('expect a structure from fix msg', () => {
expect(structure).toBeTruthy();
});
test('get NoMDEntries directly - expect an array', () => {
const noMDEntriesView = view === null || view === void 0 ? void 0 : view.getView('NoMDEntries');
expect(noMDEntriesView).toBeTruthy();
const noMDEntries = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.toObject();
expect(Array.isArray(noMDEntries)).toEqual(true);
expect(noMDEntries.length).toEqual(2);
});
test('get NoMDEntries via MDFullGrp - array within a component', () => {
const mdFullGrp = view.getView('MDFullGrp');
expect(mdFullGrp).toBeTruthy();
const mdFullGrpAsObject = mdFullGrp === null || mdFullGrp === void 0 ? void 0 : mdFullGrp.toObject();
const noMDEntries = mdFullGrpAsObject.NoMDEntries;
expect(Array.isArray(noMDEntries)).toEqual(true);
expect(noMDEntries.length).toEqual(2);
});
function getMdEntriesObjects() {
const noMDEntriesView = view.getView('NoMDEntries');
expect(noMDEntriesView).toBeTruthy();
const noMDEntries = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.toObject();
expect(Array.isArray(noMDEntries)).toEqual(true);
expect(noMDEntries.length).toEqual(2);
return noMDEntries;
}
test('get UTCDATEONLY from NoMDEntries instance 1', () => {
var _a, _b;
const noMdEntriesAsObjects = getMdEntriesObjects();
const noMDEntriesView = view.getView('NoMDEntries');
const mmEntryView = (_a = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.getGroupInstance(1)) !== null && _a !== void 0 ? _a : null;
const instance = noMdEntriesAsObjects[1];
const mmEntryDateAsString = (_b = mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString('MDEntryDate')) !== null && _b !== void 0 ? _b : null;
expect(mmEntryDateAsString).toEqual('20210129');
expect(mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString(272)).toEqual('20210129');
const asUtc = new Date(Date.UTC(2021, 0, 29));
expect(instance.MDEntryDate).toEqual(asUtc);
});
test('get UTCTIMEONLY from NoMDEntries instance 0', () => {
var _a, _b;
const noMdEntriesAsObjects = getMdEntriesObjects();
const noMDEntriesView = view.getView('NoMDEntries');
const mmEntryView = (_a = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.getGroupInstance(0)) !== null && _a !== void 0 ? _a : null;
const instance = noMdEntriesAsObjects[0];
const mmEntryTimeAsString = (_b = mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString('MDEntryTime')) !== null && _b !== void 0 ? _b : null;
expect(mmEntryTimeAsString).toEqual('19:45:19.852');
expect(mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString(273)).toEqual('19:45:19.852');
const asUtc = new Date(Date.UTC(0, 0, 0, 19, 45, 19, 852));
expect(instance.MDEntryTime).toEqual(asUtc);
});
test('get UTCTIMESTAMP from NoMDEntries instance 1', () => {
var _a, _b;
const noMdEntriesAsObjects = getMdEntriesObjects();
const noMDEntriesView = view.getView('NoMDEntries');
const mmEntryView = (_a = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.getGroupInstance(1)) !== null && _a !== void 0 ? _a : null;
const instance = noMdEntriesAsObjects[1];
const mmEntryExpireTimeAsString = (_b = mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString('ExpireTime')) !== null && _b !== void 0 ? _b : null;
expect(mmEntryExpireTimeAsString).toEqual('20210129-19:45:19.000');
expect(mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString(126)).toEqual('20210129-19:45:19.000');
const asUtc = new Date(Date.UTC(2021, 0, 29, 19, 45, 19, 0));
const d = instance.ExpireTime;
expect(d).toEqual(asUtc);
});
test('get MinQty from NoMDEntries instance 1', () => {
var _a, _b;
const noMdEntriesAsObjects = getMdEntriesObjects();
const noMDEntriesView = view.getView('NoMDEntries');
const mmEntryView = (_a = noMDEntriesView === null || noMDEntriesView === void 0 ? void 0 : noMDEntriesView.getGroupInstance(1)) !== null && _a !== void 0 ? _a : null;
const instance = noMdEntriesAsObjects[1];
const mmEntryMinQtyAsString = (_b = mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString('MinQty')) !== null && _b !== void 0 ? _b : null;
expect(mmEntryMinQtyAsString).toEqual('9.6478');
expect(mmEntryView === null || mmEntryView === void 0 ? void 0 : mmEntryView.getString(110)).toEqual('9.6478');
expect(instance.MinQty).toEqual(9.6478);
});
test('get selection tags one call - tag ids', () => {
const [a, b, c, d] = view.getTypedTags([8, 9, 35, 49]);
expect(a).toEqual('FIX4.4');
expect(b).toEqual(3957);
expect(c).toEqual('W');
expect(d).toEqual('init-comp');
});
test('get selection tags one array call - tag names', () => {
const [a, b, c, d, e, f] = view.getTypedTags([
'BeginString',
'BodyLength',
'MsgType',
'MsgSeqNum',
'MDReqID',
'Symbol'
]);
expect(a).toEqual('FIX4.4');
expect(b).toEqual(3957);
expect(c).toEqual('W');
expect(d).toEqual(1);
expect(e).toEqual('Lorem');
expect(f).toEqual('ipsum');
});
test('get selection tags one varargs call - tag names', () => {
const [a, b, c, d, e, f] = view.getTypedList('BeginString', 'BodyLength', 'MsgType', 'MsgSeqNum', 'MDReqID', 'Symbol');
expect(a).toEqual('FIX4.4');
expect(b).toEqual(3957);
expect(c).toEqual('W');
expect(d).toEqual(1);
expect(e).toEqual('Lorem');
expect(f).toEqual('ipsum');
});
test('nested view fetch', () => {
const legGrpView = view.getView('InstrmtLegGrp.NoLegs');
expect(legGrpView).toBeTruthy();
const legGrp = legGrpView === null || legGrpView === void 0 ? void 0 : legGrpView.toObject();
expect(legGrp).toBeTruthy();
expect(Array.isArray(legGrp));
expect(legGrp.length).toEqual(3);
});
test('view buffer', () => {
const asciiView = view;
const buffer = asciiView.toBuffer('?'.charCodeAt(0));
const txt = buffer.toString();
expect(txt.startsWith('8=FIX4.4?9='));
expect(txt.endsWith('?10=198?'));
});
function toFixMessage(o, msg) {
session.encodeMessage(msg.msgType, o);
return session.buffer.toString();
}
function BidOfferRequest(symbol) {
return {
MDReqID: '1',
SubscriptionRequestType: quickfix_1.SubscriptionRequestType.SnapshotPlusUpdates,
MarketDepth: 0,
MDReqGrp: {
NoMDEntryTypes: [
{
MDEntryType: quickfix_1.MDEntryType.Bid
},
{
MDEntryType: quickfix_1.MDEntryType.Offer
}
]
},
InstrmtMDReqGrp: {
NoRelatedSym: [
{
Instrument: {
Symbol: symbol
}
}
]
}
};
}
test('market data request', () => __awaiter(void 0, void 0, void 0, function* () {
var _a, _b;
const mdr = BidOfferRequest('EUR/USD');
const def = definitions.message.get('MarketDataRequest');
expect(def).toBeTruthy();
if (!def)
return;
const fix = toFixMessage(mdr, def);
expect(fix).toBeTruthy();
const res = yield setup.client.parseText(fix);
expect(res.event).toEqual('msg');
expect(res.msgType).toEqual(def.msgType);
const gv = (_a = res === null || res === void 0 ? void 0 : res.view) === null || _a === void 0 ? void 0 : _a.getView('MDReqGrp');
expect(gv).toBeTruthy();
const s = gv === null || gv === void 0 ? void 0 : gv.toString();
const newLine = require('os').EOL;
expect(s).toEqual(`[0] 267 (NoMDEntryTypes) = 2, [1] 269 (MDEntryType) = 0[Bid]${newLine}[2] 269 (MDEntryType) = 1[Offer]`);
const iv = (_b = res === null || res === void 0 ? void 0 : res.view) === null || _b === void 0 ? void 0 : _b.getView('InstrmtMDReqGrp.NoRelatedSym');
expect(iv).toBeTruthy();
const s2 = iv === null || iv === void 0 ? void 0 : iv.toString();
expect(s2).toEqual(`[0] 146 (NoRelatedSym) = 1, [1] 55 (Symbol) = EUR/USD${newLine}`);
}));
//# sourceMappingURL=view-decode.test.js.map