// AppLogs.test.tsx import '@testing-library/jest-dom' import React from 'react' import { render, screen, waitFor } from '@testing-library/react' import userEvent from '@testing-library/user-event' import AppLogs from './AppLogs' import { useLogs } from '@/hooks/useLogs' import { usePath } from '@/hooks/usePath' import { useClipboard } from '@/hooks/useClipboard' // Mock the hooks jest.mock('@/hooks/useLogs') jest.mock('@/hooks/usePath') jest.mock('@/hooks/useClipboard') describe('AppLogs Component', () => { const mockLogs = ['Log 1', 'Log 2', 'Log 3'] beforeEach(() => { // Reset all mocks jest.resetAllMocks() // Setup default mock implementations ;(useLogs as jest.Mock).mockReturnValue({ getLogs: jest.fn().mockResolvedValue(mockLogs.join('\n')), }) ;(usePath as jest.Mock).mockReturnValue({ onRevealInFinder: jest.fn(), }) ;(useClipboard as jest.Mock).mockReturnValue({ copy: jest.fn(), copied: false, }) }) test('renders AppLogs component with logs', async () => { render() await waitFor(() => { mockLogs.forEach((log) => { expect(screen.getByText(log)).toBeInTheDocument() }) }) expect(screen.getByText('Open')).toBeInTheDocument() expect(screen.getByText('Copy All')).toBeInTheDocument() }) test('renders empty state when no logs', async () => { ;(useLogs as jest.Mock).mockReturnValue({ getLogs: jest.fn().mockResolvedValue(''), }) render() await waitFor(() => { expect(screen.getByText('Empty logs')).toBeInTheDocument() }) }) test('calls onRevealInFinder when Open button is clicked', async () => { const mockOnRevealInFinder = jest.fn() ;(usePath as jest.Mock).mockReturnValue({ onRevealInFinder: mockOnRevealInFinder, }) render() await waitFor(() => { const openButton = screen.getByText('Open') userEvent.click(openButton) expect(mockOnRevealInFinder).toHaveBeenCalledWith('logs') }) }) test('calls copy function when Copy All button is clicked', async () => { const mockCopy = jest.fn() ;(useClipboard as jest.Mock).mockReturnValue({ copy: mockCopy, copied: false, }) render() await waitFor(() => { const copyButton = screen.getByText('Copy All') userEvent.click(copyButton) expect(mockCopy).toHaveBeenCalled() }) }) test('shows Copying... text when copied is true', async () => { ;(useClipboard as jest.Mock).mockReturnValue({ copy: jest.fn(), copied: true, }) render() await waitFor(() => { expect(screen.getByText('Copying...')).toBeInTheDocument() }) }) })