This commit is contained in:
64
tests/hooks/useCooldownTimer.test.tsx
Normal file
64
tests/hooks/useCooldownTimer.test.tsx
Normal file
@@ -0,0 +1,64 @@
|
||||
import { act } from 'react';
|
||||
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
|
||||
import { useCooldownTimer } from '../../src/hooks/useCooldownTimer';
|
||||
import { renderHook } from '../helpers/renderHook';
|
||||
|
||||
describe('useCooldownTimer', () => {
|
||||
beforeEach(() => {
|
||||
vi.useFakeTimers();
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
vi.useRealTimers();
|
||||
});
|
||||
|
||||
it('decrements cooldown every second while enabled', () => {
|
||||
const { result } = renderHook(() => useCooldownTimer(2, true));
|
||||
|
||||
expect(result.current.cooldown).toBe(2);
|
||||
|
||||
act(() => {
|
||||
vi.advanceTimersByTime(1000);
|
||||
});
|
||||
expect(result.current.cooldown).toBe(1);
|
||||
|
||||
act(() => {
|
||||
vi.advanceTimersByTime(1000);
|
||||
});
|
||||
expect(result.current.cooldown).toBe(0);
|
||||
});
|
||||
|
||||
it('does not decrement when disabled', () => {
|
||||
const { result } = renderHook(() => useCooldownTimer(2, false));
|
||||
|
||||
act(() => {
|
||||
vi.advanceTimersByTime(3000);
|
||||
});
|
||||
|
||||
expect(result.current.cooldown).toBe(2);
|
||||
});
|
||||
|
||||
it('startCooldown floors values and clamps negatives', () => {
|
||||
const { result } = renderHook(() => useCooldownTimer(0, true));
|
||||
|
||||
act(() => {
|
||||
result.current.startCooldown(2.8);
|
||||
});
|
||||
expect(result.current.cooldown).toBe(2);
|
||||
|
||||
act(() => {
|
||||
result.current.startCooldown(-4);
|
||||
});
|
||||
expect(result.current.cooldown).toBe(0);
|
||||
});
|
||||
|
||||
it('stays at zero when already expired', () => {
|
||||
const { result } = renderHook(() => useCooldownTimer(0, true));
|
||||
|
||||
act(() => {
|
||||
vi.advanceTimersByTime(2000);
|
||||
});
|
||||
|
||||
expect(result.current.cooldown).toBe(0);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user