import { describe, it, expect } from 'vitest' import { STEP_EXPLANATIONS } from '../StepHeader' type StepExplanationKey = keyof typeof STEP_EXPLANATIONS // Focus on testing the STEP_EXPLANATIONS data structure // Component tests require more complex SDK context mocking describe('STEP_EXPLANATIONS', () => { it('should have explanations for all Phase 1 steps', () => { const phase1Steps: StepExplanationKey[] = [ 'use-case-workshop', 'screening', 'modules', 'requirements', 'controls', 'evidence', 'audit-checklist', 'risks', ] phase1Steps.forEach(stepId => { expect(STEP_EXPLANATIONS[stepId]).toBeDefined() expect(STEP_EXPLANATIONS[stepId].title).toBeDefined() expect(STEP_EXPLANATIONS[stepId].title.length).toBeGreaterThan(0) expect(STEP_EXPLANATIONS[stepId].description).toBeDefined() expect(STEP_EXPLANATIONS[stepId].description.length).toBeGreaterThan(0) expect(STEP_EXPLANATIONS[stepId].explanation).toBeDefined() expect(STEP_EXPLANATIONS[stepId].explanation.length).toBeGreaterThan(0) }) }) it('should have explanations for all Phase 2 steps', () => { const phase2Steps: StepExplanationKey[] = [ 'ai-act', 'obligations', 'dsfa', 'tom', 'loeschfristen', 'vvt', 'consent', 'cookie-banner', 'einwilligungen', 'dsr', 'escalations', ] phase2Steps.forEach(stepId => { expect(STEP_EXPLANATIONS[stepId]).toBeDefined() expect(STEP_EXPLANATIONS[stepId].title).toBeDefined() expect(STEP_EXPLANATIONS[stepId].description).toBeDefined() }) }) it('should have tips array for each step explanation', () => { Object.entries(STEP_EXPLANATIONS).forEach(([stepId, explanation]) => { expect(explanation.tips).toBeDefined() expect(Array.isArray(explanation.tips)).toBe(true) expect(explanation.tips.length).toBeGreaterThan(0) }) }) it('should have valid tip icons', () => { const validIcons = ['info', 'warning', 'success', 'lightbulb'] Object.entries(STEP_EXPLANATIONS).forEach(([stepId, explanation]) => { explanation.tips.forEach((tip, tipIndex) => { expect(validIcons).toContain(tip.icon) expect(tip.title).toBeDefined() expect(tip.title.length).toBeGreaterThan(0) expect(tip.description).toBeDefined() expect(tip.description.length).toBeGreaterThan(0) }) }) }) it('should have a use-case-workshop explanation', () => { const ucWorkshop = STEP_EXPLANATIONS['use-case-workshop'] expect(ucWorkshop.title).toContain('Use Case') expect(ucWorkshop.tips.length).toBeGreaterThanOrEqual(2) }) it('should have a risks explanation', () => { const risks = STEP_EXPLANATIONS['risks'] expect(risks.title).toBeDefined() expect(risks.explanation).toContain('Risiko') }) it('should have a dsfa explanation', () => { const dsfa = STEP_EXPLANATIONS['dsfa'] expect(dsfa.title).toContain('Datenschutz') expect(dsfa.explanation.length).toBeGreaterThan(50) }) it('should cover all core SDK steps', () => { const coreStepIds: StepExplanationKey[] = [ // Phase 1 'use-case-workshop', 'screening', 'modules', 'requirements', 'controls', 'evidence', 'audit-checklist', 'risks', // Phase 2 'ai-act', 'obligations', 'dsfa', 'tom', 'loeschfristen', 'vvt', 'consent', 'cookie-banner', 'einwilligungen', 'dsr', 'escalations', ] coreStepIds.forEach(stepId => { expect(STEP_EXPLANATIONS[stepId]).toBeDefined() }) // Ensure we have at least the core steps plus additional module explanations expect(Object.keys(STEP_EXPLANATIONS).length).toBeGreaterThanOrEqual(coreStepIds.length) }) })