UNPKG

@ledgerhq/coin-celo

Version:
214 lines 11.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fixtures_1 = require("../../bridge/fixtures"); const getTransactionStatus_1 = __importDefault(require("../../bridge/getTransactionStatus")); const bignumber_js_1 = __importDefault(require("bignumber.js")); jest.mock("../../network/sdk", () => { return { celoKit: jest.fn(() => ({ contracts: { getLockedGold: jest.fn(async () => ({ address: "address", lock: jest.fn(() => ({ txo: { encodeABI: jest.fn(() => ({ data: "lock_data" })), estimateGas: jest.fn(async () => 2), }, })), unlock: jest.fn(() => ({ txo: { encodeABI: jest.fn(() => ({ data: "unlock_data" })), estimateGas: jest.fn(async () => 3), }, })), withdraw: jest.fn(() => ({ txo: { encodeABI: jest.fn(() => ({ data: "withdraw_data" })), estimateGas: jest.fn(async () => 3), }, })), vote: jest.fn(() => ({ txo: { encodeABI: jest.fn(() => ({ data: "vote_data" })), estimateGas: jest.fn(async () => 3), }, })), getAccountNonvotingLockedGold: jest.fn(() => (0, bignumber_js_1.default)(100)), })), }, })), }; }); describe("getTransactionStatus", () => { it("should return an InvalidAddressBecauseDestinationIsAlsoSource error in case the recipient is also the sender", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(123), spendableBalance: (0, bignumber_js_1.default)(123) }, { ...fixtures_1.transactionFixture, recipient: fixtures_1.accountFixture.freshAddress, fees: (0, bignumber_js_1.default)(2), }); expect(transactionStatus.errors["recipient"].name).toEqual("InvalidAddressBecauseDestinationIsAlsoSource"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an FeeNotLoaded error in case the transaction is missing fees", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(123), spendableBalance: (0, bignumber_js_1.default)(123) }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", }); expect(transactionStatus.errors["fees"].name).toEqual("FeeNotLoaded"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an NotEnoughBalance error in case the transaction is more than the account balance", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(123), spendableBalance: (0, bignumber_js_1.default)(123) }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", fees: (0, bignumber_js_1.default)(2), amount: (0, bignumber_js_1.default)(88888), }); expect(transactionStatus.errors["amount"].name).toEqual("NotEnoughBalance"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an RecipientRequired error in case the transaction does not have a recipient address", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(123), spendableBalance: (0, bignumber_js_1.default)(123) }, { ...fixtures_1.transactionFixture, recipient: "", fees: (0, bignumber_js_1.default)(2), }); expect(transactionStatus.errors["recipient"].name).toEqual("RecipientRequired"); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an InvalidAddress error in case the transaction does not have a valid recipient address", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(123), spendableBalance: (0, bignumber_js_1.default)(123) }, { ...fixtures_1.transactionFixture, fees: (0, bignumber_js_1.default)(2), }); expect(transactionStatus.errors["recipient"].name).toEqual("InvalidAddress"); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return a CeloAllFundsWarning warning in case of a send or lock transaction is using all the balance above the safety buffer", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(10000000000000000), spendableBalance: (0, bignumber_js_1.default)(10000000000000000), celoResources: { ...fixtures_1.accountFixture.celoResources, lockedBalance: (0, bignumber_js_1.default)(44444), }, }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", amount: (0, bignumber_js_1.default)(9000000000000000), fees: (0, bignumber_js_1.default)(2), }); expect(transactionStatus.warnings["amount"].name).toEqual("CeloAllFundsWarning"); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); }); it("should not return any error or warning", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(10000000000000000), spendableBalance: (0, bignumber_js_1.default)(10000000000000000), celoResources: { ...fixtures_1.accountFixture.celoResources, lockedBalance: (0, bignumber_js_1.default)(44444), }, }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", fees: (0, bignumber_js_1.default)(2), useAllAmount: true, mode: "vote", }); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an AmountRequired error", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(10000000000000000), spendableBalance: (0, bignumber_js_1.default)(10000000000000000), celoResources: { ...fixtures_1.accountFixture.celoResources, lockedBalance: (0, bignumber_js_1.default)(44444), }, }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", fees: (0, bignumber_js_1.default)(2), amount: (0, bignumber_js_1.default)(0), }); expect(transactionStatus.errors["amount"].name).toEqual("AmountRequired"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an NotEnoughBalance error for a vote transaction where the amount is higher than the total non-voting locked balance", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(10000000000000000), spendableBalance: (0, bignumber_js_1.default)(10000000000000000), celoResources: { ...fixtures_1.accountFixture.celoResources, lockedBalance: (0, bignumber_js_1.default)(44444), }, }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", fees: (0, bignumber_js_1.default)(2), amount: (0, bignumber_js_1.default)(200), mode: "vote", }); expect(transactionStatus.errors["amount"].name).toEqual("NotEnoughBalance"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); it("should return an NotEnoughBalance error for a revoke transaction where the amount is higher than the total non-voting locked balance", async () => { const transactionStatus = await (0, getTransactionStatus_1.default)({ ...fixtures_1.accountFixture, balance: (0, bignumber_js_1.default)(10000000000000000), spendableBalance: (0, bignumber_js_1.default)(10000000000000000), celoResources: { ...fixtures_1.accountFixture.celoResources, lockedBalance: (0, bignumber_js_1.default)(44444), votes: [ { activatable: true, amount: (0, bignumber_js_1.default)(109), index: 0, revokable: true, type: "active", validatorGroup: fixtures_1.transactionFixture.recipient, }, ], }, }, { ...fixtures_1.transactionFixture, recipient: "0x79D5A290D7ba4b99322d91b577589e8d0BF87072", useAllAmount: true, fees: (0, bignumber_js_1.default)(2), mode: "revoke", }); expect(transactionStatus.errors).not.toHaveProperty("amount"); expect(transactionStatus.errors).not.toHaveProperty("fees"); expect(transactionStatus.errors).not.toHaveProperty("recipient"); expect(Object.keys(transactionStatus.warnings).length).toEqual(0); }); }); //# sourceMappingURL=getTransactionStatus.test.js.map