import { screen } from '@testing-library/react'
import userEvent from '@testing-library/user-event'
import { beforeEach, describe, expect, it, vi } from 'vitest'
import { HelpOptionsList } from './HelpOptionsList'
import { DOCS_URL } from '@/lib/constants'
import { customRender } from '@/tests/lib/custom-render'
import { routerMock } from '@/tests/lib/route-mock'
const { takeBreadcrumbSnapshotMock } = vi.hoisted(() => ({
takeBreadcrumbSnapshotMock: vi.fn(),
}))
vi.mock('react-inlinesvg', () => ({
__esModule: true,
default: () => null,
}))
vi.mock('@/lib/breadcrumbs', () => ({
takeBreadcrumbSnapshot: takeBreadcrumbSnapshotMock,
}))
describe('HelpOptionsList', () => {
beforeEach(() => {
routerMock.setCurrentUrl('/')
takeBreadcrumbSnapshotMock.mockReset()
vi.restoreAllMocks()
})
it('navigates to support after invoking the click callback by default', async () => {
const onSupportClick = vi.fn()
customRender(
)
await userEvent.click(screen.getByRole('button', { name: /contact support/i }))
expect(onSupportClick).toHaveBeenCalledTimes(1)
expect(takeBreadcrumbSnapshotMock).toHaveBeenCalledTimes(1)
expect(routerMock.asPath).toBe('/support/new?projectRef=project-1')
})
it('allows the support callback to suppress navigation', async () => {
customRender(
false}
/>
)
await userEvent.click(screen.getByRole('button', { name: /contact support/i }))
expect(takeBreadcrumbSnapshotMock).not.toHaveBeenCalled()
expect(routerMock.asPath).toBe('/')
})
it('renders docs as an external link', () => {
customRender(
)
const docsOption = screen.getByRole('link', { name: /docs/i })
expect(docsOption).toHaveAttribute('href', `${DOCS_URL}/`)
expect(docsOption).toHaveAttribute('target', '_blank')
expect(docsOption).toHaveAttribute('rel', 'noreferrer noopener')
})
})