cosmjs-util/packages/launchpad/src/lcdapi/utils.spec.ts
2020-07-28 14:54:38 +02:00

95 lines
3.4 KiB
TypeScript

import { PubKey } from "../types";
import { normalizePubkey, uint64ToNumber, uint64ToString } from "./utils";
describe("utils", () => {
describe("uint64ToNumber", () => {
it("works for numeric inputs", () => {
expect(uint64ToNumber(0)).toEqual(0);
expect(uint64ToNumber(1)).toEqual(1);
expect(uint64ToNumber(Number.MAX_SAFE_INTEGER)).toEqual(Number.MAX_SAFE_INTEGER);
});
it("works for string inputs", () => {
expect(uint64ToNumber("0")).toEqual(0);
expect(uint64ToNumber("1")).toEqual(1);
expect(uint64ToNumber("9007199254740991")).toEqual(Number.MAX_SAFE_INTEGER);
});
it("throws for invalid numbers", () => {
expect(() => uint64ToNumber(NaN)).toThrow();
expect(() => uint64ToNumber(1.1)).toThrow();
expect(() => uint64ToNumber(-1)).toThrow();
expect(() => uint64ToNumber(Number.MAX_SAFE_INTEGER + 1)).toThrow();
});
it("throws for invalid strings", () => {
expect(() => uint64ToNumber("")).toThrow();
expect(() => uint64ToNumber("0x22")).toThrow();
expect(() => uint64ToNumber("-1")).toThrow();
expect(() => uint64ToNumber("1.1")).toThrow();
expect(() => uint64ToNumber("9007199254740992")).toThrow();
});
});
describe("uint64ToString", () => {
it("works for numeric inputs", () => {
expect(uint64ToString(0)).toEqual("0");
expect(uint64ToString(1)).toEqual("1");
expect(uint64ToString(Number.MAX_SAFE_INTEGER)).toEqual("9007199254740991");
});
it("works for string inputs", () => {
expect(uint64ToString("0")).toEqual("0");
expect(uint64ToString("1")).toEqual("1");
expect(uint64ToString("9007199254740991")).toEqual("9007199254740991");
});
it("works for large string values", () => {
// for the string -> string version, the full uint64 range is supported
expect(uint64ToString("9007199254740992")).toEqual("9007199254740992");
expect(uint64ToString("18446744073709551615")).toEqual("18446744073709551615");
});
it("throws for invalid numbers", () => {
expect(() => uint64ToString(NaN)).toThrow();
expect(() => uint64ToString(1.1)).toThrow();
expect(() => uint64ToString(-1)).toThrow();
expect(() => uint64ToString(Number.MAX_SAFE_INTEGER + 1)).toThrow();
});
it("throws for invalid strings", () => {
expect(() => uint64ToString("")).toThrow();
expect(() => uint64ToString("0x22")).toThrow();
expect(() => uint64ToString("-1")).toThrow();
expect(() => uint64ToString("1.1")).toThrow();
expect(() => uint64ToString("18446744073709551616")).toThrow();
});
});
describe("normalizePubkey", () => {
it("interprets empty bech32 string as unset", () => {
expect(normalizePubkey("")).toBeNull();
});
it("decodes bech32 pubkey", () => {
const input = "cosmospub1addwnpepqd8sgxq7aw348ydctp3n5ajufgxp395hksxjzc6565yfp56scupfqhlgyg5";
expect(normalizePubkey(input)).toEqual({
type: "tendermint/PubKeySecp256k1",
value: "A08EGB7ro1ORuFhjOnZcSgwYlpe0DSFjVNUIkNNQxwKQ",
});
});
it("interprets null as unset", () => {
expect(normalizePubkey(null)).toBeNull();
});
it("passes PubKey unchanged", () => {
const original: PubKey = {
type: "tendermint/PubKeySecp256k1",
value: "A08EGB7ro1ORuFhjOnZcSgwYlpe0DSFjVNUIkNNQxwKQ",
};
expect(original).toEqual(original);
});
});
});