Skip to content

Commit 308e374

Browse files
committed
fix: increased coverage for apischema/resolver
1 parent 43bb1a2 commit 308e374

File tree

1 file changed

+119
-1
lines changed

1 file changed

+119
-1
lines changed

listener/apischema/resolver_test.go

Lines changed: 119 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,54 @@
11
package apischema
22

3-
import "testing"
3+
import (
4+
"testing"
5+
6+
"k8s.io/apimachinery/pkg/api/meta"
7+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
8+
"k8s.io/apimachinery/pkg/runtime/schema"
9+
"k8s.io/client-go/openapi"
10+
11+
"github.com/openmfp/kubernetes-graphql-gateway/listener/kcp/mocks"
12+
)
13+
14+
type resolverMockOpenAPIClient struct {
15+
paths map[string]openapi.GroupVersion
16+
err error
17+
}
18+
19+
type mockRESTMapper struct{}
20+
21+
func (m *resolverMockOpenAPIClient) Paths() (map[string]openapi.GroupVersion, error) {
22+
return m.paths, m.err
23+
}
24+
25+
func (m *mockRESTMapper) KindFor(resource schema.GroupVersionResource) (schema.GroupVersionKind, error) {
26+
return schema.GroupVersionKind{}, nil
27+
}
28+
29+
func (m *mockRESTMapper) KindsFor(resource schema.GroupVersionResource) ([]schema.GroupVersionKind, error) {
30+
return nil, nil
31+
}
32+
33+
func (m *mockRESTMapper) ResourceFor(input schema.GroupVersionResource) (schema.GroupVersionResource, error) {
34+
return schema.GroupVersionResource{}, nil
35+
}
36+
37+
func (m *mockRESTMapper) ResourcesFor(input schema.GroupVersionResource) ([]schema.GroupVersionResource, error) {
38+
return nil, nil
39+
}
40+
41+
func (m *mockRESTMapper) RESTMapping(gk schema.GroupKind, versions ...string) (*meta.RESTMapping, error) {
42+
return nil, nil
43+
}
44+
45+
func (m *mockRESTMapper) RESTMappings(gk schema.GroupKind, versions ...string) ([]*meta.RESTMapping, error) {
46+
return nil, nil
47+
}
48+
49+
func (m *mockRESTMapper) ResourceSingularizer(resource string) (singular string, err error) {
50+
return "", nil
51+
}
452

553
// Compile-time check that ResolverProvider implements Resolver interface
654
var _ Resolver = (*ResolverProvider)(nil)
@@ -13,3 +61,73 @@ func TestNewResolverNotNil(t *testing.T) {
1361
t.Fatal("NewResolver() returned nil, expected non-nil *ResolverProvider")
1462
}
1563
}
64+
65+
// TestResolverProvider_Resolve tests the Resolve method of the ResolverProvider struct.
66+
func TestResolverProvider_Resolve(t *testing.T) {
67+
tests := []struct {
68+
name string
69+
preferredResources []*metav1.APIResourceList
70+
err error
71+
openAPIPaths map[string]openapi.GroupVersion
72+
openAPIErr error
73+
wantErr bool
74+
}{
75+
{
76+
name: "discovery error",
77+
err: ErrGetServerPreferred,
78+
openAPIPaths: map[string]openapi.GroupVersion{
79+
"/api/v1": &fakeGV{},
80+
},
81+
wantErr: true,
82+
},
83+
{
84+
name: "successful resolution",
85+
preferredResources: []*metav1.APIResourceList{
86+
{
87+
GroupVersion: "v1",
88+
APIResources: []metav1.APIResource{
89+
{
90+
Name: "pods",
91+
Kind: "Pod",
92+
Namespaced: true,
93+
},
94+
},
95+
},
96+
},
97+
openAPIPaths: map[string]openapi.GroupVersion{
98+
"/api/v1": &fakeGV{},
99+
},
100+
wantErr: false,
101+
},
102+
}
103+
104+
for _, tt := range tests {
105+
t.Run(tt.name, func(t *testing.T) {
106+
resolver := NewResolver()
107+
dc := mocks.NewMockDiscoveryInterface(t)
108+
109+
// First call in resolveSchema
110+
dc.EXPECT().ServerPreferredResources().Return(tt.preferredResources, tt.err)
111+
112+
// These calls are only made if ServerPreferredResources succeeds
113+
if tt.err == nil {
114+
openAPIClient := &resolverMockOpenAPIClient{
115+
paths: tt.openAPIPaths,
116+
err: tt.openAPIErr,
117+
}
118+
dc.EXPECT().OpenAPIV3().Return(openAPIClient)
119+
}
120+
121+
rm := &mockRESTMapper{}
122+
123+
got, err := resolver.Resolve(dc, rm)
124+
if (err != nil) != tt.wantErr {
125+
t.Errorf("Resolver.Resolve() error = %v, wantErr %v", err, tt.wantErr)
126+
return
127+
}
128+
if !tt.wantErr && got == nil {
129+
t.Error("Resolver.Resolve() returned nil result when no error expected")
130+
}
131+
})
132+
}
133+
}

0 commit comments

Comments
 (0)