const { encode, decode } = require("../dist"); // Notice: no Amount or Fee const tx_json = { Account: "r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ", // Amount: '1000', Destination: "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", // 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(); }); });