From 9a39bc61d597dc8b6d268aa0cf8ce354ad4c3db3 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Mon, 18 Dec 2023 09:06:49 +0300 Subject: [PATCH] fix: solana tests and linting issues --- .../src/families/solana/SendRowsFee.tsx | 2 +- .../src/families/solana/bridge.integration.test.ts | 4 ++-- .../ledger-live-common/src/families/solana/specs.ts | 13 +++++++++---- .../src/families/solana/speculos-deviceActions.ts | 2 +- .../ledger-live-common/src/families/solana/utils.ts | 2 ++ 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/apps/ledger-live-mobile/src/families/solana/SendRowsFee.tsx b/apps/ledger-live-mobile/src/families/solana/SendRowsFee.tsx index 8f6ac2ad0eef..e14e3d7d1cfb 100644 --- a/apps/ledger-live-mobile/src/families/solana/SendRowsFee.tsx +++ b/apps/ledger-live-mobile/src/families/solana/SendRowsFee.tsx @@ -39,7 +39,7 @@ export default function SolanaFeeRow({ account, parentAccount, status }: Props) const fees = (status as SolanaTransactionStatus).estimatedFees; - const unit = getAccountUnit(account.type === "TokenAccount" ? parentAccount : account); + const unit = getAccountUnit(account.type === "TokenAccount" ? parentAccount || account : account); const currency = getAccountCurrency(account); return ( diff --git a/libs/ledger-live-common/src/families/solana/bridge.integration.test.ts b/libs/ledger-live-common/src/families/solana/bridge.integration.test.ts index 63ead7bdbd93..de126b1c64a0 100644 --- a/libs/ledger-live-common/src/families/solana/bridge.integration.test.ts +++ b/libs/ledger-live-common/src/families/solana/bridge.integration.test.ts @@ -39,7 +39,7 @@ import { import { encodeAccountIdWithTokenAccountAddress, MAX_MEMO_LENGTH } from "./logic"; import createTransaction from "./js-createTransaction"; import { compact } from "lodash/fp"; -import { assertUnreachable } from "./utils"; +import { SYSTEM_ACCOUNT_RENT_EXEMPT, assertUnreachable } from "./utils"; import { getEnv } from "@ledgerhq/live-env"; import { ChainAPI } from "./api"; import { @@ -69,7 +69,7 @@ const testOnChainData = { validatorAddress: "9QU2QSxhb24FUX3Tu2FpczXjpK3VYrvRudywSZaM29mF", fees: { stakeAccountRentExempt: 2282880, - systemAccountRentExempt: 890880, + systemAccountRentExempt: SYSTEM_ACCOUNT_RENT_EXEMPT, lamportsPerSignature: 5000, }, // --- maybe outdated or not real, fine for tests --- diff --git a/libs/ledger-live-common/src/families/solana/specs.ts b/libs/ledger-live-common/src/families/solana/specs.ts index cd4b30aab7af..02b4f4fd53a1 100644 --- a/libs/ledger-live-common/src/families/solana/specs.ts +++ b/libs/ledger-live-common/src/families/solana/specs.ts @@ -19,7 +19,7 @@ import { acceptTransferTokensWithATACreationTransaction, acceptTransferTransaction, } from "./speculos-deviceActions"; -import { assertUnreachable } from "./utils"; +import { SYSTEM_ACCOUNT_RENT_EXEMPT, assertUnreachable } from "./utils"; import { getCurrentSolanaPreloadData } from "./js-preload-data"; import { sample } from "lodash/fp"; import BigNumber from "bignumber.js"; @@ -78,9 +78,14 @@ const solana: AppSpec = { }; }, test: input => { - const { account } = input; - botTest("account balance should be zero", () => - expect(account.spendableBalance.toNumber()).toBe(0), + const { accountBeforeTransaction, operation } = input; + const extimatedMaxSpendable = BigNumber.max( + accountBeforeTransaction.spendableBalance.minus(SYSTEM_ACCOUNT_RENT_EXEMPT), + 0, + ).toNumber(); + + botTest("operation value should be estimated max spendable", () => + expect(operation.value.toNumber()).toBe(extimatedMaxSpendable), ); expectCorrectBalanceChange(input); expectCorrectMemo(input); diff --git a/libs/ledger-live-common/src/families/solana/speculos-deviceActions.ts b/libs/ledger-live-common/src/families/solana/speculos-deviceActions.ts index 0afe0a12a624..4aefddb86dc4 100644 --- a/libs/ledger-live-common/src/families/solana/speculos-deviceActions.ts +++ b/libs/ledger-live-common/src/families/solana/speculos-deviceActions.ts @@ -28,7 +28,7 @@ function formatAmount(c: CryptoCurrency | TokenCurrency, amount: number) { // There's a bug on the device where the token currency is being displayed as "???" // Temporarily replace "0.05 USDC" on "0.05 ???" to pass tokens tests function formatTokenAmount(c: TokenCurrency, amount: number) { - return formatAmount(c, amount).replace(/\D+$/, "???"); + return formatAmount(c, amount).replace(/\D+$/, " ???"); } function findTokenAccount(account: Account, id: string) { diff --git a/libs/ledger-live-common/src/families/solana/utils.ts b/libs/ledger-live-common/src/families/solana/utils.ts index 072a0f91c9fd..fee221500e95 100644 --- a/libs/ledger-live-common/src/families/solana/utils.ts +++ b/libs/ledger-live-common/src/families/solana/utils.ts @@ -16,6 +16,8 @@ export const LEDGER_VALIDATOR: ValidatorsAppValidator = { totalScore: 6, }; +export const SYSTEM_ACCOUNT_RENT_EXEMPT = 890880; + export const assertUnreachable = (_: never): never => { throw new Error("unreachable assertion failed"); };