@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
141 lines (133 loc) • 4.59 kB
text/typescript
import { getAccountBannerState } from "./banner";
import * as preloadedData from "@ledgerhq/coin-near/preload";
import * as logic from "@ledgerhq/coin-near/logic";
import { BigNumber } from "bignumber.js";
import type { NearAccount, NearValidatorItem } from "@ledgerhq/coin-near/types";
import type { NearStakingPosition } from "@ledgerhq/coin-near/api/sdk.types";
const ledgerValidator: NearValidatorItem = {
validatorAddress: "ledgerbyfigment.poolv1.near",
tokens: "1048915930081658334880682687527",
commission: 0.05,
};
const expensiveValidator: NearValidatorItem = {
validatorAddress: "vcap.poolv1.near",
tokens: "25189185052249274302209542299",
commission: 0.1,
};
const cheapValidator: NearValidatorItem = {
validatorAddress: "meduza.poolv1.near",
tokens: "25456182690919428871460833604",
commission: 0.02,
};
const account: NearAccount = {
type: "Account",
id: "js:2:near:d812a582d0b30c1a13041fd564e5f0c4325804b1dd2447d63ab6b9a424747363:nearbip44h",
used: true,
seedIdentifier: "ed25519:DewDMzsc2cnMYBrALESrf3vKWLp3zBB4HJnPoyvPL945",
derivationMode: "nearbip44h",
index: 1,
freshAddress: "d812a582d0b30c1a13041fd564e5f0c4325804b1dd2447d63ab6b9a424747363",
freshAddressPath: "44'/397'/0'/0'/1'",
blockHeight: 85373729,
creationDate: new Date("2022-12-08T09:42:54.396Z"),
balance: new BigNumber("3.10368633212077468946995e+23"),
spendableBalance: new BigNumber("1.265872509685649e+23"),
operations: [],
operationsCount: 3,
pendingOperations: [],
currency: {
type: "CryptoCurrency",
id: "near",
coinType: 397,
name: "NEAR",
managerAppName: "NEAR",
ticker: "NEAR",
scheme: "near",
color: "#000",
family: "near",
units: [],
explorerViews: [],
keywords: ["near"],
},
lastSyncDate: new Date("2023-02-16T19:43:17.615Z"),
swapHistory: [],
balanceHistoryCache: {
HOUR: {
balances: [],
latestDate: 1676574000000,
},
DAY: {
balances: [],
latestDate: 1676505600000,
},
WEEK: {
balances: [],
latestDate: 1676160000000,
},
},
nearResources: {
stakedBalance: new BigNumber("1.29802125309300073830514e+23"),
pendingBalance: new BigNumber("0"),
availableBalance: new BigNumber("0"),
storageUsageBalance: new BigNumber("5.182e+22"),
stakingPositions: [],
},
};
const validators = [expensiveValidator, cheapValidator, ledgerValidator];
const validatorsMap = {
storageCost: new BigNumber("10000000000000000000"),
gasPrice: new BigNumber("100000000"),
createAccountCostSend: new BigNumber("99607375000"),
createAccountCostExecution: new BigNumber("99607375000"),
transferCostSend: new BigNumber("115123062500"),
transferCostExecution: new BigNumber("115123062500"),
addKeyCostSend: new BigNumber("101765125000"),
addKeyCostExecution: new BigNumber("101765125000"),
receiptCreationSend: new BigNumber("108059500000"),
receiptCreationExecution: new BigNumber("108059500000"),
validators,
};
describe("near/banner", () => {
afterEach(() => {
jest.restoreAllMocks();
});
it("should not display the banner is account is", async () => {
jest.spyOn(preloadedData, "getCurrentNearPreloadData").mockReturnValue(validatorsMap);
jest.spyOn(logic, "canStake").mockReturnValue(false);
const result = getAccountBannerState(account);
expect(result).toStrictEqual({
display: false,
redelegate: false,
validatorId: "",
ledgerValidator,
});
});
it("should return display delegate mode is account is not empty", async () => {
jest.spyOn(preloadedData, "getCurrentNearPreloadData").mockReturnValue(validatorsMap);
jest.spyOn(logic, "canUnstake").mockReturnValue(true);
const result = getAccountBannerState(account);
expect(result).toStrictEqual({
display: true,
redelegate: false,
validatorId: "",
ledgerValidator,
});
});
it("should return display redelegate mode when deactive is an action", async () => {
const badValidator: NearStakingPosition = {
staked: new BigNumber("1.29802125309300073830514e+23"),
available: new BigNumber("1"),
pending: new BigNumber("0"),
validatorId: "vcap.poolv1.near",
};
jest.spyOn(preloadedData, "getCurrentNearPreloadData").mockReturnValue(validatorsMap);
account.nearResources?.stakingPositions.push(badValidator);
const result = getAccountBannerState(account);
expect(result).toStrictEqual({
display: true,
redelegate: true,
validatorId: "vcap.poolv1.near",
ledgerValidator,
});
});
});