Skip to content

Commit 41f7d51

Browse files
committed
Added DeleteCollection to the fake.Client
1 parent b608e66 commit 41f7d51

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed

pkg/client/fake/client.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,48 @@ func (c *fakeClient) Delete(ctx context.Context, obj runtime.Object, opts ...cli
161161
return c.tracker.Delete(gvr, accessor.GetNamespace(), accessor.GetName())
162162
}
163163

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+
164206
func (c *fakeClient) Update(ctx context.Context, obj runtime.Object) error {
165207
gvr, err := getGVRFromObject(obj, c.scheme)
166208
if err != nil {

pkg/client/fake/client_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,18 @@ var _ = Describe("Fake client", func() {
154154
Expect(list.Items).To(HaveLen(1))
155155
Expect(list.Items).To(ConsistOf(*dep2))
156156
})
157+
158+
It("should be able to Delete a Collection", func() {
159+
By("Deleting a deploymentList")
160+
err := cl.DeleteCollection(nil, &appsv1.DeploymentList{})
161+
Expect(err).To(BeNil())
162+
163+
By("Listing all deployments in the namespace")
164+
list := &appsv1.DeploymentList{}
165+
err = cl.List(nil, list, client.InNamespace("ns1"))
166+
Expect(err).To(BeNil())
167+
Expect(list.Items).To(BeEmpty())
168+
})
157169
}
158170

159171
Context("with default scheme.Scheme", func() {

0 commit comments

Comments
 (0)