✅ test(card): add unit tests
This commit is contained in:
@@ -0,0 +1,82 @@
|
|||||||
|
import { screen } from '@testing-library/react'
|
||||||
|
import userEvent from '@testing-library/user-event'
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||||||
|
import { useAnalytics } from 'use-analytics'
|
||||||
|
|
||||||
|
import { renderWithRouter as render } from 'components/utils/tests/index.js'
|
||||||
|
import BusinessCardPage from './index.js'
|
||||||
|
|
||||||
|
vi.mock('./envVars.js', () => ({
|
||||||
|
NAME: 'Test Name',
|
||||||
|
POSITION: 'Test Position',
|
||||||
|
VAT: 'Test VAT',
|
||||||
|
PHONE: '+123456789',
|
||||||
|
EMAIL: 'test@example.com',
|
||||||
|
LINKEDIN: 'testlinkedin',
|
||||||
|
}))
|
||||||
|
|
||||||
|
// Mock window.print
|
||||||
|
const mockPrint = vi.fn()
|
||||||
|
window.print = mockPrint
|
||||||
|
|
||||||
|
// Mock the analytics module
|
||||||
|
vi.mock('use-analytics', () => ({
|
||||||
|
useAnalytics: () => ({ plugins: { enable: vi.fn(), disable: vi.fn() } }),
|
||||||
|
}))
|
||||||
|
|
||||||
|
describe('BusinessCardPage', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
mockPrint.mockClear()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('renders correctly with environment variables', () => {
|
||||||
|
render(<BusinessCardPage />)
|
||||||
|
|
||||||
|
// Name appears in uppercase in the first card
|
||||||
|
expect(screen.getAllByText('Test Name')).toHaveLength(2)
|
||||||
|
expect(screen.getByText('Test Position')).toBeInTheDocument()
|
||||||
|
|
||||||
|
// Check if values are rendered correctly in the second card
|
||||||
|
expect(screen.getByText('Test VAT')).toBeInTheDocument()
|
||||||
|
expect(screen.getByText('+123456789')).toBeInTheDocument()
|
||||||
|
expect(screen.getByText('test@example.com')).toBeInTheDocument()
|
||||||
|
expect(screen.getByText('www.m-tartari.eu')).toBeInTheDocument()
|
||||||
|
expect(screen.getByText('testlinkedin')).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
|
||||||
|
it('has correct links with proper href attributes', () => {
|
||||||
|
render(<BusinessCardPage />)
|
||||||
|
|
||||||
|
// Check phone link
|
||||||
|
const phoneLink = screen.getByText('+123456789').closest('a')
|
||||||
|
expect(phoneLink).toHaveAttribute('href', 'tel:+123456789')
|
||||||
|
|
||||||
|
// Check email link
|
||||||
|
const emailLink = screen.getByText('test@example.com').closest('a')
|
||||||
|
expect(emailLink).toHaveAttribute('href', 'mailto:test@example.com')
|
||||||
|
|
||||||
|
// Check website link
|
||||||
|
const websiteLink = screen.getByText('www.m-tartari.eu').closest('a')
|
||||||
|
expect(websiteLink).toHaveAttribute('href', 'https://www.m-tartari.eu')
|
||||||
|
|
||||||
|
// Check LinkedIn link
|
||||||
|
const linkedinLink = screen.getByText('testlinkedin').closest('a')
|
||||||
|
expect(linkedinLink).toHaveAttribute('href', 'https://www.linkedin.com/in/testlinkedin/')
|
||||||
|
})
|
||||||
|
|
||||||
|
it('calls window.print when print button is clicked', async () => {
|
||||||
|
const user = userEvent.setup()
|
||||||
|
render(<BusinessCardPage />)
|
||||||
|
|
||||||
|
await user.click(screen.getByText('Print Business Card'))
|
||||||
|
|
||||||
|
expect(mockPrint).toHaveBeenCalledTimes(1)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('renders correct number of business cards', () => {
|
||||||
|
render(<BusinessCardPage />)
|
||||||
|
|
||||||
|
const businessCards = screen.getAllByRole('img', { name: /logo|qr code/i })
|
||||||
|
expect(businessCards).toHaveLength(2)
|
||||||
|
})
|
||||||
|
})
|
||||||
Reference in New Issue
Block a user