1
1
package apischema
2
2
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
+ }
4
52
5
53
// Compile-time check that ResolverProvider implements Resolver interface
6
54
var _ Resolver = (* ResolverProvider )(nil )
@@ -13,3 +61,73 @@ func TestNewResolverNotNil(t *testing.T) {
13
61
t .Fatal ("NewResolver() returned nil, expected non-nil *ResolverProvider" )
14
62
}
15
63
}
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