Panno-AI-API / src /tests /page.test.tsx
GitHub Actions Bot
Sync: Thu Feb 12 07:00:42 UTC 2026
dce7eca
import { render, screen, fireEvent, waitFor, act } from '@testing-library/react'
import Home from '@/app/page'
// Mock dependencies
jest.mock('next-auth/react', () => ({
useSession: jest.fn(() => ({ data: null })),
signIn: jest.fn(),
signOut: jest.fn(),
}))
jest.mock('next/dynamic', () => () => {
const DynamicComponent = () => <div>PanoramaViewer Mock</div>
DynamicComponent.displayName = 'PanoramaViewer'
return DynamicComponent
})
// Mock child components
jest.mock('@/components/Navbar', () => () => <div data-testid="navbar">Navbar</div>)
jest.mock('@/components/UploadSection', () => ({ onGenerate, isGenerating }: any) => (
<div data-testid="upload-section">
<button onClick={() => onGenerate('test prompt', [])} disabled={isGenerating}>Generate</button>
</div>
))
describe('Home Page', () => {
beforeEach(() => {
localStorage.clear()
jest.clearAllMocks()
jest.useFakeTimers()
})
afterEach(() => {
jest.useRealTimers()
})
it('renders initial state correctly', () => {
render(<Home />)
expect(screen.getByTestId('navbar')).toBeInTheDocument()
expect(screen.getByTestId('upload-section')).toBeInTheDocument()
expect(screen.getByText('No panoramas yet')).toBeInTheDocument()
expect(screen.getByText('Your Gallery')).toBeInTheDocument()
expect(screen.getByText('0 Creations')).toBeInTheDocument()
})
it('generates panorama successfully', async () => {
// Mock fetch success
(global.fetch as jest.Mock).mockResolvedValueOnce({
ok: true,
json: async () => ({
success: true,
url: 'data:image/png;base64,mock',
method: 'cv_ai_hybrid'
})
});
render(<Home />)
const generateBtn = screen.getByText('Generate')
await act(async () => {
fireEvent.click(generateBtn)
})
await waitFor(() => {
expect(screen.getByText('PanoramaViewer Mock')).toBeInTheDocument()
})
expect(screen.getByText('1 Creations')).toBeInTheDocument()
})
it('loads history from localStorage', async () => {
const mockHistory = [{
id: 'test-id',
url: '/mock-local-url.jpg',
prompt: 'test prompt',
timestamp: new Date().toISOString()
}]
Storage.prototype.getItem = jest.fn(() => JSON.stringify(mockHistory));
render(<Home />)
await waitFor(() => {
expect(screen.getByText('1 Creations')).toBeInTheDocument()
})
expect(screen.getByText('PanoramaViewer Mock')).toBeInTheDocument()
})
})