import { describe, it, expect, vi } from 'vitest' import { render, screen, fireEvent } from '@testing-library/react' import { NodeModal } from '../NodeModal' describe('NodeModal', () => { it('renders nothing when closed', () => { const { container } = render( ) expect(container.querySelector('[role="dialog"]')).toBeNull() }) it('renders form fields when open', () => { render() expect(screen.getByPlaceholderText('My Server')).toBeDefined() expect(screen.getByText('Add Node')).toBeDefined() }) it('does not call onSubmit when label is empty and shows error', () => { const onSubmit = vi.fn() render() fireEvent.click(screen.getByText('Add')) expect(onSubmit).not.toHaveBeenCalled() expect(screen.getByText('Label is required')).toBeDefined() }) it('calls onSubmit with form data when label is filled', () => { const onSubmit = vi.fn() const onClose = vi.fn() render() fireEvent.change(screen.getByPlaceholderText('My Server'), { target: { value: 'My NAS' } }) fireEvent.click(screen.getByText('Add')) expect(onSubmit).toHaveBeenCalledOnce() expect(onSubmit.mock.calls[0][0].label).toBe('My NAS') expect(onClose).toHaveBeenCalledOnce() }) it('clears label error when user starts typing', () => { render() fireEvent.click(screen.getByText('Add')) expect(screen.getByText('Label is required')).toBeDefined() fireEvent.change(screen.getByPlaceholderText('My Server'), { target: { value: 'x' } }) expect(screen.queryByText('Label is required')).toBeNull() }) it('pre-fills form from initial prop', () => { render( ) const input = screen.getByPlaceholderText('My Server') as HTMLInputElement expect(input.value).toBe('Pre-filled') }) it('shows Save button text when title is Edit Node', () => { render() expect(screen.getByText('Save')).toBeDefined() }) it('calls onClose when Cancel is clicked', () => { const onClose = vi.fn() render() fireEvent.click(screen.getByText('Cancel')) expect(onClose).toHaveBeenCalledOnce() }) })