Files
past-go/past-go/internal/handler/admin_subscribe_test.go
T

39 lines
1.8 KiB
Go

package handler
import (
"database/sql/driver"
"past/internal/testdb"
"strings"
"testing"
)
func TestAdminSubscribeLogsFilteredServerPagination(t *testing.T) {
filters := []any{"failed", "diary_create", "%recipient%", "%recipient%", "%recipient%", "2026-10-01", "2026-10-12"}
predicate := "l.status = ? AND l.action_type = ? AND (l.to_openid LIKE ? OR recipient.nickname LIKE ? OR recipient.user_id LIKE ?) AND l.created_at >= ? AND l.created_at < ?"
c, out, _ := permissionCtx(t, "GET", "/api/admin_subscribe_logs?status=failed&action_type=diary_create&keyword=recipient&start_date=2026-10-01&end_date=2026-10-11&page=2&page_size=10", "", []testdb.Step{
{Match: "SELECT COUNT(*) AS total", Args: filters, Check: func(q string, _ []any) error {
if !strings.Contains(q, predicate) {
t.Errorf("wrong filters %s", q)
}
return nil
}, Columns: []string{"total"}, Rows: [][]driver.Value{{int64(21)}}},
{Match: "ORDER BY l.id DESC LIMIT ? OFFSET ?", Args: append(filters, int64(10), int64(10)), Columns: []string{"id", "to_openid", "status", "error_msg"}, Rows: [][]driver.Value{{int64(11), "recipient-openid", "failed", "用户未订阅"}}},
})
adminSubscribeLogs(c)
for _, want := range []string{`"total":21`, `"total_pages":3`, `"page":2`, `recipient-openid`, `用户未订阅`} {
if !strings.Contains(out.Body.String(), want) {
t.Fatalf("missing %s: %s", want, out.Body.String())
}
}
}
func TestAdminSubscribeLogsRejectsInvalidFilters(t *testing.T) {
for _, query := range []string{"status=invalid", "start_date=2026-02-30", "start_date=2026-10-12&end_date=2026-10-01"} {
c, out, _ := permissionCtx(t, "GET", "/api/admin_subscribe_logs?"+query, "", nil)
adminSubscribeLogs(c)
if out.Code != 400 {
t.Fatalf("invalid filters accepted: %s", query)
}
}
}