import React from 'react'
import { render, screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { SnippetToolbar } from './SnippetToolbar'
import { SnippetTemplate } from '@/lib/types'
const mockTemplates: SnippetTemplate[] = [
{
id: '1',
title: 'React Hook',
description: 'Custom React hook',
code: 'export const useCustom = () => {}',
language: 'TypeScript',
category: 'react',
hasPreview: true,
},
]
describe('SnippetToolbar', () => {
it('renders search input with proper test id', () => {
render(
)
expect(screen.getByTestId('snippet-search-input')).toBeInTheDocument()
})
it('renders selection mode button with proper test id', () => {
render(
)
expect(screen.getByTestId('snippet-selection-mode-btn')).toBeInTheDocument()
})
it('renders create menu trigger with proper test id', () => {
render(
)
expect(screen.getByTestId('snippet-create-menu-trigger')).toBeInTheDocument()
})
it('has proper aria-label on search input', () => {
render(
)
const searchInput = screen.getByTestId('snippet-search-input')
expect(searchInput).toHaveAttribute('aria-label', 'Search snippets')
})
it('calls onSearchChange when search input changes', async () => {
const onSearchChange = jest.fn()
const user = userEvent.setup()
render(
)
const searchInput = screen.getByTestId('snippet-search-input') as HTMLInputElement
await user.type(searchInput, 'test')
expect(onSearchChange).toHaveBeenCalled()
})
it('selection mode button has aria-pressed attribute', () => {
render(
)
const selectionBtn = screen.getByTestId('snippet-selection-mode-btn')
expect(selectionBtn).toHaveAttribute('aria-pressed', 'true')
})
it('renders blank snippet menu item with proper test id', async () => {
const user = userEvent.setup()
render(
)
const trigger = screen.getByTestId('snippet-create-menu-trigger')
await user.click(trigger)
expect(screen.getByTestId('snippet-create-blank-item')).toBeInTheDocument()
})
})