@ledgerhq/coin-stellar
Version:
Ledger Stellar Coin integration
162 lines • 8.88 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const buildTransaction_1 = require("./buildTransaction");
const bridge_fixture_1 = require("../types/bridge.fixture");
const config_1 = __importDefault(require("../config"));
describe("buildTransaction", () => {
const sender = "GAT4LBXYJGJJJRSNK74NPFLO55CDDXSYVMQODSEAAH3M6EY4S7LPH5GV";
beforeAll(() => {
config_1.default.setCoinConfig(() => ({
status: { type: "active" },
explorer: {
url: "https://stellar.coin.ledger.com", //"https://horizon-testnet.stellar.org/",
fetchLimit: 100,
},
}));
});
it("throws an error if transaction has no NetworkInfo", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({ fees: (0, bignumber_js_1.default)(1) });
// When
await expect((0, buildTransaction_1.buildTransaction)(account, transaction)).rejects.toThrow("stellar family");
});
it("throws an error when no fees are setted in the transaction", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)();
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
networkInfo: { family: "stellar" },
});
// When
await expect((0, buildTransaction_1.buildTransaction)(account, transaction)).rejects.toThrow("FeeNotLoaded");
});
it.skip("crash if transaction amount is 0", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(0),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
});
// When
const builtTransaction = await (0, buildTransaction_1.buildTransaction)(account, transaction);
// Then
expect(builtTransaction).toBeUndefined();
});
it("throws an error when recipient is an invalid address", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(10),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
recipient: "NEW",
});
// When
await expect((0, buildTransaction_1.buildTransaction)(account, transaction)).rejects.toThrow("destination is invalid");
});
it("returns a built transaction in Stellar format", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(10),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
});
// When
const builtTransaction = await (0, buildTransaction_1.buildTransaction)(account, transaction);
// Then
expect(builtTransaction.fee).toEqual("1");
expect(builtTransaction.source).toEqual(sender);
expect(builtTransaction.operations).toHaveLength(1);
const operation = builtTransaction.operations[0];
expect(operation.type).toEqual("payment");
expect(operation.destination).toEqual(transaction.recipient);
expect(operation.amount).toEqual("0.0000010");
expect(operation.asset.code).toEqual("XLM");
expect(operation.asset.issuer).toBeUndefined();
expect(builtTransaction.toXDR().slice(0, 67)).toEqual("AAAAAgAAAAAnxYb4SZKUxk1X+NeVbu9EMd5YqyDhyIAB9s8THJfW8wAAAAEBn2AnAAA");
expect(builtTransaction.toXDR().slice(70)).toEqual("AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAADw9kGYtpM1vsCgDoHjZOVO/sjTKLsmA51f8vdM9oaecgAAAAAAAAAAAAAACgAAAAAAAAAA");
});
it("returns a built transaction in Stellar format when useAllAmount", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({
freshAddress: sender,
balance: (0, bignumber_js_1.default)(600239412),
spendableBalance: (0, bignumber_js_1.default)(500239412),
});
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(10),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
useAllAmount: true,
});
// When
const builtTransaction = await (0, buildTransaction_1.buildTransaction)(account, transaction);
// Then
expect(builtTransaction.fee).toEqual("1");
expect(builtTransaction.source).toEqual(sender);
expect(builtTransaction.operations).toHaveLength(1);
const operation = builtTransaction.operations[0];
expect(operation.type).toEqual("payment");
expect(operation.destination).toEqual(transaction.recipient);
expect(operation.amount).toEqual("50.0239411");
expect(operation.asset.code).toEqual("XLM");
expect(operation.asset.issuer).toBeUndefined();
expect(builtTransaction.toXDR().slice(0, 67)).toEqual("AAAAAgAAAAAnxYb4SZKUxk1X+NeVbu9EMd5YqyDhyIAB9s8THJfW8wAAAAEBn2AnAAA");
expect(builtTransaction.toXDR().slice(70)).toEqual("AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAADw9kGYtpM1vsCgDoHjZOVO/sjTKLsmA51f8vdM9oaecgAAAAAAAAAAHdEMMwAAAAAAAAAA");
});
it("returns a built transaction in Stellar format when asset used is USDC", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(10),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
recipient: "GDRQAROTM7WYEHZ42SXUVUOHO36MLQKLFIZ5Y2JBWVQRPCJ3SQBBA3LH",
assetCode: "USDC",
assetIssuer: "GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN",
});
// When
const builtTransaction = await (0, buildTransaction_1.buildTransaction)(account, transaction);
// Then
expect(builtTransaction.fee).toEqual("1");
expect(builtTransaction.source).toEqual(sender);
expect(builtTransaction.operations).toHaveLength(1);
const operation = builtTransaction.operations[0];
expect(operation.type).toEqual("payment");
expect(operation.asset.code).toEqual("USDC");
expect(operation.asset.issuer).toEqual("GA5ZSEJYB37JRC5AVCIA5MOP4RHTM335X2KGX3IHOJAPP5RE34K4KZVN");
expect(builtTransaction.toXDR().slice(0, 67)).toEqual("AAAAAgAAAAAnxYb4SZKUxk1X+NeVbu9EMd5YqyDhyIAB9s8THJfW8wAAAAEBn2AnAAA");
});
it("returns a built transaction in Stellar format", async () => {
// Given
const account = (0, bridge_fixture_1.createFixtureAccount)({ freshAddress: sender });
const transaction = (0, bridge_fixture_1.createFixtureTransaction)({
amount: (0, bignumber_js_1.default)(10),
fees: (0, bignumber_js_1.default)(1),
networkInfo: { family: "stellar" },
memoType: "MEMO_TEXT",
memoValue: "Hello",
});
// When
const builtTransaction = await (0, buildTransaction_1.buildTransaction)(account, transaction);
// Then
expect(builtTransaction.fee).toEqual("1");
expect(builtTransaction.source).toEqual(sender);
expect(builtTransaction.operations).toHaveLength(1);
expect(builtTransaction.memo.type).toEqual("text");
expect(builtTransaction.memo.value).toEqual("Hello");
const operation = builtTransaction.operations[0];
expect(operation.type).toEqual("payment");
expect(operation.asset.code).toEqual("XLM");
expect(operation.asset.issuer).toBeUndefined();
expect(builtTransaction.toXDR().slice(0, 67)).toEqual("AAAAAgAAAAAnxYb4SZKUxk1X+NeVbu9EMd5YqyDhyIAB9s8THJfW8wAAAAEBn2AnAAA");
expect(builtTransaction.toXDR().slice(70)).toEqual("AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAVIZWxsbwAAAAAAAAEAAAAAAAAAAQAAAADw9kGYtpM1vsCgDoHjZOVO/sjTKLsmA51f8vdM9oaecgAAAAAAAAAAAAAACgAAAAAAAAAA");
});
});
//# sourceMappingURL=buildTransaction.integ.test.js.map