package search import ( "os" "strings" "testing" ) // TestNoDynamicSQLClauseBuilding ist die geforderte Pflichtprüfung 1: // Codereview bestätigt automatisiert, dass client.go keine Sprintf/Join- // basierte SQL-Klauselbildung enthält (Bekannter Fehler #11/#12 aus // known-issues-archivmail.md). Die einzige SQL-Anfrage des Pakets // (EnsureSchema, /sql-Endpunkt) darf ausschließlich den statisch // eingebetteten Migrationstext verwenden — kein fmt.Sprintf, kein // String-Concat/Join zum Bau von SQL-Text. func TestNoDynamicSQLClauseBuilding(t *testing.T) { src, err := os.ReadFile("client.go") if err != nil { t.Fatal(err) } code := string(src) if strings.Contains(code, "fmt.Sprintf") { t.Fatal("client.go darf kein fmt.Sprintf verwenden (SQL-Klauselbildung verboten, siehe known-issues #11/#12)") } _, after, found := strings.Cut(code, `"/sql?mode=raw"`) if !found { t.Fatal("erwarteter /sql-Aufruf nicht gefunden") } window := after if len(window) > 200 { window = window[:200] } if strings.Contains(window, "+") { t.Fatal("kein '+'-String-Zusammenbau in der Nähe des /sql-Aufrufs erlaubt") } }