From 7490eb775a0671ac5cc76dc125e36873e30671db Mon Sep 17 00:00:00 2001
From: Pavel Antonov <antonov@perx.ru>
Date: Wed, 14 Aug 2024 22:43:28 +0400
Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?=
 =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?=
 =?UTF-8?q?=20ListFieldsRecursive?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/schema/field/field.go      |  2 +-
 pkg/schema/field/field_test.go |  9 +++++++--
 pkg/schema/schema_test.go      | 18 ++++++++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)
 create mode 100644 pkg/schema/schema_test.go

diff --git a/pkg/schema/field/field.go b/pkg/schema/field/field.go
index 4d2a6771..2645730f 100644
--- a/pkg/schema/field/field.go
+++ b/pkg/schema/field/field.go
@@ -380,7 +380,7 @@ func (f *Field) ListFields(filter ...FieldFilterFunc) []*Field {
 // ListFieldsRecursive возвращает массив всех вложенных полей рекурсивно
 func (f *Field) ListFieldsRecursive(filter ...FieldFilterFunc) []*Field {
 	fields := f.ListFields(filter...)
-	for _, fld := range fields {
+	for _, fld := range f.ListFields() {
 		fields = append(fields, fld.ListFieldsRecursive(filter...)...)
 	}
 	return fields
diff --git a/pkg/schema/field/field_test.go b/pkg/schema/field/field_test.go
index c6f8c573..cb0458ed 100644
--- a/pkg/schema/field/field_test.go
+++ b/pkg/schema/field/field_test.go
@@ -93,17 +93,22 @@ func TestField_ListFieldsRecursive(t *testing.T) {
 
 func TestField_ListFieldsRecursive_WithFilter(t *testing.T) {
 	sch := Object(
-		"a", Object(
+		"f1", Object(
 			"b", Object(
 				"c", String().SetSingleLocale(true),
 			),
 		),
+		"f2", Object(
+			"b", Object(
+				"c", String().SetSingleLocale(true),
+			),
+		).SetSingleLocale(true),
 	)
 
 	sch.EnableState()
 
 	fields := sch.ListFieldsRecursive(func(f *Field) bool { return f.SingleLocale == true })
-	assert.Len(t, fields, 1)
+	assert.Len(t, fields, 3)
 }
 
 func TestField_CloneWithState(t *testing.T) {
diff --git a/pkg/schema/schema_test.go b/pkg/schema/schema_test.go
new file mode 100644
index 00000000..dbedf48f
--- /dev/null
+++ b/pkg/schema/schema_test.go
@@ -0,0 +1,18 @@
+package schema
+
+import (
+	"testing"
+
+	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestSchema_Clone(t *testing.T) {
+	f := New("a", field.String())
+	f.ClearState()
+	fld := f.Clone(false)
+	assert.Nil(t, fld.State)
+	f.EnableState()
+	fld = f.Clone(false)
+	assert.NotNil(t, fld.State)
+}
-- 
GitLab