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

Skip to content

Commit c73414e

Browse files
committed
add more unit tests
1 parent e24f574 commit c73414e

File tree

2 files changed

+125
-1
lines changed

2 files changed

+125
-1
lines changed

coderd/httpapi/queryparams.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ func ParseCustom[T any](parser *QueryParamParser, vals url.Values, def T, queryP
107107
if err != nil {
108108
parser.Errors = append(parser.Errors, Error{
109109
Field: queryParam,
110-
Detail: fmt.Sprintf("Query param %q has invalid value: %q", queryParam, err.Error()),
110+
Detail: fmt.Sprintf("Query param %q has invalid value: %s", queryParam, err.Error()),
111111
})
112112
}
113113
return v

coderd/users_internal_test.go

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package coderd
2+
3+
import (
4+
"fmt"
5+
"strings"
6+
"testing"
7+
8+
"github.com/coder/coder/coderd/database"
9+
"github.com/coder/coder/coderd/rbac"
10+
11+
"github.com/stretchr/testify/require"
12+
)
13+
14+
func TestSearchUsers(t *testing.T) {
15+
t.Parallel()
16+
testCases := []struct {
17+
Name string
18+
Query string
19+
Expected database.GetUsersParams
20+
ExpectedErrorContains string
21+
}{
22+
{
23+
Name: "Empty",
24+
Query: "",
25+
Expected: database.GetUsersParams{},
26+
},
27+
{
28+
Name: "Username",
29+
Query: "user-name",
30+
Expected: database.GetUsersParams{
31+
Search: "user-name",
32+
Status: []database.UserStatus{},
33+
RbacRole: []string{},
34+
},
35+
},
36+
{
37+
Name: "Username+Param",
38+
Query: "usEr-name stAtus:actiVe",
39+
Expected: database.GetUsersParams{
40+
Search: "user-name",
41+
Status: []database.UserStatus{database.UserStatusActive},
42+
RbacRole: []string{},
43+
},
44+
},
45+
{
46+
Name: "OnlyParams",
47+
Query: "status:acTIve sEArch:User-Name role:Admin",
48+
Expected: database.GetUsersParams{
49+
Search: "user-name",
50+
Status: []database.UserStatus{database.UserStatusActive},
51+
RbacRole: []string{rbac.RoleAdmin()},
52+
},
53+
},
54+
{
55+
Name: "QuotedParam",
56+
Query: `status:SuSpenDeD sEArch:"User Name" role:meMber`,
57+
Expected: database.GetUsersParams{
58+
Search: "user name",
59+
Status: []database.UserStatus{database.UserStatusSuspended},
60+
RbacRole: []string{rbac.RoleMember()},
61+
},
62+
},
63+
{
64+
Name: "QuotedKey",
65+
Query: `"status":acTIve "sEArch":User-Name "role":Admin`,
66+
Expected: database.GetUsersParams{
67+
Search: "user-name",
68+
Status: []database.UserStatus{database.UserStatusActive},
69+
RbacRole: []string{rbac.RoleAdmin()},
70+
},
71+
},
72+
{
73+
// This will not return an error
74+
Name: "ExtraKeys",
75+
Query: `foo:bar`,
76+
Expected: database.GetUsersParams{
77+
Search: "",
78+
Status: []database.UserStatus{},
79+
RbacRole: []string{},
80+
},
81+
},
82+
{
83+
// Quotes keep elements together
84+
Name: "QuotedSpecial",
85+
Query: `search:"user:name"`,
86+
Expected: database.GetUsersParams{
87+
Search: "user:name",
88+
Status: []database.UserStatus{},
89+
RbacRole: []string{},
90+
},
91+
},
92+
93+
// Failures
94+
{
95+
Name: "ExtraColon",
96+
Query: `search:name:extra`,
97+
ExpectedErrorContains: "can only contain 1 ':'",
98+
},
99+
{
100+
Name: "InvalidStatus",
101+
Query: "status:inActive",
102+
ExpectedErrorContains: "status: Query param \"status\" has invalid value: \"inactive\" is not a valid user status\n",
103+
},
104+
}
105+
106+
for _, c := range testCases {
107+
c := c
108+
t.Run(c.Name, func(t *testing.T) {
109+
t.Parallel()
110+
values, errs := userSearchQuery(c.Query)
111+
if c.ExpectedErrorContains != "" {
112+
require.True(t, len(errs) > 0, "expect some errors")
113+
var s strings.Builder
114+
for _, err := range errs {
115+
_, _ = s.WriteString(fmt.Sprintf("%s: %s\n", err.Field, err.Detail))
116+
}
117+
require.Contains(t, s.String(), c.ExpectedErrorContains)
118+
} else {
119+
require.Len(t, errs, 0, "expected no error")
120+
require.Equal(t, c.Expected, values, "expected values")
121+
}
122+
})
123+
}
124+
}

0 commit comments

Comments
 (0)