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