Files
breakpilot-compliance/ai-compliance-sdk/internal/maximizer/scoring_test.go
Benjamin Admin 1ac716261c
Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 1m45s
Build + Deploy / build-backend-compliance (push) Successful in 4m42s
Build + Deploy / build-ai-sdk (push) Successful in 46s
Build + Deploy / build-developer-portal (push) Successful in 1m6s
Build + Deploy / build-tts (push) Successful in 1m14s
Build + Deploy / build-document-crawler (push) Successful in 31s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m27s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 37s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 4m35s
feat: Compliance Maximizer — Regulatory Optimization Engine
Neues Modul das den regulatorischen Spielraum fuer KI-Use-Cases
deterministisch berechnet und optimale Konfigurationen vorschlaegt.

Kernfeatures:
- 13-Dimensionen Constraint-Space (DSGVO + AI Act)
- 3-Zonen-Analyse: Verboten / Eingeschraenkt / Erlaubt
- Deterministische Optimizer-Engine (kein LLM im Kern)
- 28 Constraint-Regeln aus DSGVO, AI Act, EDPB Guidelines
- 28 Tests (Golden Suite + Meta-Tests)
- REST API: /sdk/v1/maximizer/* (9 Endpoints)
- Frontend: 3-Zonen-Visualisierung, Dimension-Form, Score-Gauges

[migration-approved]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 09:10:20 +02:00

89 lines
2.3 KiB
Go

package maximizer
import "testing"
func TestSafetyScoreAllSafe(t *testing.T) {
zm := make(map[string]ZoneInfo)
for _, dim := range allDimensions {
zm[dim] = ZoneInfo{Zone: ZoneSafe}
}
eval := &EvaluationResult{ZoneMap: zm}
score := ComputeSafetyScore(eval)
if score != 100 {
t.Errorf("expected 100, got %d", score)
}
}
func TestSafetyScoreWithRestrictions(t *testing.T) {
zm := make(map[string]ZoneInfo)
for _, dim := range allDimensions {
zm[dim] = ZoneInfo{Zone: ZoneSafe}
}
// Mark 3 as restricted
zm["automation_level"] = ZoneInfo{Zone: ZoneRestricted}
zm["human_in_loop"] = ZoneInfo{Zone: ZoneRestricted}
zm["logging_required"] = ZoneInfo{Zone: ZoneForbidden}
eval := &EvaluationResult{ZoneMap: zm}
score := ComputeSafetyScore(eval)
safe := len(allDimensions) - 3
expected := (safe * 100) / len(allDimensions)
if score != expected {
t.Errorf("expected %d, got %d", expected, score)
}
}
func TestSafetyScoreNil(t *testing.T) {
if s := ComputeSafetyScore(nil); s != 0 {
t.Errorf("expected 0 for nil, got %d", s)
}
}
func TestUtilityScoreNoChanges(t *testing.T) {
config := &DimensionConfig{AutomationLevel: AutoFull}
score := ComputeUtilityScore(config, config)
if score != 100 {
t.Errorf("expected 100 for identical configs, got %d", score)
}
}
func TestUtilityScoreWithChanges(t *testing.T) {
original := &DimensionConfig{
AutomationLevel: AutoFull,
HumanInLoop: HILNone,
}
variant := &DimensionConfig{
AutomationLevel: AutoAssistive,
HumanInLoop: HILRequired,
}
score := ComputeUtilityScore(original, variant)
if score >= 100 {
t.Errorf("expected < 100 with changes, got %d", score)
}
if score <= 0 {
t.Errorf("expected > 0 for moderate changes, got %d", score)
}
}
func TestUtilityScoreNil(t *testing.T) {
if s := ComputeUtilityScore(nil, nil); s != 0 {
t.Errorf("expected 0 for nil, got %d", s)
}
}
func TestCompositeScore(t *testing.T) {
score := ComputeCompositeScore(80, 60, DefaultWeights)
expected := 0.4*80.0 + 0.6*60.0 // 32 + 36 = 68
if score != expected {
t.Errorf("expected %.1f, got %.1f", expected, score)
}
}
func TestCompositeScoreCustomWeights(t *testing.T) {
score := ComputeCompositeScore(100, 0, ScoreWeights{Safety: 1.0, Utility: 0.0})
if score != 100.0 {
t.Errorf("expected 100, got %.1f", score)
}
}