From facddf27211460016743582bacb73950a608567f Mon Sep 17 00:00:00 2001
From: ko_oler <kooler89@gmail.com>
Date: Thu, 20 Jul 2023 15:26:15 +0300
Subject: [PATCH] =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=BF?=
 =?UTF-8?q?=D0=BE=20=D0=9F=D0=A0:=20-=20alwaysSetSchema=20=D0=B2=D1=8B?=
 =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D0=B0=20=D0=B2=20=D0=BA=D0=BE?=
 =?UTF-8?q?=D0=BD=D1=81=D1=82=D0=B0=D0=BD=D1=82=D1=83=20-=20revert=20?=
 =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=BD=D0=BE=D0=B3=D0=BE=20?=
 =?UTF-8?q?=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D1=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/setup/collection.go      | 17 +++++++++++------
 pkg/setup/collection_test.go |  4 ++--
 pkg/setup/setup_test.go      | 10 +++++-----
 3 files changed, 18 insertions(+), 13 deletions(-)

diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go
index 2d4cd1c3..8ffd87a0 100644
--- a/pkg/setup/collection.go
+++ b/pkg/setup/collection.go
@@ -19,6 +19,11 @@ var (
 	ErrUninstallCollections = errors.New("failed to uninstall collections")
 )
 
+// todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений
+const (
+	AlwaysSetSchema = true
+)
+
 type CollectionsOption func(c *CollectionConfig)
 type UpdateCollectionFn func(s *Setup, exist, new *collections.Collection) (coll *collections.Collection, upd bool, setSchema bool, err error)
 type DeleteCollectionFn func(s *Setup, col *collections.Collection) (bool, error)
@@ -73,11 +78,7 @@ func DeleteCollectionIfRemove() CollectionsOption {
 func DefaultUpdateCollectionStrategy() CollectionsOption {
 	return func(c *CollectionConfig) {
 		c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) {
-
-			//todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений
-			alwaysSetSchema := true
-
-			if !alwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && collection.Schema.Metadata != nil && collection.Schema.Metadata[extension.ExtensionMetadataKey] != "" {
+			if !AlwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && collection.Schema.Metadata != nil && collection.Schema.Metadata[extension.ExtensionMetadataKey] != "" {
 				if exist.Schema.Metadata == nil || exist.Schema.Metadata[extension.ExtensionMetadataKey] != collection.Schema.Metadata[extension.ExtensionMetadataKey] {
 					return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+
 						"уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID)
@@ -92,7 +93,11 @@ func DefaultUpdateCollectionStrategy() CollectionsOption {
 			update = collection.Name != exist.Name || collection.IsSingle() != exist.IsSingle() || collection.IsSystem() != exist.IsSystem() ||
 				collection.IsNoData() != exist.IsNoData() || collection.Hidden != exist.Hidden || collection.IsView() != exist.IsView() && data.ElementsMatch(exist.Tags, collection.Tags)
 
-			setSchema = alwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
+			if exist.View != nil && collection.View != nil {
+				update = update && *exist.View == *collection.View
+			}
+
+			setSchema = AlwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
 
 			return collection, update, setSchema, nil
 		}
diff --git a/pkg/setup/collection_test.go b/pkg/setup/collection_test.go
index e82ea773..cea12baf 100644
--- a/pkg/setup/collection_test.go
+++ b/pkg/setup/collection_test.go
@@ -108,7 +108,7 @@ func TestSetup_InstallCollections(t *testing.T) {
 				assert.NoError(t, err)
 			},
 		},
-		//todo после удаления флага alwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
+		//todo после удаления флага AlwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
 		//{
 		//name:        "Fail to update user collection with same id as in extensions collection",
 		//collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}},
@@ -151,7 +151,7 @@ func TestSetup_InstallCollections(t *testing.T) {
 				assert.NoError(t, err)
 			},
 		},
-		//todo после удаления флага alwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
+		//todo после удаления флага AlwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован
 		//{
 		//	name:        "Update view collection with the same id to new view collection",
 		//	collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp3", EnvID: environments.DefaultEnvironment, CollectionID: "3"}}},
diff --git a/pkg/setup/setup_test.go b/pkg/setup/setup_test.go
index e722041e..01dc4d9f 100644
--- a/pkg/setup/setup_test.go
+++ b/pkg/setup/setup_test.go
@@ -179,7 +179,7 @@ func TestSetupInstall(t *testing.T) {
 
 	t.Run("Success, update existing records", func(t *testing.T) {
 		envMocks := &environmentMock.Environments{}
-		//todo после удаления флага alwaysSetSchema убрать лишний вызов
+		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
 		envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
 			Return(nil).Once()
 
@@ -187,7 +187,7 @@ func TestSetupInstall(t *testing.T) {
 		collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
 			Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once()
 		collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
-		//todo после удаления флага alwaysSetSchema убрать лишний вызов
+		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
 		collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
 
 		rMock := &rolesMock.Roles{}
@@ -245,7 +245,7 @@ func TestSetupInstall(t *testing.T) {
 	})
 
 	t.Run("Success, with force", func(t *testing.T) {
-		//todo после удаления флага alwaysSetSchema убрать лишний вызов
+		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
 		envMocks := &environmentMock.Environments{}
 		envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
 			Return(nil).Once()
@@ -254,7 +254,7 @@ func TestSetupInstall(t *testing.T) {
 		collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
 			Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once()
 		collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
-		//todo после удаления флага alwaysSetSchema убрать лишний вызов
+		//todo после удаления флага AlwaysSetSchema убрать лишний вызов
 		collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
 
 		rMock := &rolesMock.Roles{}
@@ -290,7 +290,7 @@ func TestSetupInstall(t *testing.T) {
 			Clients:     clMock,
 			Roles:       rMock,
 			Items:       itmMock,
-			//todo после удаления флага alwaysSetSchema убрать
+			//todo после удаления флага AlwaysSetSchema убрать
 			Environments: envMocks,
 		}, t)
 		setup = setup.WithForce(true)
-- 
GitLab