@brtnetwork/brt-binary-codec
Version:
BRT Ledger binary codec
98 lines (92 loc) • 2.7 kB
JavaScript
const { encode, decode } = require("../dist");
// Notice: no Amount or Fee
const tx_json = {
Account: "bnCLGxX4DaGh89DLohvD1qcCHSXnrvHPnN",
// Amount: '1000',
Destination: "bG23eHAVywMb53i7QVh3gUjujEM29c1ySs",
// Fee: '10',
// JavaScript converts operands to 32-bit signed ints after doing bitwise
// operations. We need to convert it back to an unsigned int with >>> 0.
Flags: (1 << 31) >>> 0, // tfFullyCanonicalSig
Sequence: 1,
TransactionType: "Payment",
// TxnSignature,
// Signature,
// SigningPubKey
};
describe("encoding and decoding tx_json", function () {
test("can encode tx_json without Amount or Fee", function () {
const encoded = encode(tx_json);
const decoded = decode(encoded);
expect(tx_json).toEqual(decoded);
});
test("can encode tx_json with Amount and Fee", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: "1000",
Fee: "10",
});
const encoded = encode(my_tx);
const decoded = decode(encoded);
expect(my_tx).toEqual(decoded);
});
test("can encode tx_json with TicketCount", function () {
const my_tx = Object.assign({}, tx_json, {
TicketCount: 2,
});
const encoded = encode(my_tx);
const decoded = decode(encoded);
expect(my_tx).toEqual(decoded);
});
test("can encode tx_json with TicketSequence", function () {
const my_tx = Object.assign({}, tx_json, {
Sequence: 0,
TicketSequence: 2,
});
const encoded = encode(my_tx);
const decoded = decode(encoded);
expect(my_tx).toEqual(decoded);
});
test("throws when Amount is invalid", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: "1000.001",
Fee: "10",
});
expect(() => {
encode(my_tx);
}).toThrow();
});
test("throws when Fee is invalid", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: "1000",
Fee: "10.123",
});
expect(() => {
encode(my_tx);
}).toThrow();
});
test("throws when Amount and Fee are invalid", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: "1000.789",
Fee: "10.123",
});
expect(() => {
encode(my_tx);
}).toThrow();
});
test("throws when Amount is a number instead of a string-encoded integer", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: 1000.789,
});
expect(() => {
encode(my_tx);
}).toThrow();
});
test("throws when Fee is a number instead of a string-encoded integer", function () {
const my_tx = Object.assign({}, tx_json, {
Amount: 1234.56,
});
expect(() => {
encode(my_tx);
}).toThrow();
});
});