@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
100 lines (78 loc) • 3.21 kB
text/typescript
/**
* @jest-environment jsdom
*/
import { renderHook, act } from "@testing-library/react";
import { hubStateSelector } from "../reducer";
import { useCheckAccountWithFundsAction } from "./useCheckAccountWithFundsAction";
import { PostOnboardingActionId } from "@ledgerhq/types-live";
import { DeviceModelId } from "@ledgerhq/types-devices";
import { createFixtureCryptoCurrency } from "../../mock/fixtures/cryptoCurrencies";
import { genAccount } from "@ledgerhq/ledger-wallet-framework/mocks/account";
import { BigNumber } from "bignumber.js";
jest.mock("../reducer");
jest.mock("react-redux", () => ({
useSelector: val => val(),
}));
const mockedHubStateSelector = jest.mocked(hubStateSelector);
const defaultHubState = {
deviceModelId: DeviceModelId.nanoX,
actionsToComplete: [],
actionsCompleted: {},
lastActionCompleted: null,
postOnboardingInProgress: false,
};
const stateFundsTransferCompleted = {
deviceModelId: DeviceModelId.nanoX,
actionsToComplete: [PostOnboardingActionId.assetsTransfer],
actionsCompleted: {
[PostOnboardingActionId.assetsTransfer]: true,
},
lastActionCompleted: PostOnboardingActionId.personalizeMock,
postOnboardingInProgress: true,
};
const mockCompleteAction = jest.fn();
const ethereumCurrency = createFixtureCryptoCurrency("ethereum");
const ethereumAccountZero = genAccount("ethereum-account-zero", {
currency: ethereumCurrency,
});
ethereumAccountZero.balance = new BigNumber("0");
const nonFundedAccount = [ethereumAccountZero];
const ethereumAccountWithBalance = genAccount("ethereum-account-balance", {
currency: ethereumCurrency,
});
ethereumAccountWithBalance.balance = new BigNumber("10000");
const fundedAccount = [ethereumAccountWithBalance];
describe("useCheckAccountWithFundsAction", () => {
beforeEach(() => {
mockCompleteAction.mockClear();
mockedHubStateSelector.mockClear();
});
it("should not run completeAction when asset transfer not complete and account with no funds", () => {
const state = defaultHubState;
mockedHubStateSelector.mockReturnValue(state);
const { result } = renderHook(() => useCheckAccountWithFundsAction(mockCompleteAction));
act(() => {
result.current(nonFundedAccount);
});
expect(mockCompleteAction).not.toHaveBeenCalled();
});
it("should run completeAction when asset transfer not complete and account with funds", () => {
const state = defaultHubState;
mockedHubStateSelector.mockReturnValue(state);
const { result } = renderHook(() => useCheckAccountWithFundsAction(mockCompleteAction));
act(() => {
result.current(fundedAccount);
});
expect(mockCompleteAction).toHaveBeenCalled();
expect(mockCompleteAction).toHaveBeenNthCalledWith(1, PostOnboardingActionId.assetsTransfer);
});
it("should not run completeAction when asset transfer complete and account with funds", () => {
const state = stateFundsTransferCompleted;
mockedHubStateSelector.mockReturnValue(state);
const { result } = renderHook(() => useCheckAccountWithFundsAction(mockCompleteAction));
act(() => {
result.current(fundedAccount);
});
expect(mockCompleteAction).not.toHaveBeenCalled();
});
});