diff --git a/app/[locale]/referenzen/[slug]/page.test.tsx b/app/[locale]/referenzen/[slug]/page.test.tsx new file mode 100644 index 000000000..8351231dc --- /dev/null +++ b/app/[locale]/referenzen/[slug]/page.test.tsx @@ -0,0 +1,38 @@ +import { describe, it, expect, vi } from 'vitest'; +import ReferenceDetail from './page'; + +// Mock next/navigation +vi.mock('next/navigation', () => ({ + notFound: vi.fn(), +})); + +// Mock next-intl/server +vi.mock('next-intl/server', () => ({ + setRequestLocale: vi.fn(), + getTranslations: vi.fn().mockResolvedValue(() => 'translated text'), +})); + +// Mock @/lib/references +vi.mock('@/lib/references', () => ({ + getReferenceBySlug: vi.fn().mockResolvedValue({ + slug: 'test-slug', + frontmatter: { + title: 'Test Title', + location: 'Test Location', + category: 'Test Category', + }, + content: 'Test content', + }), +})); + +describe('ReferenceDetail Page TDD', () => { + it('renders reference detail correctly', async () => { + const props = { + params: Promise.resolve({ locale: 'de', slug: 'test-slug' }) + }; + + // We expect the execution to fail if getTranslations is not defined/imported inside page.tsx + const component = await ReferenceDetail(props); + expect(component).toBeTruthy(); + }); +}); diff --git a/app/[locale]/referenzen/[slug]/page.tsx b/app/[locale]/referenzen/[slug]/page.tsx index a4e10e6a7..2858825d1 100644 --- a/app/[locale]/referenzen/[slug]/page.tsx +++ b/app/[locale]/referenzen/[slug]/page.tsx @@ -1,6 +1,6 @@ import { notFound } from 'next/navigation'; import { Container, Badge, Heading } from '@/components/ui'; -import { setRequestLocale } from 'next-intl/server'; +import { setRequestLocale, getTranslations } from 'next-intl/server'; import { Metadata } from 'next'; import { getReferenceBySlug, getAllReferences } from '@/lib/references'; import { MDXRemote } from 'next-mdx-remote/rsc'; diff --git a/components/search/AISearchResults.test.tsx b/components/search/AISearchResults.test.tsx new file mode 100644 index 000000000..f97d06cd0 --- /dev/null +++ b/components/search/AISearchResults.test.tsx @@ -0,0 +1,61 @@ +import * as React from 'react'; +import { describe, it, expect, vi } from 'vitest'; +import { render } from '@testing-library/react'; +import { AISearchResults } from './AISearchResults'; + +// Mock lucide-react +vi.mock('lucide-react', () => ({ + ArrowUp: () =>
, + X: () =>
, + Sparkles: () =>
, + ChevronRight: () =>
, + RotateCcw: () =>
, + Copy: () =>
, + Check: () =>
, +})); + +// Mock next/link +vi.mock('next/link', () => ({ + default: ({ children, href }: any) => {children}, +})); + +// Mock useAnalytics +vi.mock('../analytics/useAnalytics', () => ({ + useAnalytics: () => ({ + trackEvent: vi.fn(), + }), +})); + +// Mock react-markdown +vi.mock('react-markdown', () => ({ + default: ({ children }: any) =>
{children}
, +})); + +// Mock remark-gfm +vi.mock('remark-gfm', () => ({ + default: {}, +})); + +// Mock next-intl +vi.mock('next-intl', () => ({ + useTranslations: () => { + const translate = (key: string) => key; + translate.raw = (key: string) => { + if (key === 'loadingTexts') return ['Lade...', 'Denke nach...']; + if (key === 'prompts') return ['Prompt 1', 'Prompt 2']; + return []; + }; + return translate; + }, + useLocale: () => 'en', +})); + +describe('AISearchResults Component Test (TDD)', () => { + it('renders correctly when open', () => { + const handleClose = vi.fn(); + const { container } = render( + + ); + expect(container).toBeTruthy(); + }); +}); diff --git a/components/search/AISearchResults.tsx b/components/search/AISearchResults.tsx index c5f4a6866..c2fc61508 100644 --- a/components/search/AISearchResults.tsx +++ b/components/search/AISearchResults.tsx @@ -10,9 +10,6 @@ import remarkGfm from 'remark-gfm'; import dynamic from 'next/dynamic'; import { useTranslations } from 'next-intl'; const AIOrb = dynamic(() => import('./AIOrb'), { ssr: false }); - 'Frage den Senior-Ingenieur... 👴🔧', - 'Frage ChatGPTs Cousin 2. Grades... 🤖', -]; interface ProductMatch { id: string;