Skip to content

Commit f10e99a

Browse files
authored
Add test for API field validation (#5071)
1 parent fb7b2f7 commit f10e99a

File tree

1 file changed

+80
-0
lines changed

1 file changed

+80
-0
lines changed

internal/api/api_test.go

+80
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
// SPDX-FileCopyrightText: Copyright 2024 The Minder Authors
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package api
5+
6+
import (
7+
"context"
8+
"testing"
9+
10+
"github.com/google/uuid"
11+
"github.com/stretchr/testify/require"
12+
"google.golang.org/grpc/codes"
13+
"google.golang.org/grpc/status"
14+
"google.golang.org/protobuf/proto"
15+
16+
"github.com/mindersec/minder/internal/util/ptr"
17+
v1 "github.com/mindersec/minder/pkg/api/protobuf/go/minder/v1"
18+
)
19+
20+
func TestProtoValidationInterceptor(t *testing.T) {
21+
t.Parallel()
22+
23+
tests := []struct {
24+
name string
25+
req proto.Message
26+
errMsg string
27+
errCode codes.Code
28+
}{
29+
{
30+
name: "valid request",
31+
req: &v1.GetProviderRequest{
32+
Context: &v1.Context{
33+
Project: ptr.Ptr(uuid.New().String()),
34+
},
35+
Name: "valid-name",
36+
},
37+
},
38+
{
39+
name: "invalid request",
40+
req: &v1.GetProviderRequest{
41+
Context: &v1.Context{
42+
Project: ptr.Ptr(uuid.New().String()),
43+
},
44+
Name: "-?invalid",
45+
},
46+
errMsg: "Validation failed:\n- Field 'name': value does not match regex pattern",
47+
errCode: codes.InvalidArgument,
48+
},
49+
}
50+
51+
validator, err := NewValidator()
52+
require.NoError(t, err)
53+
54+
interceptor := ProtoValidationInterceptor(validator)
55+
56+
for _, tt := range tests {
57+
tt := tt
58+
59+
t.Run(tt.name, func(t *testing.T) {
60+
t.Parallel()
61+
62+
handler := func(_ context.Context, _ interface{}) (interface{}, error) {
63+
return "response", nil
64+
}
65+
resp, err := interceptor(context.Background(), tt.req, nil, handler)
66+
if tt.errMsg != "" {
67+
require.Error(t, err)
68+
require.Nil(t, resp)
69+
st, ok := status.FromError(err)
70+
require.True(t, ok)
71+
require.Equal(t, tt.errCode, st.Code())
72+
require.Contains(t, st.Message(), tt.errMsg)
73+
return
74+
}
75+
76+
require.NoError(t, err)
77+
require.Equal(t, "response", resp)
78+
})
79+
}
80+
}

0 commit comments

Comments
 (0)