import { NextResponse } from 'next/server'; import { GET } from '@/app/api/book-reviews/route'; import { getBookReviews } from '@/lib/directus'; jest.mock('@/lib/directus', () => ({ getBookReviews: jest.fn(), })); jest.mock('next/server', () => ({ NextRequest: jest.fn((url) => ({ url, })), NextResponse: { json: jest.fn((data, options) => ({ json: async () => data, status: options?.status || 200, })), }, })); describe('GET /api/book-reviews', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should return book reviews from Directus', async () => { const mockReviews = [ { id: '1', book_title: 'Test Book', book_author: 'Test Author', rating: 5, review: 'Great book!', }, ]; (getBookReviews as jest.Mock).mockResolvedValue(mockReviews); const request = { url: 'http://localhost/api/book-reviews?locale=en', } as any; await GET(request); expect(NextResponse.json).toHaveBeenCalledWith( expect.objectContaining({ bookReviews: mockReviews, source: 'directus', }) ); }); it('should return fallback when no reviews found', async () => { (getBookReviews as jest.Mock).mockResolvedValue(null); const request = { url: 'http://localhost/api/book-reviews?locale=en', } as any; await GET(request); expect(NextResponse.json).toHaveBeenCalledWith( expect.objectContaining({ bookReviews: null, source: 'fallback', }) ); }); });