Files
ttstd-infinite-canvas/backend/internal/handler/agent_run_pagination_test.go
2026-09-24 11:31:09 +08:00

64 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package handler
import (
"net/http/httptest"
"testing"
"github.com/gin-gonic/gin"
)
// 运行详情分页参数(?sinceSeq= / ?eventLimit=)。合法值按原样进入视图选项,
// 非法或越界一律拒绝:静默夹取会让客户端以为拿到的是它请求的那一页,
// 从而把缺口当成"没有更多记录"。
func TestAgentRunViewOptionsParsesPaginationQuery(t *testing.T) {
gin.SetMode(gin.TestMode)
for _, testCase := range []struct {
query string
wantSinceSeq, wantEventLimit int
}{
{query: "", wantSinceSeq: 0, wantEventLimit: 0},
{query: "?sinceSeq=0", wantSinceSeq: 0, wantEventLimit: 0},
{query: "?sinceSeq=12", wantSinceSeq: 12, wantEventLimit: 0},
{query: "?eventLimit=1", wantSinceSeq: 0, wantEventLimit: 1},
{query: "?eventLimit=500", wantSinceSeq: 0, wantEventLimit: 500},
{query: "?sinceSeq=12&eventLimit=50", wantSinceSeq: 12, wantEventLimit: 50},
{query: "?sinceSeq=%203%20&eventLimit=%207%20", wantSinceSeq: 3, wantEventLimit: 7},
} {
t.Run(testCase.query, func(t *testing.T) {
request := httptest.NewRequest("GET", "/api/agent/runs/run-1"+testCase.query, nil)
context, _ := gin.CreateTestContext(httptest.NewRecorder())
context.Request = request
options, err := agentRunViewOptions(context)
if err != nil {
t.Fatalf("%s 被拒绝: %v", testCase.query, err)
}
if options.SinceSeq != testCase.wantSinceSeq || options.EventLimit != testCase.wantEventLimit {
t.Fatalf("%s 解析为 %+v,期望 sinceSeq=%d eventLimit=%d", testCase.query, options, testCase.wantSinceSeq, testCase.wantEventLimit)
}
})
}
}
func TestAgentRunViewOptionsRejectsInvalidPaginationQuery(t *testing.T) {
gin.SetMode(gin.TestMode)
for _, query := range []string{
"?sinceSeq=abc",
"?sinceSeq=-1",
"?sinceSeq=1.5",
"?sinceSeq=99999999999999999999",
"?eventLimit=0",
"?eventLimit=501",
"?eventLimit=-5",
"?eventLimit=abc",
} {
t.Run(query, func(t *testing.T) {
request := httptest.NewRequest("GET", "/api/agent/runs/run-1"+query, nil)
context, _ := gin.CreateTestContext(httptest.NewRecorder())
context.Request = request
if options, err := agentRunViewOptions(context); err == nil {
t.Fatalf("%s 未被拒绝,解析为 %+v", query, options)
}
})
}
}