internal/control/cursor_test.go

8e6fc2062ca26f7a848bdf6ad6345fd345351231
gitbay/internal/control/cursor_test.go history · blame · raw

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}