@@ -161,6 +161,48 @@ func (c *fakeClient) Delete(ctx context.Context, obj runtime.Object, opts ...cli
161
161
return c .tracker .Delete (gvr , accessor .GetNamespace (), accessor .GetName ())
162
162
}
163
163
164
+ func (c * fakeClient ) DeleteCollection (ctx context.Context , obj runtime.Object , opts ... client.DeleteCollectionOptionFunc ) error {
165
+ gvk , err := apiutil .GVKForObject (obj , scheme .Scheme )
166
+ if err != nil {
167
+ return err
168
+ }
169
+
170
+ if ! strings .HasSuffix (gvk .Kind , "List" ) {
171
+ return fmt .Errorf ("non-list type %T (kind %q) passed as input" , obj , gvk )
172
+ }
173
+ // we need the non-list GVK, so chop off the "List" from the end of the kind
174
+ gvk .Kind = gvk .Kind [:len (gvk .Kind )- 4 ]
175
+
176
+ dcOptions := client.DeleteCollectionOptions {}
177
+ dcOptions .ApplyOptions (opts )
178
+
179
+ gvr , _ := meta .UnsafeGuessKindToResource (gvk )
180
+ o , err := c .tracker .List (gvr , gvk , dcOptions .Namespace )
181
+ if err != nil {
182
+ return err
183
+ }
184
+
185
+ objs , err := meta .ExtractList (o )
186
+ if err != nil {
187
+ return err
188
+ }
189
+ filteredObjs , err := objectutil .FilterWithLabels (objs , dcOptions .LabelSelector )
190
+ if err != nil {
191
+ return err
192
+ }
193
+ for _ , o := range filteredObjs {
194
+ accessor , err := meta .Accessor (o )
195
+ if err != nil {
196
+ return err
197
+ }
198
+ err = c .tracker .Delete (gvr , accessor .GetNamespace (), accessor .GetName ())
199
+ if err != nil {
200
+ return err
201
+ }
202
+ }
203
+ return nil
204
+ }
205
+
164
206
func (c * fakeClient ) Update (ctx context.Context , obj runtime.Object ) error {
165
207
gvr , err := getGVRFromObject (obj , c .scheme )
166
208
if err != nil {
0 commit comments