Files
Benjamin Boenisch 4435e7ea0a Initial commit: breakpilot-compliance - Compliance SDK Platform
Services: Admin-Compliance, Backend-Compliance,
AI-Compliance-SDK, Consent-SDK, Developer-Portal,
PCA-Platform, DSMS

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-11 23:47:28 +01:00

210 lines
6.9 KiB
TypeScript

/**
* E2E Tests: SDK Workflow
*
* Tests for completing the full compliance workflow,
* including checkpoints and state persistence.
*/
import { test, expect, selectors, navigateToStep, waitForSDKInit } from '../fixtures/sdk-fixtures'
test.describe('Use Case Workshop', () => {
test('can create a new use case', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'use-case-workshop')
// Click add use case button
const addButton = sdkPage.locator(selectors.addUseCaseButton)
if (await addButton.isVisible()) {
await addButton.click()
// Fill in use case form
const form = sdkPage.locator(selectors.useCaseForm)
if (await form.isVisible()) {
await sdkPage.fill('[name="name"]', 'E2E Test Use Case')
await sdkPage.fill('[name="description"]', 'This is a test use case created by E2E tests')
// Submit form
await sdkPage.click('button[type="submit"]')
// Verify use case was created
await expect(sdkPage.locator('text=E2E Test Use Case')).toBeVisible()
}
}
})
test('displays use cases with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'use-case-workshop')
// With demo data, should show existing use cases
const useCaseCards = withDemoData.locator('[data-testid^="use-case-card"]')
const count = await useCaseCards.count()
expect(count).toBeGreaterThan(0)
})
})
test.describe('Risk Matrix', () => {
test('displays risk matrix', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'risks')
// Page should load without errors
await expect(sdkPage).toHaveURL('/sdk/risks')
})
test('shows risks with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'risks')
// With demo data, should show risk cards
const riskCards = withDemoData.locator('[data-testid^="risk-card"]')
const count = await riskCards.count()
expect(count).toBeGreaterThan(0)
})
test('can filter risks by severity', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'risks')
// Look for severity filter
const filterSelect = withDemoData.locator('[data-testid="severity-filter"]')
if (await filterSelect.isVisible()) {
await filterSelect.selectOption('CRITICAL')
// Verify filtered results
const riskCards = withDemoData.locator('[data-testid^="risk-card"]')
const visibleCards = riskCards.filter({ hasText: 'CRITICAL' })
const count = await visibleCards.count()
expect(count).toBeGreaterThanOrEqual(0)
}
})
})
test.describe('Controls', () => {
test('displays controls grid', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'controls')
await expect(sdkPage).toHaveURL('/sdk/controls')
})
test('shows controls with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'controls')
const controlCards = withDemoData.locator('[data-testid^="control-card"]')
const count = await controlCards.count()
expect(count).toBeGreaterThan(0)
})
test('can view control details', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'controls')
// Click on first control card
const firstControl = withDemoData.locator('[data-testid^="control-card"]').first()
if (await firstControl.isVisible()) {
await firstControl.click()
// Should show control details (modal or expanded view)
const detailView = withDemoData.locator('[data-testid="control-details"]')
if (await detailView.isVisible({ timeout: 2000 })) {
await expect(detailView).toBeVisible()
}
}
})
})
test.describe('DSFA', () => {
test('displays DSFA page', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'dsfa')
await expect(sdkPage).toHaveURL('/sdk/dsfa')
})
test('shows DSFA content with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'dsfa')
// Demo data includes a DSFA with sections
const dsfaSections = withDemoData.locator('[data-testid^="dsfa-section"]')
const count = await dsfaSections.count()
expect(count).toBeGreaterThan(0)
})
})
test.describe('TOMs', () => {
test('displays TOMs page', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'tom')
await expect(sdkPage).toHaveURL('/sdk/tom')
})
test('shows TOMs with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'tom')
const tomCards = withDemoData.locator('[data-testid^="tom-card"]')
const count = await tomCards.count()
expect(count).toBeGreaterThan(0)
})
})
test.describe('VVT (Verarbeitungsverzeichnis)', () => {
test('displays VVT page', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'vvt')
await expect(sdkPage).toHaveURL('/sdk/vvt')
})
test('shows processing activities with demo data', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'vvt')
const activityCards = withDemoData.locator('[data-testid^="processing-activity"]')
const count = await activityCards.count()
expect(count).toBeGreaterThan(0)
})
})
test.describe('Checkpoint Validation', () => {
test('validates use case checkpoint', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'use-case-workshop')
// Look for checkpoint validation button
const validateButton = withDemoData.locator('[data-testid="validate-checkpoint"]')
if (await validateButton.isVisible()) {
await validateButton.click()
// With demo data, checkpoint should pass
const successIndicator = withDemoData.locator('[data-testid="checkpoint-passed"]')
await expect(successIndicator).toBeVisible({ timeout: 5000 })
}
})
test('shows checkpoint errors when requirements not met', async ({ sdkPage }) => {
await navigateToStep(sdkPage, 'use-case-workshop')
// Without demo data, checkpoint should fail
const validateButton = sdkPage.locator('[data-testid="validate-checkpoint"]')
if (await validateButton.isVisible()) {
await validateButton.click()
// Should show error
const errorIndicator = sdkPage.locator('[data-testid="checkpoint-failed"]')
if (await errorIndicator.isVisible({ timeout: 5000 })) {
await expect(errorIndicator).toBeVisible()
}
}
})
})
test.describe('State Persistence', () => {
test('persists state after page reload', async ({ withDemoData }) => {
await navigateToStep(withDemoData, 'use-case-workshop')
// Get current use case count
const useCaseCards = withDemoData.locator('[data-testid^="use-case-card"]')
const initialCount = await useCaseCards.count()
// Reload page
await withDemoData.reload()
await waitForSDKInit(withDemoData)
// Count should be same after reload
const afterReloadCards = withDemoData.locator('[data-testid^="use-case-card"]')
const afterReloadCount = await afterReloadCards.count()
expect(afterReloadCount).toBe(initialCount)
})
})