diff --git a/controllers/suite_test.go b/controllers/suite_test.go index f814299..07cc06c 100644 --- a/controllers/suite_test.go +++ b/controllers/suite_test.go @@ -101,6 +101,9 @@ var _ = BeforeSuite(func(done Done) { }, 60) var _ = AfterSuite(func() { + // Remove remnent resources + util.DeleteAllSlackChannels(ns) + By("tearing down the test environment") err := testEnv.Stop() Expect(err).ToNot(HaveOccurred()) diff --git a/controllers/util/testUtil.go b/controllers/util/testUtil.go index 1e1babf..55e9f96 100644 --- a/controllers/util/testUtil.go +++ b/controllers/util/testUtil.go @@ -2,11 +2,13 @@ package util import ( "context" + "fmt" "math/rand" "time" - ginko "github.com/onsi/ginkgo" + ginkgo "github.com/onsi/ginkgo" slackv1alpha1 "github.com/stakater/slack-operator/api/v1alpha1" + mockdata "github.com/stakater/slack-operator/pkg/slack/mock" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/types" "sigs.k8s.io/controller-runtime/pkg/client" @@ -35,14 +37,14 @@ func (t *TestUtil) CreateChannel(name string, isPrivate bool, topic string, desc err := t.k8sClient.Create(t.ctx, channelObject) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } req := reconcile.Request{NamespacedName: types.NamespacedName{Name: name, Namespace: namespace}} _, err = t.r.Reconcile(req) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } return channelObject @@ -54,7 +56,7 @@ func (t *TestUtil) GetChannel(name string, namespace string) *slackv1alpha1.Chan err := t.k8sClient.Get(t.ctx, types.NamespacedName{Name: name, Namespace: namespace}, channelObject) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } return channelObject @@ -66,20 +68,20 @@ func (t *TestUtil) DeleteChannel(name string, namespace string) { err := t.k8sClient.Get(t.ctx, types.NamespacedName{Name: name, Namespace: namespace}, channelObject) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } err = t.k8sClient.Delete(t.ctx, channelObject) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } req := reconcile.Request{NamespacedName: types.NamespacedName{Name: name, Namespace: namespace}} _, err = t.r.Reconcile(req) if err != nil { - ginko.Fail(err.Error()) + ginkgo.Fail(err.Error()) } } @@ -92,6 +94,38 @@ func (t *TestUtil) TryDeleteChannel(name string, namespace string) { _, _ = t.r.Reconcile(req) } +// DeleteAllSlackChannels delete all the slack channels in the namespace +func (t *TestUtil) DeleteAllSlackChannels(namespace string) { + // Specify namespace in list Options + listOptions := &client.ListOptions{Namespace: namespace} + + // List channels in a specified namespace + channelList := &slackv1alpha1.ChannelList{} + err := t.k8sClient.List(context.TODO(), channelList, listOptions) + if err != nil { + ginkgo.Fail(err.Error()) + } + + for _, channel := range channelList.Items { + channel.Finalizers = []string{} + + err := t.k8sClient.Update(t.ctx, &channel) + if err != nil { + if err.Error() == fmt.Sprintf(mockdata.ChannelObjectModifiedError, channel.Name) { + currentChannel := t.GetChannel(channel.Name, namespace) + currentChannel.Finalizers = []string{} + if err != nil { + ginkgo.Fail(err.Error()) + } + } else { + ginkgo.Fail(err.Error()) + } + } + + t.TryDeleteChannel(channel.Name, namespace) + } +} + // CreateSlackChannelObject creates a slack channel custom resource object func (t *TestUtil) CreateSlackChannelObject(name string, isPrivate bool, topic string, description string, users []string, namespace string) *slackv1alpha1.Channel { return &slackv1alpha1.Channel{ diff --git a/pkg/slack/mock/data.go b/pkg/slack/mock/data.go index 63dc04d..6186da5 100644 --- a/pkg/slack/mock/data.go +++ b/pkg/slack/mock/data.go @@ -7,6 +7,8 @@ import ( "github.com/slack-go/slack" ) +var ChannelObjectModifiedError = "Operation cannot be fulfilled on channels.slack.stakater.com \"%s\": the object has been modified; please apply your changes to the latest version and try again" + var ConversationName = "bat-channel" var NameTakenConversationName = "name-taken" var PublicConversationID = "C0EAQDV4Z"