package entry import ( "strings" "testing" ) // TestRenderHTMLEscapesRawHTML ist ein Sicherheitstest. // // Das gerenderte Ergebnis wird in der Weboberfläche ohne weiteres Escaping // eingesetzt. Der Schutz davor, dass jemand über einen Eintrag ein ", "", "", } for _, eingabe := range boesartig { html, err := RenderHTML(eingabe, "/p/test/e/") if err != nil { t.Fatalf("RenderHTML(%q): %v", eingabe, err) } if strings.Contains(html, "", "
  • ", ""} { if !strings.Contains(html, erwartet) { t.Errorf("%s fehlt im Ergebnis: %s", erwartet, html) } } } func TestRenderPlainStripsLinkSyntax(t *testing.T) { got := RenderPlain("Siehe [[server-zugang]] für Details.") if strings.Contains(got, "[[") { t.Errorf("die Verweis-Klammern blieben stehen: %q", got) } if !strings.Contains(got, "server-zugang") { t.Errorf("der Bezeichner ging verloren: %q", got) } } // ── Textausschnitte ────────────────────────────────────────────────────────── func TestSnippetAroundMatch(t *testing.T) { text := strings.Repeat("Vorlauf. ", 40) + "GESUCHT " + strings.Repeat("Nachlauf. ", 40) got := Snippet(text, "GESUCHT") if !strings.Contains(got, "GESUCHT") { t.Error("der Treffer fehlt im Ausschnitt") } // Der Ausschnitt soll kurz sein — er dient dem Einordnen, nicht dem Lesen. if len(got) > 400 { t.Errorf("Ausschnitt ist %d Zeichen lang, das ist zu viel", len(got)) } // Vorne und hinten wurde gekürzt, das muss sichtbar sein. if !strings.HasPrefix(got, "…") || !strings.HasSuffix(got, "…") { t.Errorf("die Auslassungszeichen fehlen: %q", got) } } func TestSnippetWithoutMatch(t *testing.T) { // Kein wörtlicher Treffer — etwa weil der Fund über die Präfix-Suche kam. got := Snippet("Ein kurzer Text ohne den Suchbegriff.", "deploy") if got == "" { t.Error("ohne Treffer kam gar kein Ausschnitt zurück") } if !strings.Contains(got, "kurzer Text") { t.Errorf("es wurde nicht der Textanfang genommen: %q", got) } } func TestSnippetShortText(t *testing.T) { got := Snippet("Kurz.", "Kurz") if got != "Kurz." { t.Errorf("Snippet = %q, erwartet %q", got, "Kurz.") } } // TestHighlightSnippetEscapesFirst ist ein Sicherheitstest: Der Inhalt muss // escaped werden, BEVOR die Hervorhebung eingesetzt wird. Andersherum könnte ein // Eintrag eigenes HTML in die Trefferliste einschleusen. func TestHighlightSnippetEscapesFirst(t *testing.T) { got := HighlightSnippet("Ein im Text", "script") if strings.Contains(got, "