diff --git a/pkg/content/content.go b/pkg/content/content.go index 1d351e9308da0ea2c81f8afa80fb2be219c633ea..29abfb45e47b9551333a928caba541ee57bd7d6c 100644 --- a/pkg/content/content.go +++ b/pkg/content/content.go @@ -39,7 +39,7 @@ type Content struct { } const ( - DBVersion uint32 = 2 + DBVersion uint32 = 3 ) func (c *Content) RegisterStart(svc interface{}) { diff --git a/pkg/setup/collection.go b/pkg/setup/collection.go index d61ba14d18f2d8bc93d2a535392b8b608ba6e2d0..4b339d5542e24c604f4ed9fe0c726c5d1cdafb49 100644 --- a/pkg/setup/collection.go +++ b/pkg/setup/collection.go @@ -139,6 +139,13 @@ func (s *Setup) InstallCollection(ctx context.Context, c CollectionConfig) (setS } } else { var upd bool + + if _, ok := collection.Schema.Metadata["extension"]; ok { + if _, ok := exist.Schema.Metadata["extension"]; !ok { + return false, errors.WithHint(errors.New("fail to update collection"), "collection has the same id as extension's collection, change yours collection id") + } + } + collection, upd, setSchema = c.UpdateFn(s, exist, c.collection) if upd { if err = s.content.Collections.Update(ctx, collection); err != nil { diff --git a/pkg/setup/collection_test.go b/pkg/setup/collection_test.go index 433aa7397d450f8226a95af032a7cd177697fbed..a6a3b5e0738413f8bec8c788d5036c65b393bc40 100644 --- a/pkg/setup/collection_test.go +++ b/pkg/setup/collection_test.go @@ -91,6 +91,31 @@ func TestSetup_InstallCollections(t *testing.T) { assert.Contains(t, errors.GetDetail(err), "Возникла ошибка при настройке коллекции space(1)") }, }, + { + name: "Update extension collection with metadata", + collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}}, + collectionsCall: func(svc *mockscollections.Collections) { + svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}, nil).Once() + svc.On("Update", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}).Return(nil).Once() + svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String())).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) + }, + }, + { + name: "Fail to update collection with the same id", + collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("name", field.String()).Field, Metadata: map[string]string{"extension": "tasks"}}}}, + collectionsCall: func(svc *mockscollections.Collections) { + svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: &schema.Schema{Field: schema.New("surname", field.String()).Field}}, nil).Once() + }, + wantErr: func(t *testing.T, err error) { + assert.Error(t, err) + }, + }, } for _, tt := range tests {