package importtestgate import ( "context" "os" "path/filepath" "testing" ) func moduleRoot(t *testing.T) string { t.Helper() wd, err := os.Getwd() if err != nil { t.Fatalf("arbeitsverzeichnis ermitteln: %v", err) } return filepath.Join(wd, "..", "..") } // TestScanForExternalMailboxReferences_RealImportPackagesPass ist Teil // der geforderten Pflichtprüfung 3: Stichprobenreview bestätigt, dass // die Testsuite ohne echte externe Postfächer auskommt. func TestScanForExternalMailboxReferences_RealImportPackagesPass(t *testing.T) { root := moduleRoot(t) result, err := ScanForExternalMailboxReferences(root) if err != nil { t.Fatalf("scan: %v", err) } if !result.Passed { t.Fatalf("erwartete bestandenen scan, habe verstöße: %v", result.Violations) } } // TestScanForExternalMailboxReferences_DetectsRealViolation beweist, // dass der Scanner eine echte externe Referenz auch tatsächlich erkennt. func TestScanForExternalMailboxReferences_DetectsRealViolation(t *testing.T) { dir := t.TempDir() subDir := filepath.Join(dir, "internal", "imapimport") if err := os.MkdirAll(subDir, 0o755); err != nil { t.Fatalf("verzeichnis anlegen: %v", err) } if err := os.MkdirAll(filepath.Join(dir, "internal", "attachments"), 0o755); err != nil { t.Fatalf("verzeichnis anlegen: %v", err) } if err := os.MkdirAll(filepath.Join(dir, "internal", "mailrules"), 0o755); err != nil { t.Fatalf("verzeichnis anlegen: %v", err) } badFile := filepath.Join(subDir, "bad_test.go") if err := os.WriteFile(badFile, []byte("package imapimport\n\n// verbindet mit imap.gmail.com\n"), 0o600); err != nil { t.Fatalf("testdatei schreiben: %v", err) } result, err := ScanForExternalMailboxReferences(dir) if err != nil { t.Fatalf("scan: %v", err) } if result.Passed { t.Fatal("erwartete erkannten verstoß, scan meldet bestanden") } if len(result.Violations) != 1 { t.Fatalf("erwartete genau 1 verstoß, habe: %v", result.Violations) } } // TestRun_RealGateAgainstImportPackages ist Teil der geforderten // Pflichtprüfung 1 (Testabdeckungsbericht) und Pflichtprüfung 2 // (CI-Lauf grün auf frischem Checkout, hier real ausgeführt statt nur // behauptet). func TestRun_RealGateAgainstImportPackages(t *testing.T) { if os.Getenv("TEST_TENANT_DSN") == "" { t.Skip("TEST_TENANT_DSN nicht gesetzt, Integrationstest übersprungen") } root := moduleRoot(t) ctx := context.Background() result, err := Run(ctx, root) if err != nil { t.Fatalf("gate-lauf: %v", err) } if !result.Passed() { t.Fatalf("gate fehlgeschlagen:\n%s", result.Report()) } if len(result.TestSuite.Coverage) != 3 { t.Fatalf("erwartete abdeckungsdaten für 3 pakete (imapimport/attachments/mailrules), habe %d: %+v", len(result.TestSuite.Coverage), result.TestSuite.Coverage) } for _, c := range result.TestSuite.Coverage { if c.Percent <= 0 { t.Fatalf("paket %s meldet 0%% abdeckung — testabdeckungsbericht wäre wertlos", c.Package) } } t.Logf("Gate-Bericht:\n%s", result.Report()) }