Skip to content
Snippets Groups Projects
Commit 278b2cbc authored by Pavel Antonov's avatar Pavel Antonov :asterisk:
Browse files

feat(extensions): При установке расширения больше не перезаписывают...

feat(extensions): При установке расширения больше не перезаписывают конфликтные схемы коллекций. (Удален временный флаг _alwaysSetSchema в Setup)

Close #PRXS-1472
parents 4b1fdca3 53cb3583
No related branches found
No related tags found
No related merge requests found
...@@ -19,11 +19,6 @@ var ( ...@@ -19,11 +19,6 @@ var (
ErrUninstallCollections = errors.New("failed to uninstall collections") ErrUninstallCollections = errors.New("failed to uninstall collections")
) )
// todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений
const (
_alwaysSetSchema = true
)
type CollectionsOption func(c *CollectionConfig) type CollectionsOption func(c *CollectionConfig)
type UpdateCollectionFn func(s *Setup, exist, new *collections.Collection) (coll *collections.Collection, upd bool, setSchema bool, err error) 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) type DeleteCollectionFn func(s *Setup, col *collections.Collection) (bool, error)
...@@ -90,7 +85,7 @@ func isMetadataExtensionEqual(s1, s2 *schema.Schema) bool { ...@@ -90,7 +85,7 @@ func isMetadataExtensionEqual(s1, s2 *schema.Schema) bool {
func DefaultUpdateCollectionStrategy() CollectionsOption { func DefaultUpdateCollectionStrategy() CollectionsOption {
return func(c *CollectionConfig) { return func(c *CollectionConfig) {
c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) { c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) {
if !_alwaysSetSchema && !s.IsForce() && !collection.IsView() && !exist.IsView() && !isMetadataExtensionEqual(collection.Schema, exist.Schema) { if !s.IsForce() && !collection.IsView() && !exist.IsView() && !isMetadataExtensionEqual(collection.Schema, exist.Schema) {
return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+ return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+
"уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID) "уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID)
} }
...@@ -107,7 +102,7 @@ func DefaultUpdateCollectionStrategy() CollectionsOption { ...@@ -107,7 +102,7 @@ func DefaultUpdateCollectionStrategy() CollectionsOption {
update = update && *exist.View == *collection.View update = update && *exist.View == *collection.View
} }
setSchema = !collection.IsView() && (_alwaysSetSchema || !reflect.DeepEqual(exist.Schema, collection.Schema)) setSchema = !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
return collection, update, setSchema, nil return collection, update, setSchema, nil
} }
......
...@@ -122,18 +122,17 @@ func TestSetup_InstallCollections(t *testing.T) { ...@@ -122,18 +122,17 @@ func TestSetup_InstallCollections(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
}, },
}, },
//todo после удаления флага _alwaysSetSchema данный тест будет работать, сейчас он будет всегда падать, поэтому пока закомментирован {
//{ name: "Fail to update user collection with same id as in extensions collection",
//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")}},
//collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}}, collectionsCall: func(svc *mockscollections.Collections) {
//collectionsCall: func(svc *mockscollections.Collections) { svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String())}, nil).Once()
// svc.On("Get", mock.Anything, "sp", "env", "1").Return(&collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String())}, nil).Once() },
//}, wantErr: func(t *testing.T, err error) {
//wantErr: func(t *testing.T, err error) { assert.Error(t, err)
// assert.Error(t, err) assert.ErrorIs(t, err, collections.ErrAlreadyExists)
// assert.ErrorIs(t, err, collections.ErrAlreadyExists) },
//}, },
//},
{ {
name: "Update user collection with same id as in extensions collection with force", name: "Update user collection with same id as in extensions collection with force",
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}}, collections: []*collections.Collection{{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}},
......
...@@ -178,16 +178,10 @@ func TestSetupInstall(t *testing.T) { ...@@ -178,16 +178,10 @@ func TestSetupInstall(t *testing.T) {
t.Run("Success, update existing records", func(t *testing.T) { t.Run("Success, update existing records", func(t *testing.T) {
envMocks := &environmentMock.Environments{} envMocks := &environmentMock.Environments{}
//todo после удаления флага _alwaysSetSchema убрать лишний вызов
envMocks.On("Migrate", mock.Anything, spaceID, envID).
Return(nil).Once()
collsMock := &collectionMock.Collections{} collsMock := &collectionMock.Collections{}
collsMock.On("Get", mock.Anything, spaceID, envID, "coll1"). collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once() 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() collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
//todo после удаления флага _alwaysSetSchema убрать лишний вызов
collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
rMock := &rolesMock.Roles{} rMock := &rolesMock.Roles{}
for _, role := range getRoles() { for _, role := range getRoles() {
...@@ -244,17 +238,10 @@ func TestSetupInstall(t *testing.T) { ...@@ -244,17 +238,10 @@ func TestSetupInstall(t *testing.T) {
}) })
t.Run("Success, with force", func(t *testing.T) { t.Run("Success, with force", func(t *testing.T) {
//todo после удаления флага _alwaysSetSchema убрать лишний вызов
envMocks := &environmentMock.Environments{}
envMocks.On("Migrate", mock.Anything, spaceID, envID).
Return(nil).Once()
collsMock := &collectionMock.Collections{} collsMock := &collectionMock.Collections{}
collsMock.On("Get", mock.Anything, spaceID, envID, "coll1"). collsMock.On("Get", mock.Anything, spaceID, envID, "coll1").
Return(&collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция старая"}, nil).Once() 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() collsMock.On("Update", mock.Anything, &collections.Collection{ID: "coll1", SpaceID: spaceID, EnvID: envID, Schema: schema.New(), Name: "Коллекция"}).Return(nil).Once()
//todo после удаления флага _alwaysSetSchema убрать лишний вызов
collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
rMock := &rolesMock.Roles{} rMock := &rolesMock.Roles{}
for _, role := range getRoles() { for _, role := range getRoles() {
...@@ -289,8 +276,6 @@ func TestSetupInstall(t *testing.T) { ...@@ -289,8 +276,6 @@ func TestSetupInstall(t *testing.T) {
Clients: clMock, Clients: clMock,
Roles: rMock, Roles: rMock,
Items: itmMock, Items: itmMock,
//todo после удаления флага _alwaysSetSchema убрать
Environments: envMocks,
}, t) }, t)
setup = setup.WithForce(true) setup = setup.WithForce(true)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment