Files
bmp-website-2026/tests/int/home-phase-headline.int.spec.tsx
2026-07-31 17:24:36 +02:00

74 lines
2.5 KiB
TypeScript

import { readFileSync } from 'node:fs'
import { join } from 'node:path'
import { cleanup, render, screen } from '@testing-library/react'
import { afterEach, describe, expect, it, vi } from 'vitest'
import type { SpaApplicationPhaseData } from '@/spa/applicationPhase'
import { StatusSlider } from '@/spa/pages/Home'
vi.mock('@/spa/hooks/useIsMobile', () => ({
useIsMobile: () => false,
}))
vi.mock('next/navigation', () => ({
usePathname: () => '/',
useRouter: () => ({ push: vi.fn(), replace: vi.fn() }),
}))
const applicationPhase = (headline: string): SpaApplicationPhaseData => ({
activePhase: '0',
noActionLabel: 'No action',
successApplicationsLabel: 'Applications',
successWinnersLabel: 'Winners',
phases: [
{
num: '03',
tag: 'Complete',
phase: 'Award ceremony',
headline,
body: 'CMS body copy',
accent: '#EFBF04',
bg: '#111D55',
meta: 'CMS meta copy',
successApplications: '247',
successWinners: '3',
},
],
})
describe('homepage application-phase headline', () => {
afterEach(() => cleanup())
it('renders each explicit CMS newline as an intentional line break', () => {
render(<StatusSlider data={applicationPhase('Ein weiteres\nerfolgreiches Jahr')} />)
const headline = screen.getByTestId('phase-headline')
expect(headline.textContent).toBe('Ein weitereserfolgreiches Jahr')
expect(headline.querySelectorAll('br')).toHaveLength(1)
expect(headline.childNodes[0]?.textContent).toBe('Ein weiteres')
expect(headline.childNodes[2]?.textContent).toBe('erfolgreiches Jahr')
})
it('keeps arbitrary CMS-edited copy authoritative and naturally wrappable', () => {
const editedHeadline =
'Eine redaktionell geänderte Überschrift mit zusätzlichem Inhalt für schmale Ansichten'
render(<StatusSlider data={applicationPhase(editedHeadline)} />)
const headline = screen.getByTestId('phase-headline')
expect(headline.textContent).toBe(editedHeadline)
expect(headline.querySelector('br')).toBeNull()
expect(headline.classList.contains('type-page-title')).toBe(true)
expect(screen.getByTestId('phase-section').style.height).toBe('auto')
expect(screen.getByTestId('phase-section').style.minHeight).toBe('480px')
})
it('keeps the requested copy out of the homepage component', () => {
const source = readFileSync(join(process.cwd(), 'src/spa/pages/Home.tsx'), 'utf8')
expect(source).not.toContain('Ein weiteres')
expect(source).not.toContain('erfolgreiches Jahr')
})
})