diff --git a/src/components/pages/BusinessCardPage/BusinessCardPage.test.tsx b/src/components/pages/BusinessCardPage/BusinessCardPage.test.tsx
new file mode 100644
index 0000000..dbbf4be
--- /dev/null
+++ b/src/components/pages/BusinessCardPage/BusinessCardPage.test.tsx
@@ -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()
+
+ // 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()
+
+ // 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()
+
+ await user.click(screen.getByText('Print Business Card'))
+
+ expect(mockPrint).toHaveBeenCalledTimes(1)
+ })
+
+ it('renders correct number of business cards', () => {
+ render()
+
+ const businessCards = screen.getAllByRole('img', { name: /logo|qr code/i })
+ expect(businessCards).toHaveLength(2)
+ })
+})