Skip to content

Commit d5d14b7

Browse files
committed
Add a test case for the useMask hook
1 parent 9f57735 commit d5d14b7

File tree

2 files changed

+28
-9
lines changed

2 files changed

+28
-9
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
},
6969
"devDependencies": {
7070
"@testing-library/react": "^14.1.2",
71+
"@testing-library/user-event": "^14.5.1",
7172
"@types/jest": "^29.5.7",
7273
"@types/react": "^18.2.34",
7374
"jest": "^29.7.0",

tests/hooks.test.tsx

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
import assert from "assert";
2+
13
import {useCallback, useEffect, useRef, useState} from "react";
2-
import {act, renderHook} from "@testing-library/react";
4+
import {act, render, renderHook, screen} from "@testing-library/react";
5+
import userEvent from "@testing-library/user-event";
36

4-
import {cleanInput, displayFormat, getRawValue, parsePhoneNumber, usePhone} from "../src";
7+
import {cleanInput, displayFormat, getFormattedNumber, getRawValue, parsePhoneNumber, useMask, usePhone} from "../src";
58

69
const usePhoneTester = ({
710
country = "us",
@@ -15,8 +18,8 @@ const usePhoneTester = ({
1518
const [countryCode, setCountryCode] = useState<string>(country);
1619

1720
const {
18-
clean,
1921
value,
22+
pattern,
2023
metadata,
2124
setValue,
2225
countriesList,
@@ -31,15 +34,14 @@ const usePhoneTester = ({
3134
});
3235

3336
const update = useCallback((value: string) => {
34-
const formattedNumber = displayFormat(clean(value).join(""));
37+
const formattedNumber = getFormattedNumber(value, pattern);
3538
const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList);
3639
setCountryCode(phoneMetadata.isoCode as any);
3740
setValue(formattedNumber);
38-
}, [clean, countriesList, setValue]);
41+
}, [countriesList, pattern, setValue]);
3942

4043
const backspace = useCallback(() => {
41-
const rawValue = getRawValue(value);
42-
const formattedNumber = displayFormat(rawValue.slice(0, -1));
44+
const formattedNumber = displayFormat(getRawValue(value).slice(0, -1));
4345
const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList);
4446
setCountryCode(phoneMetadata.isoCode as any);
4547
setValue(formattedNumber);
@@ -60,15 +62,19 @@ const usePhoneTester = ({
6062
if (!initialValue.startsWith(metadata?.[2] as string)) {
6163
initialValue = metadata?.[2] as string;
6264
}
63-
const formattedNumber = displayFormat(clean(initialValue).join(""));
65+
const formattedNumber = getFormattedNumber(initialValue, pattern);
6466
const phoneMetadata = parsePhoneNumber(formattedNumber, countriesList);
6567
setCountryCode(phoneMetadata.isoCode as any);
6668
setValue(formattedNumber);
67-
}, [clean, countriesList, metadata, setValue, value])
69+
}, [countriesList, pattern, metadata, setValue, value])
6870

6971
return {update, search, select, value, metadata, backspace, countriesList};
7072
}
7173

74+
const UseMaskTester = ({pattern = "", ...props}: any) => {
75+
return <input data-testid="input" {...useMask(pattern)} {...props}/>;
76+
}
77+
7278
describe("Verifying the functionality of hooks", () => {
7379
it("Check the usePhone hook initiation and updates", () => {
7480
const {result} = renderHook(usePhoneTester, {
@@ -132,4 +138,16 @@ describe("Verifying the functionality of hooks", () => {
132138

133139
expect((result.current.metadata as any)[0]).toBe("us");
134140
})
141+
142+
it("Check useMask for basic use case", async () => {
143+
render(<UseMaskTester
144+
pattern="+... (..) ... ....."
145+
onChange={(e: any) => {
146+
const isValid = "+380 (11) 222 34567".startsWith(e.target.value);
147+
assert(isValid || "+380 (1)" === e.target.value);
148+
}}
149+
/>);
150+
151+
await userEvent.type(screen.getByTestId("input"), "3801122234567");
152+
})
135153
})

0 commit comments

Comments
 (0)