Skip to content

Commit eeb42d5

Browse files
Emyrkkylecarbs
authored andcommitted
test: Pagination api query param parsing (#2127)
* test: Pagination api query param parsing
1 parent 9a7f6f6 commit eeb42d5

File tree

1 file changed

+121
-0
lines changed

1 file changed

+121
-0
lines changed

coderd/pagination_internal_test.go

Lines changed: 121 additions & 0 deletions
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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy