@ledgerhq/coin-algorand
Version:
Ledger Algorand Coin integration
83 lines (65 loc) • 2.16 kB
text/typescript
import * as network from "../network";
import { estimateFees } from "./estimateFees";
jest.mock("../network");
const mockGetTransactionParams = network.getTransactionParams as jest.MockedFunction<
typeof network.getTransactionParams
>;
describe("estimateFees", () => {
beforeEach(() => {
jest.clearAllMocks();
});
it("should return minimum fee when suggested fee is 0", async () => {
mockGetTransactionParams.mockResolvedValue({
fee: 0,
minFee: 1000,
firstRound: 1000,
lastRound: 2000,
genesisHash: "hash",
genesisID: "mainnet-v1.0",
});
const result = await estimateFees();
expect(result.value).toBe(1000n);
});
it("should calculate fee based on transaction size when fee > 0", async () => {
mockGetTransactionParams.mockResolvedValue({
fee: 1, // 1 microAlgo per byte
minFee: 1000,
firstRound: 1000,
lastRound: 2000,
genesisHash: "hash",
genesisID: "mainnet-v1.0",
});
// Default size is 250 + 71 = 321 bytes
const result = await estimateFees();
expect(result.value).toBe(1000n); // max(321, 1000) = 1000
});
it("should use custom transaction size when provided", async () => {
mockGetTransactionParams.mockResolvedValue({
fee: 10, // 10 microAlgos per byte
minFee: 1000,
firstRound: 1000,
lastRound: 2000,
genesisHash: "hash",
genesisID: "mainnet-v1.0",
});
// Custom size 500 + 71 = 571 bytes * 10 = 5710
const result = await estimateFees(500);
expect(result.value).toBe(5710n);
});
it("should return minimum fee when calculated fee is lower", async () => {
mockGetTransactionParams.mockResolvedValue({
fee: 1,
minFee: 5000,
firstRound: 1000,
lastRound: 2000,
genesisHash: "hash",
genesisID: "mainnet-v1.0",
});
const result = await estimateFees();
expect(result.value).toBe(5000n);
});
it("should propagate network errors", async () => {
mockGetTransactionParams.mockRejectedValue(new Error("Network error"));
await expect(estimateFees()).rejects.toThrow("Network error");
});
});