Skip to content
Snippets Groups Projects
Commit d38dacdb authored by ko_oler's avatar ko_oler
Browse files

Добавлен временный флаг для вызова метода SetSchema, с целью обновления всех...

Добавлен временный флаг для вызова метода SetSchema, с целью обновления всех коллекции расширений для установки в них метадаты
parent 1f002744
No related branches found
No related tags found
No related merge requests found
......@@ -73,9 +73,14 @@ func DeleteCollectionIfRemove() CollectionsOption {
func DefaultUpdateCollectionStrategy() CollectionsOption {
return func(c *CollectionConfig) {
c.UpdateFn = func(s *Setup, exist, collection *collections.Collection) (*collections.Collection, bool, bool, error) {
if !s.IsForce() && !collection.IsView() && !exist.IsView() && collection.Schema.Metadata != nil && collection.Schema.Metadata[extension.ExtensionMetadataKey] != "" {
//todo добавлено в релизе v0.0.16: временный флаг для установки метадаты во все коллекции расширений
alwaysSetSchema := true
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, collections.ErrAlreadyExists
return nil, false, false, errors.WithDetailf(collections.ErrAlreadyExists, "Коллекция с идентификатором '%s' "+
"уже существует. Удалите ее или вызовите установку расширения с флагом Force", collection.ID)
}
}
......@@ -87,10 +92,7 @@ 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)
if exist.View != nil && collection.View != nil {
update = update && *exist.View == *collection.View
}
setSchema = !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
setSchema = alwaysSetSchema || !collection.IsView() && !reflect.DeepEqual(exist.Schema, collection.Schema)
return collection, update, setSchema, nil
}
......
......@@ -99,7 +99,7 @@ func TestSetup_InstallCollections(t *testing.T) {
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()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}, nil).Once()
svc.On("Update", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env", Schema: schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")}).Return(nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String())).Return(nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String()).WithMetadata(extension.ExtensionMetadataKey, "test-extension")).Return(nil).Once()
},
envsCall: func(svc *envmocks.Environments) {
svc.On("Migrate", mock.Anything, "sp", "env", &environments.MigrateOptions{Wait: true}).Return(nil).Once()
......@@ -108,17 +108,18 @@ func TestSetup_InstallCollections(t *testing.T) {
assert.NoError(t, err)
},
},
{
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")}},
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()
},
wantErr: func(t *testing.T, err error) {
assert.Error(t, err)
assert.ErrorIs(t, err, collections.ErrAlreadyExists)
},
},
//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")}},
//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()
//},
//wantErr: func(t *testing.T, err error) {
// assert.Error(t, err)
// assert.ErrorIs(t, err, collections.ErrAlreadyExists)
//},
//},
{
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")}},
......@@ -150,20 +151,21 @@ func TestSetup_InstallCollections(t *testing.T) {
assert.NoError(t, err)
},
},
{
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)
},
},
//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"}}},
// 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)
// },
//},
{
name: "Fail to install collection on migrate",
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}},
......
......@@ -179,11 +179,16 @@ func TestSetupInstall(t *testing.T) {
t.Run("Success, update existing records", func(t *testing.T) {
envMocks := &environmentMock.Environments{}
//todo после удаления флага alwaysSetSchema убрать лишний вызов
envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
Return(nil).Once()
collsMock := &collectionMock.Collections{}
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 убрать лишний вызов
collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
rMock := &rolesMock.Roles{}
for _, role := range getRoles() {
......@@ -240,10 +245,17 @@ func TestSetupInstall(t *testing.T) {
})
t.Run("Success, with force", func(t *testing.T) {
//todo после удаления флага alwaysSetSchema убрать лишний вызов
envMocks := &environmentMock.Environments{}
envMocks.On("Migrate", mock.Anything, spaceID, envID, &environments.MigrateOptions{Wait: true}).
Return(nil).Once()
collsMock := &collectionMock.Collections{}
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 убрать лишний вызов
collsMock.On("SetSchema", mock.Anything, "sp", "env", "coll1", schema.New()).Return(nil).Once()
rMock := &rolesMock.Roles{}
for _, role := range getRoles() {
......@@ -278,6 +290,8 @@ func TestSetupInstall(t *testing.T) {
Clients: clMock,
Roles: rMock,
Items: itmMock,
//todo после удаления флага alwaysSetSchema убрать
Environments: envMocks,
}, t)
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