import { render, screen } from '@testing-library/react' import { beforeEach, describe, expect, test } from 'vitest' import { SkeletonLoader } from './skeleton-loader' import { useWidgetStore } from '../stores/widget-store' // Mock Skeleton component function MockSkeleton() { return
Loading...
} describe('SkeletonLoader', () => { const widgetId = 'test-skeleton-widget' beforeEach(() => { useWidgetStore.getState().clearWidgets() }) describe('when isLoading is true', () => { test('renders skeleton component', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: true }) render(
Content
, ) expect(screen.getByLabelText('Loading skeleton')).toBeTruthy() expect(screen.queryByText('Content')).toBeNull() }) test('returns null when Skeleton prop is null', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: true }) const { container } = render(
Content
, ) expect(container.firstChild).toBeNull() }) }) describe('when isLoading is false', () => { test('renders children', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: false }) render(
Content
, ) expect(screen.getByText('Content')).toBeTruthy() expect(screen.queryByLabelText('Loading skeleton')).toBeNull() }) }) describe('when isLoading is undefined', () => { test('renders children', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: undefined }) render(
Content
, ) expect(screen.getByText('Content')).toBeTruthy() expect(screen.queryByLabelText('Loading skeleton')).toBeNull() }) }) describe('when widget does not exist in store', () => { test('renders children (isLoading is undefined)', () => { render(
Content
, ) expect(screen.getByText('Content')).toBeTruthy() expect(screen.queryByLabelText('Loading skeleton')).toBeNull() }) }) describe('reactivity to store changes', () => { test('updates from skeleton to content when isLoading becomes false', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: true }) const { rerender } = render(
Content
, ) expect(screen.getByLabelText('Loading skeleton')).toBeTruthy() // Update store with isLoading false useWidgetStore.getState().setWidget(widgetId, { isLoading: false }) // Force rerender to pick up store changes rerender(
Content
, ) expect(screen.queryByLabelText('Loading skeleton')).toBeNull() expect(screen.getByText('Content')).toBeTruthy() }) test('updates from content to skeleton when isLoading becomes true', () => { useWidgetStore.getState().setWidget(widgetId, { isLoading: false }) const { rerender } = render(
Content
, ) expect(screen.getByText('Content')).toBeTruthy() // Update store to isLoading true useWidgetStore.getState().setWidget(widgetId, { isLoading: true }) // Force rerender to pick up store changes rerender(
Content
, ) expect(screen.getByLabelText('Loading skeleton')).toBeTruthy() expect(screen.queryByText('Content')).toBeNull() }) }) })