From bc52b51dd972c00e855efed9086215e4d938460a Mon Sep 17 00:00:00 2001
From: Valera Shaitorov <shaitorov@perx.ru>
Date: Mon, 26 Jun 2023 17:13:55 +0700
Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?=
 =?UTF-8?q?=D0=B0=20=D0=BE=D1=82=D1=81=D1=83=D1=82=D1=81=D0=B2=D0=B8=D1=8F?=
 =?UTF-8?q?=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=20=D0=BA=D0=BE?=
 =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BE=D0=B3=D0=BE=20=D0=BF=D1=8B=D1=82=D0=B0?=
 =?UTF-8?q?=D0=B5=D0=BC=D1=81=D1=8F=20=D1=83=D0=B4=D0=B0=D0=BB=D0=B8=D1=82?=
 =?UTF-8?q?=D1=8C?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/setup/client.go     |  4 +++-
 pkg/setup/setup_test.go | 52 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+), 1 deletion(-)

diff --git a/pkg/setup/client.go b/pkg/setup/client.go
index 98fa6a0e..cc103faf 100644
--- a/pkg/setup/client.go
+++ b/pkg/setup/client.go
@@ -182,7 +182,9 @@ func (s *Setup) UninstallClients(ctx context.Context) error {
 
 func (s *Setup) UninstallClient(ctx context.Context, c ClientConfig) error {
 	if c.DeleteFn(s, c.client) {
-		return s.content.Clients.Delete(ctx, s.SpaceID, c.client.ID)
+		if err := s.content.Clients.Delete(ctx, s.SpaceID, c.client.ID); err != nil && !strings.Contains(err.Error(), clients.ErrNotFound.Error()) {
+			return err
+		}
 	}
 	return nil
 }
diff --git a/pkg/setup/setup_test.go b/pkg/setup/setup_test.go
index 979e2905..162c5188 100644
--- a/pkg/setup/setup_test.go
+++ b/pkg/setup/setup_test.go
@@ -822,6 +822,58 @@ func TestSetupUninstall(t *testing.T) {
 		itmMock.AssertExpectations(t)
 	})
 
+	t.Run("Remove, with clients NotFound error", func(t *testing.T) {
+		collsMock := &collectionMock.Collections{}
+		for _, collection := range getCollections() {
+			collsMock.On("Delete", mock.Anything, spaceID, envID, collection.ID).
+				Return(nil).
+				Once()
+		}
+
+		rMock := &rolesMock.Roles{}
+		for _, role := range getRoles() {
+			rMock.On("Delete", mock.Anything, spaceID, role.ID).
+				Return(nil).
+				Once()
+		}
+
+		clMock := &clientsMock.Clients{}
+		clMock.On("Delete", mock.Anything, spaceID, mock.Anything).
+			Return(clients.ErrNotFound).
+			Once()
+
+		itmMock := &itemsMock.Items{}
+		for _, act := range getActions() {
+			itmMock.On("Delete", mock.Anything, mock.Anything).Run(func(args mock.Arguments) {
+				del := args[1].(*items.Item)
+				require.Equal(t, spaceID, del.SpaceID)
+				require.Equal(t, envID, del.EnvID)
+				require.Equal(t, extension.ActionsCollectionID, del.CollectionID)
+				require.Equal(t, act.ID, del.ID)
+			}).
+				Return(nil).
+				Once()
+		}
+
+		setup := newSetup(&content.Content{
+			Collections: collsMock,
+			Clients:     clMock,
+			Roles:       rMock,
+			Items:       itmMock,
+		}, t)
+
+		setup = setup.WithRemove(true)
+		err := setup.Uninstall(context.Background())
+
+		require.NoError(t, err)
+		require.False(t, setup.HasErrors())
+
+		rMock.AssertExpectations(t)
+		collsMock.AssertExpectations(t)
+		clMock.AssertExpectations(t)
+		itmMock.AssertExpectations(t)
+	})
+
 	t.Run("Can't uninstall clients, storage returns error", func(t *testing.T) {
 		rMock := &rolesMock.Roles{}
 
-- 
GitLab