import { cleanup, render, screen } from '@testing-library/react'
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
import { ApplicationFormSection } from '@/spa/components/forms/ApplicationFormSection'
const viewport = vi.hoisted(() => ({ mobile: false }))
const cms = vi.hoisted(() => ({ activePhase: '0' }))
vi.mock('@/spa/hooks/useIsMobile', () => ({
useIsMobile: () => viewport.mobile,
}))
vi.mock('@/spa/cmsRoute', () => ({
useApplicationForm: () => undefined,
useApplicationPhase: () => ({ activePhase: cms.activePhase }),
useNewsletterForm: () => undefined,
}))
vi.mock('@/spa/components/forms/BewerbungsForm', () => ({
default: () =>
Application form
,
}))
vi.mock('@/spa/components/forms/NewsletterInterestForm', () => ({
NewsletterInterestForm: () => Newsletter form
,
}))
vi.mock('@/spa/components/ui/UnoptimizedImage', () => ({
default: ({ alt }: { alt: string }) => ,
}))
describe('shared application form layout', () => {
beforeEach(() => {
viewport.mobile = false
cms.activePhase = '0'
})
afterEach(() => cleanup())
it('widens only the homepage blue panel to a five-to-seven desktop split', () => {
render()
const layout = screen.getByTestId('application-form-layout')
expect(layout.getAttribute('data-source')).toBe('homepage')
expect(layout.style.gridTemplateColumns).toBe('5fr 1px 7fr')
})
it('keeps the Teilnahme desktop split unchanged', () => {
render()
const layout = screen.getByTestId('application-form-layout')
expect(layout.getAttribute('data-source')).toBe('participation')
expect(layout.style.gridTemplateColumns).toBe('4fr 1px 8fr')
})
it('preserves the shared mobile stack for both sources', () => {
viewport.mobile = true
const { rerender } = render()
expect(screen.getByTestId('application-form-layout').style.gridTemplateColumns).toBe('1fr')
rerender()
expect(screen.getByTestId('application-form-layout').style.gridTemplateColumns).toBe('1fr')
})
it('keeps the homepage ratio across application and newsletter phases', () => {
const { rerender } = render()
expect(screen.getByText('Application form')).toBeTruthy()
expect(screen.getByTestId('application-form-layout').style.gridTemplateColumns).toBe(
'5fr 1px 7fr',
)
cms.activePhase = '1'
rerender()
expect(screen.getByText('Newsletter form')).toBeTruthy()
expect(screen.getByTestId('application-form-layout').style.gridTemplateColumns).toBe(
'5fr 1px 7fr',
)
})
})