@@ -14,8 +14,13 @@ import (
14
14
15
15
"github.com/openmfp/golang-commons/logger"
16
16
gatewayv1alpha1 "github.com/openmfp/kubernetes-graphql-gateway/common/apis/v1alpha1"
17
+ "github.com/openmfp/kubernetes-graphql-gateway/common/config"
17
18
"github.com/openmfp/kubernetes-graphql-gateway/common/mocks"
19
+ "github.com/openmfp/kubernetes-graphql-gateway/listener/reconciler"
18
20
"github.com/openmfp/kubernetes-graphql-gateway/listener/reconciler/clusteraccess"
21
+ "k8s.io/apimachinery/pkg/runtime"
22
+ "k8s.io/client-go/rest"
23
+ ctrl "sigs.k8s.io/controller-runtime"
19
24
)
20
25
21
26
func TestCheckClusterAccessCRDStatus (t * testing.T ) {
@@ -92,22 +97,90 @@ func TestCreateMultiClusterReconciler(t *testing.T) {
92
97
93
98
tests := []struct {
94
99
name string
100
+ setupMocks func () * mocks.MockClient
95
101
wantErr bool
96
102
errContains string
97
103
}{
98
104
{
99
- name : "success" ,
105
+ name : "success" ,
106
+ setupMocks : func () * mocks.MockClient {
107
+ mockClient := mocks .NewMockClient (t )
108
+ // Mock successful CRD check
109
+ mockClient .EXPECT ().List (mock .Anything , mock .AnythingOfType ("*v1alpha1.ClusterAccessList" )).
110
+ RunAndReturn (func (ctx context.Context , list client.ObjectList , opts ... client.ListOption ) error {
111
+ clusterAccessList := list .(* gatewayv1alpha1.ClusterAccessList )
112
+ clusterAccessList .Items = []gatewayv1alpha1.ClusterAccess {
113
+ {
114
+ ObjectMeta : metav1.ObjectMeta {Name : "test-cluster" },
115
+ Spec : gatewayv1alpha1.ClusterAccessSpec {
116
+ Host : "https://test.example.com" ,
117
+ },
118
+ },
119
+ }
120
+ return nil
121
+ }).Once ()
122
+ return mockClient
123
+ },
100
124
wantErr : false ,
101
125
},
126
+ {
127
+ name : "crd_not_registered" ,
128
+ setupMocks : func () * mocks.MockClient {
129
+ mockClient := mocks .NewMockClient (t )
130
+ // Mock CRD not found
131
+ mockClient .EXPECT ().List (mock .Anything , mock .AnythingOfType ("*v1alpha1.ClusterAccessList" )).
132
+ Return (& meta.NoResourceMatchError {
133
+ PartialResource : schema.GroupVersionResource {
134
+ Group : "gateway.openmfp.org" ,
135
+ Version : "v1alpha1" ,
136
+ Resource : "clusteraccesses" ,
137
+ },
138
+ }).Once ()
139
+ return mockClient
140
+ },
141
+ wantErr : true ,
142
+ errContains : "ClusterAccess CRD not registered" ,
143
+ },
102
144
}
103
145
104
146
for _ , tt := range tests {
105
147
t .Run (tt .name , func (t * testing.T ) {
106
- // TODO: Fix this test - CreateMultiClusterReconciler function doesn't exist
107
- // reconciler, err := clusteraccess.CreateMultiClusterReconciler(opts, mockLogger)
108
- // require.NoError(t, err)
109
- // require.NotNil(t, reconciler)
110
- _ = mockLogger // Use mockLogger to avoid unused variable warning
148
+ mockClient := tt .setupMocks ()
149
+
150
+ // Test the actual NewClusterAccessReconciler function
151
+ ctx := context .Background ()
152
+ appCfg := config.Config {
153
+ OpenApiDefinitionsPath : "/tmp/test" ,
154
+ }
155
+ opts := reconciler.ReconcilerOpts {
156
+ Config : & rest.Config {Host : "https://test-api-server.com" },
157
+ Scheme : runtime .NewScheme (),
158
+ Client : mockClient ,
159
+ ManagerOpts : ctrl.Options {
160
+ Scheme : runtime .NewScheme (),
161
+ },
162
+ OpenAPIDefinitionsPath : "/tmp/test" ,
163
+ }
164
+
165
+ reconciler , err := clusteraccess .NewClusterAccessReconciler (
166
+ ctx ,
167
+ appCfg ,
168
+ opts ,
169
+ nil , // ioHandler - will be created internally
170
+ nil , // schemaResolver - will be created internally
171
+ mockLogger ,
172
+ )
173
+
174
+ if tt .wantErr {
175
+ assert .Error (t , err )
176
+ if tt .errContains != "" {
177
+ assert .Contains (t , err .Error (), tt .errContains )
178
+ }
179
+ assert .Nil (t , reconciler )
180
+ } else {
181
+ assert .NoError (t , err )
182
+ assert .NotNil (t , reconciler )
183
+ }
111
184
})
112
185
}
113
186
}
0 commit comments