@@ -51,6 +51,7 @@ type versionedTracker struct {
51
51
type fakeClient struct {
52
52
tracker versionedTracker
53
53
scheme * runtime.Scheme
54
+ restMapper meta.RESTMapper
54
55
schemeWriteLock sync.Mutex
55
56
}
56
57
@@ -87,6 +88,7 @@ func NewClientBuilder() *ClientBuilder {
87
88
// ClientBuilder builds a fake client.
88
89
type ClientBuilder struct {
89
90
scheme * runtime.Scheme
91
+ restMapper meta.RESTMapper
90
92
initObject []client.Object
91
93
initLists []client.ObjectList
92
94
initRuntimeObjects []runtime.Object
@@ -99,6 +101,15 @@ func (f *ClientBuilder) WithScheme(scheme *runtime.Scheme) *ClientBuilder {
99
101
return f
100
102
}
101
103
104
+ // WithRESTMapper sets this builder's restMapper.
105
+ // The restMapper is directly set as mapper in the Client. This can be used for example
106
+ // with a meta.DefaultRESTMapper to provide a static rest mapping.
107
+ // If not set, defaults to an empty meta.DefaultRESTMapper.
108
+ func (f * ClientBuilder ) WithRESTMapper (restMapper meta.RESTMapper ) * ClientBuilder {
109
+ f .restMapper = restMapper
110
+ return f
111
+ }
112
+
102
113
// WithObjects can be optionally used to initialize this fake client with client.Object(s).
103
114
func (f * ClientBuilder ) WithObjects (initObjs ... client.Object ) * ClientBuilder {
104
115
f .initObject = append (f .initObject , initObjs ... )
@@ -122,6 +133,9 @@ func (f *ClientBuilder) Build() client.WithWatch {
122
133
if f .scheme == nil {
123
134
f .scheme = scheme .Scheme
124
135
}
136
+ if f .restMapper == nil {
137
+ f .restMapper = meta .NewDefaultRESTMapper ([]schema.GroupVersion {})
138
+ }
125
139
126
140
tracker := versionedTracker {ObjectTracker : testing .NewObjectTracker (f .scheme , scheme .Codecs .UniversalDecoder ()), scheme : f .scheme }
127
141
for _ , obj := range f .initObject {
@@ -140,8 +154,9 @@ func (f *ClientBuilder) Build() client.WithWatch {
140
154
}
141
155
}
142
156
return & fakeClient {
143
- tracker : tracker ,
144
- scheme : f .scheme ,
157
+ tracker : tracker ,
158
+ scheme : f .scheme ,
159
+ restMapper : f .restMapper ,
145
160
}
146
161
}
147
162
@@ -417,8 +432,7 @@ func (c *fakeClient) Scheme() *runtime.Scheme {
417
432
}
418
433
419
434
func (c * fakeClient ) RESTMapper () meta.RESTMapper {
420
- // TODO: Implement a fake RESTMapper.
421
- return nil
435
+ return c .restMapper
422
436
}
423
437
424
438
func (c * fakeClient ) Create (ctx context.Context , obj client.Object , opts ... client.CreateOption ) error {
0 commit comments