diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go index 7f2e1821725bbd9632e383c322af99fb51c6ec8a..cee9d6203091efdb18f4d484efd8be4eb093a7da 100644 --- a/pkg/setup/collection.go +++ b/pkg/setup/collection.go @@ -22,7 +22,7 @@ var ( // todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений const ( - alwaysSetSchema = true + _alwaysSetSchema = true ) type CollectionsOption func(c *CollectionConfig) @@ -76,24 +76,22 @@ func DeleteCollectionIfRemove() CollectionsOption { } } -func isCollsSchemaMetadataEqual(s1, s2 *schema.Schema) bool { +func isMetadataExtensionEqual(s1, s2 *schema.Schema) bool { if s1.Metadata == nil && s2.Metadata == nil { return true } - if s1.Metadata != nil && s1.Metadata[extension.ExtensionMetadataKey] != "" { - if s2.Metadata == nil || s2.Metadata[extension.ExtensionMetadataKey] != s1.Metadata[extension.ExtensionMetadataKey] { - return false - } + if s1.Metadata == nil || s2.Metadata == nil { + return false } - return true + return s1.Metadata[extension.ExtensionMetadataKey] == s2.Metadata[extension.ExtensionMetadataKey] } func DefaultUpdateCollectionStrategy() CollectionsOption { return func(c *CollectionConfig) { c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) { - if !alwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && !isCollsSchemaMetadataEqual(collection.Schema, exist.Schema) { + if !_alwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && !isMetadataExtensionEqual(collection.Schema, exist.Schema) { return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+ "уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID) } @@ -110,7 +108,7 @@ func DefaultUpdateCollectionStrategy() CollectionsOption { update = update && *exist.View == *collection.View } - setSchema = alwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema) + 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 2c8cea2babc8a7b0e9bf83e6bf71fb012a2d6a9d..a88dad0a29cee06f6cfd116a204038ccefda5595 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"}}}, @@ -202,44 +202,3 @@ func TestSetup_InstallCollections(t *testing.T) { }) } } - -func Test_isCollsSchemaMetadataEqual(t *testing.T) { - type args struct { - } - tests := []struct { - name string - s1 *schema.Schema - s2 *schema.Schema - want bool - }{ - { - "Not equal #1 (no metadata)", - schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"), - schema.New("name", field.String()), - false, - }, - { - "Not equal #2 (different metadata)", - schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"), - schema.New("name", field.String()).WithMetadata("test", "test"), - false, - }, - { - "Equal #1 (no metadata)", - schema.New("name", field.String()), - schema.New("name", field.String()), - true, - }, - { - "Equal #2 (equal metadata)", - schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"), - schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test"), - true, - }, - } - for _, tt := range tests { - t.Run(tt.name, func(t *testing.T) { - assert.Equalf(t, tt.want, isCollsSchemaMetadataEqual(tt.s1, tt.s2), "isCollsSchemaMetadataEqual(%v, %v)", tt.s1, tt.s2) - }) - } -} diff --git a/pkg/setup/setup_test.go b/pkg/setup/setup_test.go index e722041e1d48629f72307a41b7661388b87846a2..6a1b6f7ba6884fa2f09a826a08a695219b23e142 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)