Skip to content

Commit

Permalink
Add tests for parse functions
Browse files Browse the repository at this point in the history
  • Loading branch information
OKendigelyan committed Nov 13, 2024
1 parent d87d49d commit 3a42732
Show file tree
Hide file tree
Showing 3 changed files with 118 additions and 4 deletions.
106 changes: 106 additions & 0 deletions packages/tezos/src/Address.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
import {
isAddressValid,
isValidContractPkh,
isValidImplicitPkh,
isValidSmartRollupPkh,
parseContractPkh,
parseImplicitPkh,
parsePkh,
parseSmartRollupPkh,
} from "./Address";
import { mockContractAddress, mockImplicitAddress, mockSmartRollupAddress } from "./testUtils";

describe("Address", () => {
const addresses = {
contract: mockContractAddress(0),
implicit: mockImplicitAddress(0),
smart_rollup: mockSmartRollupAddress(0),
};

describe("parsePkh", () => {
it.each(Object.entries(addresses))("parses %s address", (_, address) => {
expect(parsePkh(address.pkh)).toEqual(address);
});

it("throws error for invalid address", () => {
expect(() => parsePkh("invalid")).toThrow("Cannot parse address type: invalid");
});
});

describe("isAddressValid", () => {
it.each(Object.entries(addresses))("returns true for valid %s address", (_, address) => {
expect(isAddressValid(address.pkh)).toBe(true);
});

it("returns false for invalid address", () => {
expect(isAddressValid("invalid")).toBe(false);
});
});

describe("isValidContractPkh", () => {
it.each([
[true, addresses.contract.pkh],
[false, addresses.implicit.pkh],
[false, addresses.smart_rollup.pkh],
[false, "invalid"],
])("returns %s for %s address", (expected, pkh) => {
expect(isValidContractPkh(pkh)).toBe(expected);
});
});

describe("isValidImplicitPkh", () => {
it.each([
[false, addresses.contract.pkh],
[true, addresses.implicit.pkh],
[false, addresses.smart_rollup.pkh],
[false, "invalid"],
])("returns %s for %s address", (expected, pkh) => {
expect(isValidImplicitPkh(pkh)).toBe(expected);
});
});

describe("isValidSmartRollupPkh", () => {
it.each([
[false, addresses.contract.pkh],
[false, addresses.implicit.pkh],
[true, addresses.smart_rollup.pkh],
[false, "invalid"],
])("returns %s for %s address", (expected, pkh) => {
expect(isValidSmartRollupPkh(pkh)).toBe(expected);
});
});

describe("parse functions", () => {
const parseFunctions = {
parseContractPkh: {
fn: parseContractPkh,
validAddress: addresses.contract,
errorMessage: "Invalid contract address",
},
parseImplicitPkh: {
fn: parseImplicitPkh,
validAddress: addresses.implicit,
errorMessage: "Invalid implicit address",
},
parseSmartRollupPkh: {
fn: parseSmartRollupPkh,
validAddress: addresses.smart_rollup,
errorMessage: "Invalid smart rollup address",
},
};

it.each(Object.entries(parseFunctions))(
"%s parses valid address",
(_, { fn, validAddress }) => {
expect(fn(validAddress.pkh)).toEqual(validAddress);
}
);

it.each(Object.entries(parseFunctions))(
"%s throws error for invalid address",
(_, { fn, errorMessage }) => {
expect(() => fn("invalid")).toThrow(`${errorMessage}: invalid`);
}
);
});
});
7 changes: 4 additions & 3 deletions packages/tezos/src/Address.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ export const parsePkh = (pkh: string): Address => {

export const isAddressValid = (pkh: string) => validateAddress(pkh) === ValidationResult.VALID;

export const isValidContractPkh = (pkh: string) => isAddressValid(pkh) && pkh.match(/^KT1\w+/);
export const isValidContractPkh = (pkh: string) => isAddressValid(pkh) && !!pkh.match(/^KT1\w+/);

export const isValidImplicitPkh = (pkh: string) => isAddressValid(pkh) && pkh.match(/^tz[1234]\w+/);
export const isValidImplicitPkh = (pkh: string) =>
isAddressValid(pkh) && !!pkh.match(/^tz[1234]\w+/);

export const isValidSmartRollupPkh = (pkh: string) => isAddressValid(pkh) && pkh.match(/^sr1\w+/);
export const isValidSmartRollupPkh = (pkh: string) => isAddressValid(pkh) && !!pkh.match(/^sr1\w+/);

export const parseContractPkh = (pkh: string): ContractAddress => {
if (isValidContractPkh(pkh)) {
Expand Down
9 changes: 8 additions & 1 deletion packages/tezos/src/testUtils.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,11 @@
import { type ContractAddress, type ImplicitAddress } from "./types";
import { type ContractAddress, type ImplicitAddress, type SmartRollupAddress } from "./types";

const validSmartRollupAddresses = ["sr1Ghq66tYK9y3r8CC1Tf8i8m5nxh8nTvZEf"];

export const mockSmartRollupAddress = (index: number): SmartRollupAddress => ({
type: "smart_rollup",
pkh: validSmartRollupAddresses[index],
});

const validContractAddresses = [
"KT1QuofAgnsWffHzLA7D78rxytJruGHDe7XG",
Expand Down

1 comment on commit 3a42732

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Title Lines Statements Branches Functions
apps/desktop Coverage: 84%
83.88% (1764/2103) 79.35% (838/1056) 78.45% (448/571)
apps/web Coverage: 84%
83.88% (1764/2103) 79.35% (838/1056) 78.45% (448/571)
packages/components Coverage: 97%
97.84% (182/186) 96.51% (83/86) 87.03% (47/54)
packages/core Coverage: 81%
81.91% (222/271) 71.22% (99/139) 81.96% (50/61)
packages/crypto Coverage: 100%
100% (43/43) 90.9% (10/11) 100% (7/7)
packages/data-polling Coverage: 97%
95.27% (141/148) 87.5% (21/24) 92.85% (39/42)
packages/multisig Coverage: 98%
98.47% (129/131) 85.71% (18/21) 100% (36/36)
packages/social-auth Coverage: 100%
100% (21/21) 100% (11/11) 100% (3/3)
packages/state Coverage: 85%
84.73% (805/950) 80.63% (179/222) 78.89% (299/379)
packages/tezos Coverage: 89%
88.72% (118/133) 94.59% (35/37) 86.84% (33/38)
packages/tzkt Coverage: 89%
87.32% (62/71) 87.5% (14/16) 80.48% (33/41)

Please sign in to comment.