Skip to content

Commit

Permalink
main 🧊 rework use timeout
Browse files Browse the repository at this point in the history
  • Loading branch information
debabin committed Jun 6, 2024
1 parent 91657b4 commit 418ae76
Show file tree
Hide file tree
Showing 7 changed files with 53 additions and 67 deletions.
12 changes: 6 additions & 6 deletions src/hooks/useBoolean/useBoolean.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,30 +6,30 @@ it('Should use counter', () => {
const { result } = renderHook(useBoolean);
const [on, toggle] = result.current;

expect(on).toBe(false);
expect(on).toBeFalsy();
expect(typeof toggle).toBe('function');
});

it('Should set initial value', () => {
const { result } = renderHook(() => useBoolean(true));
const [on] = result.current;

expect(on).toBe(true);
expect(on).toBeTruthy();
});

it('Should toggle boolean', () => {
const { result } = renderHook(useBoolean);
const toggle = result.current[1];

act(() => toggle());
expect(result.current[0]).toBe(true);
expect(result.current[0]).toBeTruthy();

act(() => toggle());
expect(result.current[0]).toBe(false);
expect(result.current[0]).toBeFalsy();

act(() => toggle(false));
expect(result.current[0]).toBe(false);
expect(result.current[0]).toBeFalsy();

act(() => toggle(true));
expect(result.current[0]).toBe(true);
expect(result.current[0]).toBeTruthy();
});
24 changes: 12 additions & 12 deletions src/hooks/useIdle/useIdle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,58 +9,58 @@ beforeEach(() => {
it('Should use idle', () => {
const { result } = renderHook(useIdle);

expect(result.current.idle).toBe(false);
expect(result.current.idle).toBeFalsy();
expect(result.current.lastActive).toBeLessThanOrEqual(Date.now());
});

it('Should be true after 60e3', () => {
const { result } = renderHook(useIdle);
expect(result.current.idle).toBe(false);
expect(result.current.idle).toBeFalsy();

act(() => vi.advanceTimersByTime(60e3));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();
});

it('Should set initial state', () => {
const { result } = renderHook(() => useIdle(60e3, { initialValue: true }));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();
});

it('Should be false after interaction', () => {
const { result } = renderHook(() => useIdle(60e3));

act(() => vi.advanceTimersByTime(60e3));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();

act(() => window.dispatchEvent(new Event('mousemove')));

expect(result.current.idle).toBe(false);
expect(result.current.idle).toBeFalsy();
expect(result.current.lastActive).toBeLessThanOrEqual(Date.now());
});

it('Should be false after visibilitychange event', () => {
const { result } = renderHook(() => useIdle(60e3));

act(() => vi.advanceTimersByTime(60e3));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();

act(() => document.dispatchEvent(new Event('visibilitychange')));
expect(result.current.idle).toBe(false);
expect(result.current.idle).toBeFalsy();
expect(result.current.lastActive).toBeLessThanOrEqual(Date.now());
});

it('Should work with custom events', () => {
const { result } = renderHook(() => useIdle(60e3, { events: ['mousedown'] }));

act(() => vi.advanceTimersByTime(60e3));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();

act(() => window.dispatchEvent(new Event('mousedown')));
expect(result.current.idle).toBe(false);
expect(result.current.idle).toBeFalsy();

act(() => vi.advanceTimersByTime(60e3));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();

act(() => document.dispatchEvent(new Event('mousemove')));
expect(result.current.idle).toBe(true);
expect(result.current.idle).toBeTruthy();
});
8 changes: 4 additions & 4 deletions src/hooks/useIsFirstRender/useIsFirstRender.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,17 @@ import { useIsFirstRender } from './useIsFirstRender';
it('Should use is first render', () => {
const { result } = renderHook(useIsFirstRender);

expect(result.current).toBe(true);
expect(result.current).toBeTruthy();
});

it('Should return false after render', () => {
const { result, rerender } = renderHook(useIsFirstRender);

expect(result.current).toBe(true);
expect(result.current).toBeTruthy();

rerender();
expect(result.current).toBe(false);
expect(result.current).toBeFalsy();

rerender();
expect(result.current).toBe(false);
expect(result.current).toBeFalsy();
});
4 changes: 2 additions & 2 deletions src/hooks/useSet/useSet.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ it('Should add a new value and rerender', () => {

act(() => set.add(4));

expect(set.has(4)).toBe(true);
expect(set.has(4)).toBeTruthy();
expect(set.size).toBe(4);
});

Expand All @@ -28,7 +28,7 @@ it('Should delete a value and rerender', () => {

act(() => set.delete(3));

expect(set.has(3)).toBe(false);
expect(set.has(3)).toBeFalsy();
expect(set.size).toBe(2);
});

Expand Down
36 changes: 18 additions & 18 deletions src/hooks/useStep/useStep.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ it('Should use step', () => {

expect(result.current.currentStep).toBe(1);
expect(result.current.counts).toBe(3);
expect(result.current.isFirst).toBe(true);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeTruthy();
expect(result.current.isLast).toBeFalsy();
expect(typeof result.current.next).toBe('function');
expect(typeof result.current.back).toBe('function');
expect(typeof result.current.reset).toBe('function');
Expand Down Expand Up @@ -60,20 +60,20 @@ it('Should reset to the initial step', () => {
it('Should have valid booleans', () => {
const { result } = renderHook(() => useStep(STEPS.length));

expect(result.current.isFirst).toBe(true);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeTruthy();
expect(result.current.isLast).toBeFalsy();

act(() => result.current.next());
expect(result.current.isFirst).toBe(false);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeFalsy();
expect(result.current.isLast).toBeFalsy();

act(() => result.current.next());
expect(result.current.isFirst).toBe(false);
expect(result.current.isLast).toBe(true);
expect(result.current.isFirst).toBeFalsy();
expect(result.current.isLast).toBeTruthy();

act(() => result.current.reset());
expect(result.current.isFirst).toBe(true);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeTruthy();
expect(result.current.isLast).toBeFalsy();
});

it('Should set custom step', () => {
Expand Down Expand Up @@ -141,20 +141,20 @@ describe('Value is object', () => {
it('Should have valid booleans', () => {
const { result } = renderHook(() => useStep({ initial: 1, max: STEPS.length }));

expect(result.current.isFirst).toBe(true);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeTruthy();
expect(result.current.isLast).toBeFalsy();

act(() => result.current.next());
expect(result.current.isFirst).toBe(false);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeFalsy();
expect(result.current.isLast).toBeFalsy();

act(() => result.current.next());
expect(result.current.isFirst).toBe(false);
expect(result.current.isLast).toBe(true);
expect(result.current.isFirst).toBeFalsy();
expect(result.current.isLast).toBeTruthy();

act(() => result.current.reset());
expect(result.current.isFirst).toBe(true);
expect(result.current.isLast).toBe(false);
expect(result.current.isFirst).toBeTruthy();
expect(result.current.isLast).toBeFalsy();
});

it('Should set custom step', () => {
Expand Down
34 changes: 10 additions & 24 deletions src/hooks/useTimeout/useTimeout.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,50 +6,36 @@ beforeEach(() => {
vi.useFakeTimers();
});

it('Should not call callback at the start', () => {
const callback = vi.fn();
const { result } = renderHook(() => useTimeout(callback, 5000));
it('Should use timeout', () => {
const { result } = renderHook(() => useTimeout(vi.fn(), 5000));

expect(result.current.ready).toBeFalsy();
expect(callback).not.toBeCalled();
expect(typeof result.current.clear).toBe('function');
});

it('Shoul not call callback unless the timer has expired', () => {
it('Should call callback after the timer expires', () => {
const callback = vi.fn();
const { result } = renderHook(() => useTimeout(callback, 5000));

act(() => vi.advanceTimersByTime(4999));

act(() => vi.advanceTimersByTime(2500));
expect(result.current.ready).toBeFalsy();
expect(callback).not.toBeCalled();
});
expect(callback).toBeCalledTimes(0);

it('Should call callback after the timer expires', () => {
const callback = vi.fn();
const { result } = renderHook(() => useTimeout(callback, 5000));

act(() => vi.runAllTimers());
act(() => vi.advanceTimersByTime(5000));

expect(result.current.ready).toBeTruthy();
expect(callback).toBeCalledTimes(1);
});

it('Should not call callback after calling the cleaning function', () => {
it('Should clear the timeout', () => {
const callback = vi.fn();
const { result } = renderHook(() => useTimeout(callback, 5000));

act(() => {
result.current.clear();
vi.runAllTimers();
vi.clearAllTimers();
});

expect(callback).not.toBeCalled();
});

it('Should be ready after calling the cleaning function', () => {
const { result } = renderHook(() => useTimeout(() => {}, 5000));

act(() => result.current.clear());

expect(result.current.ready).toBeTruthy();
expect(callback).not.toBeCalled();
});
2 changes: 1 addition & 1 deletion src/hooks/useToggle/useToggle.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ it('Should use toggle', () => {
const { result } = renderHook(() => useToggle());
const [on, toggle] = result.current;

expect(on).toBe(false);
expect(on).toBeFalsy();
expect(typeof toggle).toBe('function');
});

Expand Down

0 comments on commit 418ae76

Please sign in to comment.