@ledgerhq/coin-celo
Version:
214 lines • 11.9 kB
JavaScript
;
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