import { updateTransaction } from "@ledgerhq/ledger-wallet-framework/bridge/jsHelpers";
import BigNumber from "bignumber.js";
import { getMockedAccount } from "../test/fixtures/account.fixture";
import { getMockedConfig } from "../test/fixtures/config.fixture";
import { getMockedTransaction } from "../test/fixtures/transaction.fixture";
import type { Transaction } from "../types";
import { createBridges } from ".";

describe("js-transaction", () => {
  let bridge: ReturnType<typeof createBridges>;
  const mockedAccount = getMockedAccount();
  const mockedTransaction = getMockedTransaction();
  const mockCoinConfig = () => getMockedConfig();

  beforeAll(() => {
    const signer = jest.fn();
    bridge = createBridges(signer, mockCoinConfig);
  });

  test("createTransaction", () => {
    const data = mockedTransaction;
    const result = bridge.accountBridge.createTransaction(mockedAccount);

    expect(result).toEqual(data);
  });

  test("updateTransaction", () => {
    const patch: Partial<Transaction> = {
      amount: new BigNumber(5),
      recipient: "0.0.3",
      useAllAmount: true,
    };
    const data = { ...mockedTransaction, ...patch };
    const result = updateTransaction(mockedTransaction, patch);

    expect(result).toEqual(data);
  });

  test("prepareTransaction", async () => {
    const data = mockedTransaction;
    const result = await bridge.accountBridge.prepareTransaction(mockedAccount, mockedTransaction);

    expect(result).toEqual(data);
  });
});
