diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go index bb0fc2d96214ab71b19f39ce5a8a0d2766533efe..1ebd0a9933e72ab85622d39e86bf06e6421d8975 100644 --- a/pkg/setup/collection.go +++ b/pkg/setup/collection.go @@ -139,16 +139,17 @@ func (s *Setup) InstallCollection(ctx context.Context, c CollectionConfig) (setS collection.SpaceID, collection.EnvID = s.SpaceID, s.EnvironmentID var exist *collections.Collection - // isForce - не удалять коллекцию, если она уже существует + exist, err = s.content.Collections.Get(ctx, collection.SpaceID, collection.EnvID, collection.ID) if err != nil && !strings.Contains(err.Error(), collections.ErrNotFound.Error()) { return false, err } - if c.metadata != nil { + if !collection.IsView() { for k, v := range c.metadata { collection.Schema.WithMetadata(k, v) } + //setMD = true } if exist == nil { @@ -158,10 +159,11 @@ func (s *Setup) InstallCollection(ctx context.Context, c CollectionConfig) (setS return false, err } } else { - if collection.Schema.Metadata != nil && exist.Schema.Metadata[extension.ExtensionMetadataKey] != collection.Schema.Metadata[extension.ExtensionMetadataKey] && !s.IsForce() { - return false, ErrCollectionAlreadyExists + if !collection.IsView() && !exist.IsView() { + if collection.Schema.Metadata != nil && exist.Schema.Metadata[extension.ExtensionMetadataKey] != collection.Schema.Metadata[extension.ExtensionMetadataKey] && !s.IsForce() { + return false, ErrCollectionAlreadyExists + } } - var upd bool collection, upd, setSchema = c.UpdateFn(s, exist, c.collection) if upd { diff --git a/pkg/setup/collection_test.go b/pkg/setup/collection_test.go index a3a6bafa3cfa0e874e3374c33f0e6fe94cfd8ca2..f23aa2b4949d79605c39e356aafe1592c616301f 100644 --- a/pkg/setup/collection_test.go +++ b/pkg/setup/collection_test.go @@ -137,6 +137,37 @@ func TestSetup_InstallCollections(t *testing.T) { co: SetSchemaMetadata("extension", "test-extension"), force: true, }, + { + name: "Update exist view collection with the same id", + collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata("extension", "test-extension")}}, + collectionsCall: func(svc *mockscollections.Collections) { + svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp2", EnvID: environments.DefaultEnvironment, CollectionID: "2"}}, nil).Once() + svc.On("Update", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata("extension", "test-extension")}).Return(nil).Once() + svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String()).WithMetadata("extension", "test-extension")).Return(nil).Once() + }, + envsCall: func(svc *envmocks.Environments) { + svc.On("Migrate", mock.Anything, "sp", "env", &environments.MigrateOptions{Wait: true}).Return(nil).Once() + }, + wantErr: func(t *testing.T, err error) { + assert.NoError(t, err) + }, + co: SetSchemaMetadata("extension", "test-extension"), + }, + { + 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"}}}, + collectionsCall: func(svc *mockscollections.Collections) { + svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp2", EnvID: environments.DefaultEnvironment, CollectionID: "2"}}, nil).Once() + svc.On("Update", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp3", EnvID: environments.DefaultEnvironment, CollectionID: "3"}}).Return(nil).Once() + }, + envsCall: func(svc *envmocks.Environments) { + svc.On("Migrate", mock.Anything, "sp", "env", &environments.MigrateOptions{Wait: true}).Return(nil).Once() + }, + wantErr: func(t *testing.T, err error) { + assert.NoError(t, err) + }, + co: SetSchemaMetadata("extension", "test-extension"), + }, } for _, tt := range tests {