import { fireEvent, render, screen, within } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { ContentPieceHomeFilterRow } from '@/components/conteudos/ContentPieceHomeFilterRow'
vi.mock('next/link', () => ({
default: ({ children, href, ...props }: { children: React.ReactNode; href: string }) => (
{children}
),
}))
const facets = {
tipo: [
{ value: 'video', label: 'Vídeo' },
{ value: 'foto', label: 'Foto' },
],
cidade: [{ value: 'salvador', label: 'Salvador' }],
regiao: [],
}
describe('ContentPieceHomeFilterRow', () => {
it('renders only the facets with options and links each option to the canonical filtered URL', () => {
render()
expect(screen.getByText('Tipo')).toBeDefined()
expect(screen.getByText('Cidade')).toBeDefined()
// A facet no published piece carries never renders — no empty menu.
expect(screen.queryByText('Região')).toBeNull()
const tipo = screen.getByText('Tipo').closest('details') as HTMLElement
fireEvent.click(within(tipo).getByText('Tipo'))
expect(within(tipo).getByRole('link', { name: 'Vídeo' }).getAttribute('href')).toBe(
'/conteudos?tipo=video',
)
const cidade = screen.getByText('Cidade').closest('details') as HTMLElement
fireEvent.click(within(cidade).getByText('Cidade'))
expect(
within(cidade)
.getByRole('link', { name: /Salvador/ })
.getAttribute('href'),
).toBe('/conteudos?cidade=salvador')
})
it('renders nothing without any option', () => {
const { container } = render(
,
)
expect(container.firstChild).toBeNull()
})
})