internal/control/cursor_test.go
39 lines · 1206 bytes
1package control
2
3import "testing"
4
5func TestCursorRoundTrip(t *testing.T) {
6 cur := encodeCursor("issue", "42")
7 key, err := decodeCursor("issue", cur)
8 if err != nil || key != "42" {
9 t.Fatalf("decode = %q, %v", key, err)
10 }
11 if _, err := decodeCursor("mr", cur); err == nil {
12 t.Fatal("cursor accepted under the wrong kind")
13 }
14 if _, err := decodeCursor("issue", "not base64!"); err == nil {
15 t.Fatal("garbage cursor accepted")
16 }
17 if _, err := decodeCursor("issue", encodeCursor("issue", "")); err == nil {
18 t.Fatal("empty key accepted")
19 }
20}
21
22func TestTrimPage(t *testing.T) {
23 key := func(n int) string { return "k" }
24 // No probe row: page as-is, no next.
25 items, next := trimPage(page{limit: 3}, []int{1, 2, 3}, "issue", key)
26 if len(items) != 3 || next != "" {
27 t.Fatalf("full page: %v next=%q", items, next)
28 }
29 // Probe row present: trimmed, next minted.
30 items, next = trimPage(page{limit: 2}, []int{1, 2, 3}, "issue", key)
31 if len(items) != 2 || next == "" {
32 t.Fatalf("trimmed page: %v next=%q", items, next)
33 }
34 // Unpaged: untouched.
35 items, next = trimPage(page{}, []int{1, 2, 3}, "issue", key)
36 if len(items) != 3 || next != "" {
37 t.Fatalf("unpaged: %v next=%q", items, next)
38 }
39}