@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
91 lines (74 loc) • 3.06 kB
text/typescript
import { clampDecimals, isOverDecimalLimit, trimTrailingZeros } from "../decimals";
describe("clampDecimals", () => {
it("returns string unchanged when decimals are 2 or less", () => {
expect(clampDecimals("123.45")).toBe("123.45");
expect(clampDecimals("123.4")).toBe("123.4");
expect(clampDecimals("123")).toBe("123");
});
it("clamps decimals to 2 when more than 2", () => {
expect(clampDecimals("123.456")).toBe("123.45");
expect(clampDecimals("123.456789")).toBe("123.45");
});
it("handles comma as decimal separator", () => {
expect(clampDecimals("123,456")).toBe("123,45");
expect(clampDecimals("123,4")).toBe("123,4");
});
it("handles multiple separators by using the last one", () => {
expect(clampDecimals("1.234.567")).toBe("1.234.56");
expect(clampDecimals("1,234,567")).toBe("1,234,56");
});
it("preserves the separator character", () => {
expect(clampDecimals("123.456")).toBe("123.45");
expect(clampDecimals("123,456")).toBe("123,45");
});
});
describe("isOverDecimalLimit", () => {
it("returns false when no decimal separator", () => {
expect(isOverDecimalLimit("123")).toBe(false);
expect(isOverDecimalLimit("")).toBe(false);
});
it("returns false when decimals are 2 or less", () => {
expect(isOverDecimalLimit("123.45")).toBe(false);
expect(isOverDecimalLimit("123.4")).toBe(false);
expect(isOverDecimalLimit("123.1")).toBe(false);
});
it("returns true when decimals exceed 2", () => {
expect(isOverDecimalLimit("123.456")).toBe(true);
expect(isOverDecimalLimit("123.456789")).toBe(true);
});
it("handles comma as decimal separator", () => {
expect(isOverDecimalLimit("123,456")).toBe(true);
expect(isOverDecimalLimit("123,45")).toBe(false);
});
it("uses the last separator when multiple exist", () => {
expect(isOverDecimalLimit("1.234.567")).toBe(true);
expect(isOverDecimalLimit("1,234,567")).toBe(true);
});
});
describe("trimTrailingZeros", () => {
it("returns string unchanged when no decimal separator", () => {
expect(trimTrailingZeros("123")).toBe("123");
expect(trimTrailingZeros("0")).toBe("0");
});
it("removes trailing zeros", () => {
expect(trimTrailingZeros("123.450")).toBe("123.45");
expect(trimTrailingZeros("123.400")).toBe("123.4");
expect(trimTrailingZeros("123.000")).toBe("123");
});
it("preserves non-zero decimals", () => {
expect(trimTrailingZeros("123.456")).toBe("123.456");
expect(trimTrailingZeros("123.4506")).toBe("123.4506");
});
it("handles comma as decimal separator", () => {
expect(trimTrailingZeros("123,450")).toBe("123,45");
expect(trimTrailingZeros("123,000")).toBe("123");
});
it("removes all decimals when only zeros", () => {
expect(trimTrailingZeros("123.00")).toBe("123");
expect(trimTrailingZeros("123,000")).toBe("123");
});
it("handles edge case with single zero", () => {
expect(trimTrailingZeros("123.0")).toBe("123");
expect(trimTrailingZeros("0.0")).toBe("0");
});
});