@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
71 lines (59 loc) • 2.44 kB
text/typescript
import { selectCurrency, selectCurrencyForMetaId } from "../currencySelection";
import {
mockAssetsDataWithPagination,
mockBitcoinAssetsData,
mockUsdcAssetsData,
} from "../../__mocks__/assets.mock";
import type { AssetsDataWithPagination } from "../../state-manager/types";
describe("currencySelection", () => {
describe("selectCurrency", () => {
it("should return the correct currency", () => {
const result = selectCurrency(mockAssetsDataWithPagination);
expect(result).toBeDefined();
expect(result).toMatchObject({
type: "CryptoCurrency",
id: "injective",
name: "Injective",
ticker: "INJ",
});
});
});
describe("selectCurrencyForMetaId", () => {
it("should return undefined when meta-currency has no assetsIds", () => {
const data: AssetsDataWithPagination = {
...mockAssetsDataWithPagination,
cryptoAssets: {
unknown: { id: "unknown", ticker: "UNK", name: "Unknown", assetsIds: {} },
},
};
const result = selectCurrencyForMetaId("unknown", data);
expect(result).toBeUndefined();
});
it("should return undefined when meta-currency does not exist in data", () => {
const result = selectCurrencyForMetaId("nonexistent", mockAssetsDataWithPagination);
expect(result).toBeUndefined();
});
it("should return exact match when currency.id equals metaCurrencyId", () => {
const data = { ...mockBitcoinAssetsData, pagination: {} } as AssetsDataWithPagination;
const result = selectCurrencyForMetaId("bitcoin", data);
expect(result).toBeDefined();
expect(result!.id).toBe("bitcoin");
expect(result!.type).toBe("CryptoCurrency");
});
it("should prefer CryptoCurrency type over TokenCurrency", () => {
const result = selectCurrencyForMetaId(
"urn:crypto:meta-currency:injective_protocol",
mockAssetsDataWithPagination,
);
expect(result).toBeDefined();
expect(result!.type).toBe("CryptoCurrency");
expect(result!.id).toBe("injective");
});
it("should fall back to first available currency when no CryptoCurrency exists", () => {
const data = { ...mockUsdcAssetsData, pagination: {} } as AssetsDataWithPagination;
const result = selectCurrencyForMetaId("usdc", data);
expect(result).toBeDefined();
expect(result!.type).toBe("TokenCurrency");
});
});
});