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

Исправлены тесты

parent 7c7eac38
No related branches found
No related tags found
No related merge requests found
......@@ -47,6 +47,8 @@ func TestEqualSchema(t *testing.T) {
require.NoError(t, err)
s2 := schema.New()
err = json.Unmarshal(b, s2)
s1.ClearState()
s2.ClearState()
require.NoError(t, err)
require.Equal(t, s1.Field, s2.Field)
}
......
......@@ -106,11 +106,12 @@ func (f Field) GetState() *State {
// Схемы нельзя сравнивать с активным состоянием с помощью `reflect.DeepEqual` или `assert.Equal`.
// Предварительно нужно сделать `ClearState`.
// После очистки состояния полей не будут рассчитываться. Для повторного включения состояния используйте `EnableState`
func (f *Field) ClearState() {
func (f *Field) ClearState() *Field {
f.State = nil
for _, fld := range f.ListFields() {
fld.ClearState()
}
return f
}
// EnableState включает расчет состояния поля и всех вложенных полей
......
......@@ -61,6 +61,8 @@ func (f *Field) UnmarshalJSON(b []byte) error {
}
}
j.FieldData.State = f.State
*f = Field(j.FieldData)
f.Params = params
_ = f.Prepare()
......
......@@ -90,3 +90,12 @@ func TestField_ListFieldsRecursive(t *testing.T) {
assert.NotEmpty(t, f.State.Name)
}
}
func TestField_CloneWithState(t *testing.T) {
f := Object("a", String())
fld := f.Clone(false)
assert.Nil(t, fld.State)
f.EnableState()
fld = f.Clone(false)
assert.NotNil(t, fld.State)
}
......@@ -48,6 +48,11 @@ func (s *Schema) Clone(reset bool) *Schema {
}
}
func (s *Schema) ClearState() *Schema {
s.Field.ClearState()
return s
}
func (s *Schema) Equal(sch *Schema) bool {
if s == sch {
return true
......@@ -88,7 +93,10 @@ func (s *Schema) ConvertTypes() error {
if err != nil {
return errors.Wrap(err, "marshal schema")
}
// сохраняем состояние cхемы
state := s.Field.State
*s = *New()
s.Field.State = state
return errors.Wrap(s.UnmarshalJSON(b), "unmarshal schema")
}
......
......@@ -23,6 +23,9 @@ func TestFromFiles(t *testing.T) {
t.Run("Success", func(t *testing.T) {
schemas, err := schema.FromFS(os.DirFS("assets"))
for _, s := range schemas {
s.ClearState()
}
require.NoError(t, err)
require.Len(t, schemas, 2, "В директории хранятся две корректные схемы")
require.ElementsMatch(t, []*schema.Schema{getPagesSchema(), getPagesSchema()}, schemas, "Cхемы должны соответствовать объекту из функции")
......
......@@ -193,6 +193,9 @@ func TestSchema_JSON(t *testing.T) {
err = json.Unmarshal(b, res)
require.NoError(t, err)
sch.ClearState()
res.ClearState()
assert.Equal(t, sch, res)
}
......@@ -859,6 +862,7 @@ func TestSchema_UnknownJSON(t *testing.T) {
"times", field.Number("int"),
"dates", field.Array(field.Time()),
)
sch.ClearState()
b, err := json.Marshal(sch)
require.NoError(t, err)
......@@ -883,6 +887,8 @@ func TestSchema_UnknownJSON(t *testing.T) {
require.NoError(t, err)
b, err = json.Marshal(s2)
require.NoError(t, err)
s1.ClearState()
s2.ClearState()
assert.Equal(t, "unknown", s2.GetType().Name(), "Схема неизвестного типа должна определяться как unknown")
assert.Equal(t, s1, s2, "Схема не должна меняться при повторном маршалинге")
......@@ -890,6 +896,7 @@ func TestSchema_UnknownJSON(t *testing.T) {
s3 := schema.New()
err = json.Unmarshal(b, s3)
require.NoError(t, err)
s3.ClearState()
assert.Equal(t, "object", s3.GetType().Name(), "Схема должна восстановить тип object при восстановление регистрации типа")
assert.Equal(t, sch, s3, "Схема должна восстановиться при восстановление регистрации типа")
}
......
......@@ -36,11 +36,18 @@ func TestSetup_InstallCollections(t *testing.T) {
},
{
name: "Install one collection success",
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}},
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env",
Schema: schema.New("name", field.String()).ClearState()}},
collectionsCall: func(svc *mockscollections.Collections) {
svc.On("Get", mock.Anything, "sp", "env", "1").Return(nil, errors.New("not found")).Once()
svc.On("Create", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}).Return(&collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}, nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String())).Return(nil).Once()
svc.On("Create", mock.Anything,
&collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env",
Schema: schema.New("name", field.String()).ClearState()}).
Return(&collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env",
Schema: schema.New("name", field.String()).ClearState()}, nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1",
schema.New("name", field.String()).ClearState()).
Return(nil).Once()
},
envsCall: func(svc *envmocks.Environments) {
svc.On("Migrate", mock.Anything, "sp", "env").Return(nil).Once()
......@@ -123,11 +130,15 @@ func TestSetup_InstallCollections(t *testing.T) {
},
{
name: "Fail to install collection on migrate",
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}},
collections: []*collections.Collection{{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String()).ClearState()}},
collectionsCall: func(svc *mockscollections.Collections) {
svc.On("Get", mock.Anything, "sp", "env", "1").Return(nil, errors.New("not found")).Once()
svc.On("Create", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}).Return(&collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env", Schema: schema.New("name", field.String())}, nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1", schema.New("name", field.String())).Return(nil).Once()
svc.On("Create", mock.Anything, &collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env",
Schema: schema.New("name", field.String()).ClearState()}).
Return(&collections.Collection{ID: "1", SpaceID: "sp", Name: "space", EnvID: "env",
Schema: schema.New("name", field.String()).ClearState()}, nil).Once()
svc.On("SetSchema", mock.Anything, "sp", "env", "1",
schema.New("name", field.String()).ClearState()).Return(nil).Once()
},
envsCall: func(svc *envmocks.Environments) {
svc.On("Migrate", mock.Anything, "sp", "env").Return(errors.New("migrate error")).Once()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment