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

Merge branch 'master' into feature/PRXS-1726-RulesFieldsChangeNames

parents b9e64592 88a7df56
No related branches found
No related tags found
No related merge requests found
......@@ -90,24 +90,24 @@ var (
)
type Action struct {
Extension string `mapstructure:"extension,omitempty"` // Расширение
Action string `mapstructure:"action,omitempty"` // Идентификатор действия
Target ActionTarget `mapstructure:"target,omitempty"` // Отображение результата действия
Parent string `mapstructure:"parent,omitempty"` // Идентификатор родительского действия (для отображения в меню)
Name string `mapstructure:"name,omitempty"` // Название действия для отображения в интерфейсе (пункт меню, кнопка).
Description string `mapstructure:"description,omitempty"` // Описание действия для отображения в интерфейсе
Icon string `mapstructure:"icon,omitempty"` // Название иконки для отображения действия в интерфейсе
Image *references.Reference `mapstructure:"image,omitempty"` // Изображение для отображения в действия в интерфейсе
Groups []string `mapstructure:"groups,omitempty"` // Группы отображения действия в интерфейсе
Kind ActionKind `mapstructure:"kind,omitempty"` // Указывает на что направлено действие
Classes []string `mapstructure:"classes,omitempty"` // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
Refs []*references.Reference `mapstructure:"refs,omitempty"` // Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
ParamsCollection string `mapstructure:"params_collection,omitempty"`
Request *ActionRequest `mapstructure:"request,omitempty"` // Параметры запроса (используется в случае `ActionResponse.next`)
NavigationAction bool `mapstructure:"navigation_action,omitempty"` // Флаг указывающий, что действие должно переносить пользователя в другую часть интерфейса, а не отправлять запрос на сервер
NavigationRoute string `mapstructure:"navigation_route,omitempty"`
Autorun bool `mapstructure:"autorun,omitempty"` // Параметр указывающий, что действие выполняется автоматически
Confirm bool `mapstructure:"confirm,omitempty"` // Параметр указывающий, что действие требует подтверждения пользователя
Extension string `mapstructure:"extension,omitempty" json:"extension,omitempty"` // Расширение
Action string `mapstructure:"action,omitempty" json:"action"` // Идентификатор действия
Target ActionTarget `mapstructure:"target,omitempty" json:"target"` // Отображение результата действия
Parent string `mapstructure:"parent,omitempty" json:"parent,omitempty"` // Идентификатор родительского действия (для отображения в меню)
Name string `mapstructure:"name,omitempty" json:"name,omitempty"` // Название действия для отображения в интерфейсе (пункт меню, кнопка).
Description string `mapstructure:"description,omitempty" json:"description,omitempty"` // Описание действия для отображения в интерфейсе
Icon string `mapstructure:"icon,omitempty" json:"icon,omitempty"` // Название иконки для отображения действия в интерфейсе
Image *references.Reference `mapstructure:"image,omitempty" json:"image,omitempty"` // Изображение для отображения в действия в интерфейсе
Groups []string `mapstructure:"groups,omitempty" json:"groups,omitempty"` // Группы отображения действия в интерфейсе
Kind ActionKind `mapstructure:"kind,omitempty" json:"kind"` // Указывает на что направлено действие
Classes []string `mapstructure:"classes,omitempty" json:"classes,omitempty"` // Классы данных к которым применимо действие (название коллекций или специальных групп в рамках которых данное действие применимо)
Refs []*references.Reference `mapstructure:"refs,omitempty" json:"refs,omitempty"` // Ссылки на записи используемые для выполнения действия (назначение ссылок зависит от действия и расширения)
ParamsCollection string `mapstructure:"params_collection,omitempty" json:"paramsCollection,omitempty"`
Request *ActionRequest `mapstructure:"request,omitempty" json:"request,omitempty"` // Параметры запроса (используется в случае `ActionResponse.next`)
NavigationAction bool `mapstructure:"navigation_action,omitempty" json:"navigationAction,omitempty"` // Флаг указывающий, что действие должно переносить пользователя в другую часть интерфейса, а не отправлять запрос на сервер
NavigationRoute string `mapstructure:"navigation_route,omitempty" json:"navigationRoute,omitempty"`
Autorun bool `mapstructure:"autorun,omitempty" json:"autorun,omitempty"` // Параметр указывающий, что действие выполняется автоматически
Confirm bool `mapstructure:"confirm,omitempty" json:"confirm,omitempty"` // Параметр указывающий, что действие требует подтверждения пользователя
}
func ActionToMap(action *Action) map[string]interface{} {
......
......@@ -61,9 +61,9 @@ func OverwriteCollection() CollectionsOption {
return func(c *CollectionConfig) {
c.UpdateFn = func(s *Setup, old, new *collections.Collection) (*collections.Collection, bool, bool, error) {
update := new.Name != old.Name || new.IsSingle() != old.IsSingle() || new.IsSystem() != old.IsSystem() ||
new.IsNoData() != old.IsNoData() || new.Hidden != old.Hidden || new.IsView() != old.IsView() || !data.ElementsMatch(old.Tags, new.Tags)
new.IsNoData() != old.IsNoData() || new.Hidden != old.Hidden || !new.View.Equal(old.View) || !data.ElementsMatch(old.Tags, new.Tags)
return new, update, old.Schema.Equal(new.Schema), nil
return new, update, !old.Schema.Equal(new.Schema), nil
}
}
}
......
......@@ -14,6 +14,7 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/schema/field"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
)
func TestSetup_InstallCollections(t *testing.T) {
......@@ -156,3 +157,52 @@ func TestSetup_InstallCollections(t *testing.T) {
})
}
}
func TestOverwriteCollection(t *testing.T) {
tests := []struct {
name string
old, new *collections.Collection
wantUpdate bool
wantSetSchema bool
wantErr bool
}{
{
name: "Equal collections should not be updated",
old: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Schema: schema.New("a", field.String())},
new: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Schema: schema.New("a", field.String())},
wantUpdate: false,
wantSetSchema: false,
},
{
name: "For collections with different schemas and equal other params schemas should be set",
old: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "Coll", Schema: schema.New("a", field.String())},
new: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "Coll", Schema: schema.New("b", field.String())},
wantUpdate: false,
wantSetSchema: true,
},
{
name: "Collections with different names should be updated",
old: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "Coll1", Schema: schema.New("a", field.String())},
new: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", Name: "Coll2", Schema: schema.New("a", field.String())},
wantUpdate: true,
wantSetSchema: false,
},
{
name: "Collections with different view params should be updated",
old: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp1", EnvID: "env1", CollectionID: "coll1"}},
new: &collections.Collection{ID: "coll", SpaceID: "sp", EnvID: "env", View: &collections.View{SpaceID: "sp2", EnvID: "env2", CollectionID: "coll2"}},
wantUpdate: true,
wantSetSchema: false,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
c := new(CollectionConfig)
OverwriteCollection()(c)
_, update, setSchema, err := c.UpdateFn(new(Setup), tt.old, tt.new)
require.NoError(t, err)
assert.Equal(t, tt.wantUpdate, update)
assert.Equal(t, tt.wantSetSchema, setSchema)
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment