39 lines
1.8 KiB
Go
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)
|
|
}
|
|
}
|
|
}
|