import { cleanup, fireEvent, render, screen, waitFor } from '@testing-library/react' import { afterEach, describe, expect, it, vi } from 'vitest' import OrganizerReviewsSection from '@/components/reviews/OrganizerReviewsSection' import type * as ReviewsService from '@/services/reviews' import type { OrganizerReview } from '@/services/reviews' const listPage = vi.fn() vi.mock('@/services/reviews', async (importOriginal) => { const original = await importOriginal() return { ...original, LIST_ORGANIZER_REVIEWS_PAGE: (...args: unknown[]) => listPage(...args), } }) vi.mock('@/components/reviews/ReviewCard', () => ({ default: ({ body }: { body: string | null }) =>
  • {body}
  • , })) vi.mock('@/components/reviews/StarRating', () => ({ default: () => })) const review = (id: string): OrganizerReview => ({ id, body: `review-${id}`, eventSlug: 'event', eventTitle: 'Event', }) as OrganizerReview describe('OrganizerReviewsSection', () => { afterEach(() => { cleanup() vi.clearAllMocks() }) it('uses SSR reviews without a hydration request and appends only the next page', async () => { const initialReviews = Array.from({ length: 10 }, (_, index) => review(String(index + 1))) listPage.mockResolvedValue({ ok: true, data: { items: [review('11'), review('12')], page: 2, totalItemsCount: 12, totalPages: 2 }, }) render( ) expect(listPage).not.toHaveBeenCalled() fireEvent.click(screen.getByRole('button', { name: 'نمایش نظرات بیشتر' })) await waitFor(() => { expect(listPage).toHaveBeenCalledWith('organizer-1', 2, 10, expect.objectContaining({ errorMode: 'silent' })) }) expect(await screen.findByText('review-12')).toBeInTheDocument() expect(screen.queryByRole('button', { name: 'نمایش نظرات بیشتر' })).not.toBeInTheDocument() }) })