From 5324ef3c456d8563cebac93beb401f485d8b2c83 Mon Sep 17 00:00:00 2001 From: Alex Petraky <petraky@perx.ru> Date: Wed, 11 Sep 2024 08:21:06 +0000 Subject: [PATCH] =?UTF-8?q?fix(setup):=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=B2=20Setup=20=D0=BF=D1=80=D0=B8=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B4=D0=B0=D1=87=D0=B5=20=D0=BE=D0=BF=D1=86=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B8=D0=B7-=D0=B7=D0=B0=20=D0=BA=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=B9=20=D0=BD=D0=B5=20=D1=81=D0=BE=D1=85=D1=80?= =?UTF-8?q?=D0=B0=D0=BD=D1=8F=D0=BB=D0=B0=D1=81=D1=8C=20=D1=84=D0=BE=D1=80?= =?UTF-8?q?=D0=BC=D0=B8=D1=80=D1=83=D0=B5=D0=BC=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Close #PRXS-2824 --- pkg/setup/config.go | 18 +++++----- pkg/setup/config_test.go | 71 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+), 9 deletions(-) create mode 100644 pkg/setup/config_test.go diff --git a/pkg/setup/config.go b/pkg/setup/config.go index 08e1c740..bdf47aed 100644 --- a/pkg/setup/config.go +++ b/pkg/setup/config.go @@ -67,10 +67,10 @@ func (cfg *Config) MustLoad(fsys fs.FS) *Config { } func (cfg *Config) WithCollectionOptions(filter func(c *collections.Collection) bool, opts ...CollectionsOption) *Config { - for _, c := range cfg.Collections { + for i, c := range cfg.Collections { if filter(c.collection) { for _, o := range opts { - o(&c) + o(&cfg.Collections[i]) } } } @@ -78,10 +78,10 @@ func (cfg *Config) WithCollectionOptions(filter func(c *collections.Collection) } func (cfg *Config) WithItemsOptions(filter func(c *items.Item) bool, opts ...ItemsOption) *Config { - for _, i := range cfg.Items { - if filter(i.item) { + for i, c := range cfg.Items { + if filter(c.item) { for _, o := range opts { - o(&i) + o(&cfg.Items[i]) } } } @@ -89,10 +89,10 @@ func (cfg *Config) WithItemsOptions(filter func(c *items.Item) bool, opts ...Ite } func (cfg *Config) WithRolesOptions(filter func(c *roles.Role) bool, opts ...RolesOption) *Config { - for _, r := range cfg.Roles { + for i, r := range cfg.Roles { if filter(r.role) { for _, o := range opts { - o(&r) + o(&cfg.Roles[i]) } } } @@ -100,10 +100,10 @@ func (cfg *Config) WithRolesOptions(filter func(c *roles.Role) bool, opts ...Rol } func (cfg *Config) WithClientsOptions(filter func(c *clients.Client) bool, opts ...ClientsOption) *Config { - for _, c := range cfg.Clients { + for i, c := range cfg.Clients { if filter(c.client) { for _, o := range opts { - o(&c) + o(&cfg.Clients[i]) } } } diff --git a/pkg/setup/config_test.go b/pkg/setup/config_test.go new file mode 100644 index 00000000..7e5c1589 --- /dev/null +++ b/pkg/setup/config_test.go @@ -0,0 +1,71 @@ +package setup + +import ( + "testing" + + "git.perx.ru/perxis/perxis-go/pkg/clients" + "git.perx.ru/perxis/perxis-go/pkg/collections" + "git.perx.ru/perxis/perxis-go/pkg/items" + "git.perx.ru/perxis/perxis-go/pkg/roles" + "github.com/stretchr/testify/assert" +) + +func TestConfig_WithCollectionOptions(t *testing.T) { + t.Run("With filter", func(t *testing.T) { + // создаем конфигурацию + config := &Config{Collections: []CollectionConfig{ + {collection: &collections.Collection{ID: "1", SpaceID: "sp", EnvID: "env"}}, + {collection: &collections.Collection{ID: "2", SpaceID: "sp", EnvID: "env"}}, + }} + + // применяем опцию OverwriteCollection к конфигурации и дополнительно добавляем фильтр (опция применится только к коллекции с id 1) + config.WithCollectionOptions(func(c *collections.Collection) bool { return c.ID == "1" }, OverwriteCollection()) + assert.NotNil(t, config.Collections[0].UpdateFn, "должна быть выполнена OverwriteCollection и установлена UpdateFn для коллекции ID:1") + assert.Nil(t, config.Collections[1].UpdateFn) + }) +} + +func TestConfig_WithItemsOptions(t *testing.T) { + t.Run("With filter", func(t *testing.T) { + // создаем конфигурацию + config := &Config{Items: []ItemConfig{ + {item: &items.Item{ID: "1", SpaceID: "sp", EnvID: "env", CollectionID: "coll"}}, + {item: &items.Item{ID: "2", SpaceID: "sp", EnvID: "env", CollectionID: "coll"}}, + }} + + // применяем опцию OverwriteItem к конфигурации и дополнительно добавляем фильтр (опция применится только к коллекции с id 1) + config.WithItemsOptions(func(c *items.Item) bool { return c.ID == "1" }, OverwriteItem()) + assert.NotNil(t, config.Items[0].UpdateFn, "должна быть выполнена OverwriteItem и установлена UpdateFn для элемента ID: 1") + assert.Nil(t, config.Items[1].UpdateFn) + }) +} + +func TestConfig_WithRoleOptions(t *testing.T) { + t.Run("With filter", func(t *testing.T) { + // создаем конфигурацию + config := &Config{Roles: []RoleConfig{ + {role: &roles.Role{ID: "1", SpaceID: "sp"}}, + {role: &roles.Role{ID: "2", SpaceID: "sp"}}, + }} + + // применяем опцию OverwriteRole к конфигурации и дополнительно добавляем фильтр (опция применится только к коллекции с id 1) + config.WithRolesOptions(func(c *roles.Role) bool { return c.ID == "1" }, OverwriteRole()) + assert.NotNil(t, config.Roles[0].UpdateFn, "должна быть выполнена опция OverwriteRole") + assert.Nil(t, config.Roles[1].UpdateFn) + }) +} + +func TestConfig_WithClientOptions(t *testing.T) { + t.Run("With filter", func(t *testing.T) { + // создаем конфигурацию + config := &Config{Clients: []ClientConfig{ + {client: &clients.Client{ID: "1", SpaceID: "sp"}}, + {client: &clients.Client{ID: "2", SpaceID: "sp"}}, + }} + + // применяем опцию OverwriteClient к конфигурации и дополнительно добавляем фильтр (опция применится только к коллекции с id 1) + config.WithClientsOptions(func(c *clients.Client) bool { return c.ID == "1" }, OverwriteClient()) + assert.NotNil(t, config.Clients[0].UpdateFn, "должна выполнена опция OverwriteClient") + assert.Nil(t, config.Clients[1].UpdateFn) + }) +} -- GitLab