79 lines
2.7 KiB
TypeScript
79 lines
2.7 KiB
TypeScript
import { describe, it, expect } from 'vitest'
|
||
import { render, screen } from '@testing-library/react'
|
||
import { MemoryRouter } from 'react-router-dom'
|
||
import Footer from '../../src/components/Footer'
|
||
|
||
describe('Footer', () => {
|
||
const renderFooter = (props: Partial<React.ComponentProps<typeof Footer>> = {}) => {
|
||
return render(
|
||
<MemoryRouter>
|
||
<Footer {...props} />
|
||
</MemoryRouter>
|
||
)
|
||
}
|
||
|
||
it('должен рендериться с логотипом', () => {
|
||
renderFooter()
|
||
const logo = screen.getByAltText('Logo')
|
||
expect(logo).toBeInTheDocument()
|
||
expect(logo).toHaveAttribute('src', '/img/logo.png')
|
||
})
|
||
|
||
it('должен отображать ссылку на документацию', () => {
|
||
renderFooter()
|
||
const docLink = screen.getByText('Документация')
|
||
expect(docLink).toBeInTheDocument()
|
||
expect(docLink).toHaveAttribute('href', 'https://3dp-manager.com/docs/intro')
|
||
expect(docLink).toHaveAttribute('target', '_blank')
|
||
expect(docLink).toHaveAttribute('rel', 'noopener')
|
||
})
|
||
|
||
it('должен отображать иконку GitHub', () => {
|
||
renderFooter()
|
||
const githubButton = screen.getByLabelText('GitHub')
|
||
expect(githubButton).toBeInTheDocument()
|
||
expect(githubButton.closest('a')).toHaveAttribute(
|
||
'href',
|
||
'https://github.com/denpiligrim/3dp-manager'
|
||
)
|
||
})
|
||
|
||
it('должен отображать иконку YouTube', () => {
|
||
renderFooter()
|
||
const youtubeButton = screen.getByLabelText('YouTube')
|
||
expect(youtubeButton).toBeInTheDocument()
|
||
expect(youtubeButton.closest('a')).toHaveAttribute(
|
||
'href',
|
||
'https://youtube.com/@denpiligrim'
|
||
)
|
||
})
|
||
|
||
it('должен отображать иконку Telegram', () => {
|
||
renderFooter()
|
||
const telegramButton = screen.getByLabelText('Telegram')
|
||
expect(telegramButton).toBeInTheDocument()
|
||
expect(telegramButton.closest('a')).toHaveAttribute(
|
||
'href',
|
||
'https://t.me/denpiligrim_web'
|
||
)
|
||
})
|
||
|
||
it('должен принимать prop isMobile', () => {
|
||
renderFooter({ isMobile: true })
|
||
expect(screen.getByAltText('Logo')).toBeInTheDocument()
|
||
})
|
||
|
||
it('должен иметь правильный семантический тег footer', () => {
|
||
renderFooter()
|
||
expect(screen.getByRole('contentinfo')).toBeInTheDocument()
|
||
})
|
||
|
||
it('должен иметь правильный layout с Grid', () => {
|
||
renderFooter()
|
||
// Проверяем, что все три колонки присутствуют
|
||
expect(screen.getByText('Документация')).toBeInTheDocument()
|
||
expect(screen.getByLabelText('GitHub')).toBeInTheDocument()
|
||
expect(screen.getByAltText('Logo')).toBeInTheDocument()
|
||
})
|
||
})
|