import { NextResponse } from 'next/server'; import { GET } from '@/app/api/hobbies/route'; import { getHobbies } from '@/lib/directus'; jest.mock('@/lib/directus', () => ({ getHobbies: 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/hobbies', () => { beforeEach(() => { jest.clearAllMocks(); }); it('should return hobbies from Directus', async () => { const mockHobbies = [ { id: '1', key: 'coding', icon: 'Code', title: 'Coding', description: 'I love coding', }, ]; (getHobbies as jest.Mock).mockResolvedValue(mockHobbies); const request = { url: 'http://localhost/api/hobbies?locale=en', } as any; await GET(request); expect(NextResponse.json).toHaveBeenCalledWith( expect.objectContaining({ hobbies: mockHobbies, source: 'directus', }) ); }); it('should return fallback when no hobbies found', async () => { (getHobbies as jest.Mock).mockResolvedValue(null); const request = { url: 'http://localhost/api/hobbies?locale=en', } as any; await GET(request); expect(NextResponse.json).toHaveBeenCalledWith( expect.objectContaining({ hobbies: null, source: 'fallback', }) ); }); });