Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Failing after 30s
CI / test-python-backend-compliance (push) Successful in 30s
CI / test-python-document-crawler (push) Successful in 21s
CI / test-python-dsms-gateway (push) Successful in 17s
- Ruff: 144 auto-fixes (unused imports, == None → is None), F821/F811/F841 manuell - CVEs: python-multipart>=0.0.22, weasyprint>=68.0, pillow>=12.1.1, npm audit fix (0 vulns) - TS: 5 tote Drafting-Engine-Dateien entfernt, allowed-facts/sanitizer/StepHeader/context fixes - Tests: +104 (ISMS 58, Evidence 18, VVT 14, Generation 14) → 1449 passed - Refactoring: collect_ci_evidence (F→A), row_to_response (E→A), extract_requirements (E→A) - Dead Code: pca-platform, 7 Go-Handler, dsr_api.py, duplicate Schemas entfernt Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
131 lines
3.8 KiB
TypeScript
131 lines
3.8 KiB
TypeScript
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)
|
|
})
|
|
})
|