Melden-Button: Beiträge mit optionalem Grund melden
- report-Tabelle wieder im Schema (kompatibel zur bestehenden auf PROD)
- POST /api/entry/{pid}/report, nur angemeldet, speichert Melder-uid;
erneutes Melden legt keine zweite offene Meldung an
- "Melden" auf der Beitragsseite für fremde, nicht gelöschte Beiträge
- Test und API-Doku
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
2bae608d76
commit
80c333cd58
@@ -550,6 +550,52 @@ func TestSoftDelete(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestReport(t *testing.T) {
|
||||
srv := newTestServer(t)
|
||||
alice := registerAndLogin(t, srv, "alice")
|
||||
bob := registerAndLogin(t, srv, "bob")
|
||||
pid := createEntry(t, alice, srv, "strittig")
|
||||
|
||||
report := func(c *http.Client, pid int64, reason string) int {
|
||||
resp := postForm(t, c, fmt.Sprintf("%s/api/entry/%d/report", srv.URL, pid), url.Values{"reason": {reason}})
|
||||
resp.Body.Close()
|
||||
return resp.StatusCode
|
||||
}
|
||||
openReports := func() (n int) {
|
||||
if err := db.QueryRow(`SELECT count(*) FROM report WHERE pid = $1 AND handled = 0`, pid).Scan(&n); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
if got := report(newClient(t), pid, ""); got != http.StatusUnauthorized {
|
||||
t.Fatalf("anon report: erwartet 401, bekam %d", got)
|
||||
}
|
||||
if got := report(bob, pid, " Spam "); got != http.StatusOK {
|
||||
t.Fatalf("report: erwartet 200, bekam %d", got)
|
||||
}
|
||||
var reason string
|
||||
db.QueryRow(`SELECT reason FROM report WHERE pid = $1`, pid).Scan(&reason)
|
||||
if reason != "Spam" {
|
||||
t.Fatalf("grund: %q", reason)
|
||||
}
|
||||
|
||||
// Erneut melden legt keine zweite offene Meldung an, ein anderer Nutzer schon.
|
||||
report(bob, pid, "")
|
||||
report(alice, pid, "")
|
||||
if n := openReports(); n != 2 {
|
||||
t.Fatalf("offene meldungen: erwartet 2, bekam %d", n)
|
||||
}
|
||||
|
||||
if got := report(bob, 999999, ""); got != http.StatusNotFound {
|
||||
t.Fatalf("report unbekannt: erwartet 404, bekam %d", got)
|
||||
}
|
||||
postForm(t, alice, fmt.Sprintf("%s/api/entry/%d/delete", srv.URL, pid), url.Values{}).Body.Close()
|
||||
if got := report(bob, pid, ""); got != http.StatusNotFound {
|
||||
t.Fatalf("report gelöscht: erwartet 404, bekam %d", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestRenameUser(t *testing.T) {
|
||||
srv := newTestServer(t)
|
||||
alice := registerAndLogin(t, srv, "alice")
|
||||
|
||||
Reference in New Issue
Block a user