Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit a391572

Browse files
authored
test: Pagination api query param parsing (#2127)
* test: Pagination api query param parsing
1 parent b87096b commit a391572

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

coderd/pagination_internal_test.go

+121
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,121 @@
1+
package coderd
2+
3+
import (
4+
"encoding/json"
5+
"net/http"
6+
"net/http/httptest"
7+
"testing"
8+
9+
"github.com/google/uuid"
10+
"github.com/stretchr/testify/require"
11+
12+
"github.com/coder/coder/codersdk"
13+
)
14+
15+
func TestPagination(t *testing.T) {
16+
t.Parallel()
17+
testCases := []struct {
18+
Name string
19+
20+
AfterID string
21+
Limit string
22+
Offset string
23+
24+
ExpectedError string
25+
ExpectedParams codersdk.Pagination
26+
}{
27+
{
28+
Name: "BadAfterID",
29+
AfterID: "bogus",
30+
ExpectedError: "Query param 'after_id' must be a valid UUID",
31+
},
32+
{
33+
Name: "ShortAfterID",
34+
AfterID: "ff22a7b-bb6f-43d8-83e1-eefe0a1f5197",
35+
ExpectedError: "Query param 'after_id' must be a valid UUID",
36+
},
37+
{
38+
Name: "LongAfterID",
39+
AfterID: "cff22a7b-bb6f-43d8-83e1-eefe0a1f51972",
40+
ExpectedError: "Query param 'after_id' must be a valid UUID",
41+
},
42+
{
43+
Name: "BadLimit",
44+
Limit: "bogus",
45+
ExpectedError: "Query param 'limit' must be a valid integer",
46+
},
47+
{
48+
Name: "BadOffset",
49+
Offset: "bogus",
50+
ExpectedError: "Query param 'offset' must be a valid integer",
51+
},
52+
53+
// Valid values
54+
{
55+
Name: "ValidAllParams",
56+
AfterID: "d6c1c331-bfc8-44ef-a0d2-d2294be6195a",
57+
Offset: "100",
58+
Limit: "50",
59+
ExpectedParams: codersdk.Pagination{
60+
AfterID: uuid.MustParse("d6c1c331-bfc8-44ef-a0d2-d2294be6195a"),
61+
Limit: 50,
62+
Offset: 100,
63+
},
64+
},
65+
{
66+
Name: "ValidLimit",
67+
Limit: "50",
68+
ExpectedParams: codersdk.Pagination{
69+
AfterID: uuid.Nil,
70+
Limit: 50,
71+
},
72+
},
73+
{
74+
Name: "ValidOffset",
75+
Offset: "150",
76+
ExpectedParams: codersdk.Pagination{
77+
AfterID: uuid.Nil,
78+
Offset: 150,
79+
Limit: -1,
80+
},
81+
},
82+
{
83+
Name: "ValidAfterID",
84+
AfterID: "5f2005fc-acc4-4e5e-a7fa-be017359c60b",
85+
ExpectedParams: codersdk.Pagination{
86+
AfterID: uuid.MustParse("5f2005fc-acc4-4e5e-a7fa-be017359c60b"),
87+
Limit: -1,
88+
},
89+
},
90+
}
91+
92+
for _, c := range testCases {
93+
c := c
94+
t.Run(c.Name, func(t *testing.T) {
95+
t.Parallel()
96+
rw := httptest.NewRecorder()
97+
r, err := http.NewRequest("GET", "https://example.com", nil)
98+
require.NoError(t, err, "new request")
99+
100+
// Set query params
101+
query := r.URL.Query()
102+
query.Set("after_id", c.AfterID)
103+
query.Set("limit", c.Limit)
104+
query.Set("offset", c.Offset)
105+
r.URL.RawQuery = query.Encode()
106+
107+
params, ok := parsePagination(rw, r)
108+
if c.ExpectedError == "" {
109+
require.True(t, ok, "expect ok")
110+
require.Equal(t, c.ExpectedParams, params, "expected params")
111+
} else {
112+
require.False(t, ok, "expect !ok")
113+
require.Equal(t, http.StatusBadRequest, rw.Code, "bad request status code")
114+
var apiError codersdk.Error
115+
err := json.NewDecoder(rw.Body).Decode(&apiError)
116+
require.NoError(t, err, "decode response")
117+
require.Contains(t, apiError.Message, c.ExpectedError, "expected error")
118+
}
119+
})
120+
}
121+
}

0 commit comments

Comments
 (0)