Files
Psychotoxical-psysonic/src/features/discordBanner/useDiscordBanner.test.ts
T

55 lines
2.1 KiB
TypeScript

import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { renderHook, act } from '@testing-library/react';
import { useDiscordBanner } from './useDiscordBanner';
import { useAuthStore } from '@/store/authStore';
import { resetAuthStore } from '@/test/helpers/storeReset';
const THRESHOLD_MS = 20 * 60 * 60 * 1000; // matches useDiscordBanner
describe('useDiscordBanner', () => {
beforeEach(resetAuthStore);
afterEach(resetAuthStore);
it('stays hidden until accumulated usage reaches the threshold', () => {
useAuthStore.setState({ discordBannerAccumulatedUsageMs: THRESHOLD_MS - 1 });
const { result } = renderHook(() => useDiscordBanner());
expect(result.current.visible).toBe(false);
});
it('becomes visible at the threshold when never dismissed', () => {
useAuthStore.setState({ discordBannerAccumulatedUsageMs: THRESHOLD_MS });
const { result } = renderHook(() => useDiscordBanner());
expect(result.current.visible).toBe(true);
});
it('stays hidden when permanently dismissed even far past the threshold', () => {
useAuthStore.setState({
discordBannerAccumulatedUsageMs: THRESHOLD_MS * 2,
discordBannerDismissed: true,
});
const { result } = renderHook(() => useDiscordBanner());
expect(result.current.visible).toBe(false);
});
it('hides for the session on a non-permanent dismiss without persisting', () => {
useAuthStore.setState({ discordBannerAccumulatedUsageMs: THRESHOLD_MS });
const { result } = renderHook(() => useDiscordBanner());
expect(result.current.visible).toBe(true);
act(() => result.current.dismiss(false));
expect(result.current.visible).toBe(false);
expect(useAuthStore.getState().discordBannerDismissed).toBe(false);
});
it('persists a permanent dismiss to the auth store', () => {
useAuthStore.setState({ discordBannerAccumulatedUsageMs: THRESHOLD_MS });
const { result } = renderHook(() => useDiscordBanner());
act(() => result.current.dismiss(true));
expect(result.current.visible).toBe(false);
expect(useAuthStore.getState().discordBannerDismissed).toBe(true);
});
});