From 3691261249d6cb85e07df3a983e095d5bc2627e8 Mon Sep 17 00:00:00 2001
From: Alex Petraky <petraky@perx.ru>
Date: Wed, 14 Aug 2024 18:45:37 +0000
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=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0=20?=
 =?UTF-8?q?=D0=B2=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B5=20=D1=84=D1=83?=
 =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20ListFields=20=D1=81=20=D1=84?=
 =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D0=BE=D0=BC,=20=D0=BA=D0=BE?=
 =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D0=BF=D1=80=D0=B8=D0=B2=D0=BE?=
 =?UTF-8?q?=D0=B4=D0=B8=D0=BB=D0=B0=20=D0=BA=20=D0=B2=D0=BE=D0=B7=D0=B2?=
 =?UTF-8?q?=D1=80=D0=B0=D1=82=D1=83=20=D0=BD=D0=B5=D0=B2=D0=B5=D1=80=D0=BD?=
 =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B0=20?=
 =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=B5=D0=B9=20=D0=B1=D0=B5=D0=B7=20=D1=83?=
 =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=B0=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD?=
 =?UTF-8?q?=D0=BD=D1=8B=D1=85?=
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 | 20 ++++++++++++++++++++
 pkg/schema/schema_test.go      | 18 ++++++++++++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)
 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 d27d74bb..cb0458ed 100644
--- a/pkg/schema/field/field_test.go
+++ b/pkg/schema/field/field_test.go
@@ -91,6 +91,26 @@ func TestField_ListFieldsRecursive(t *testing.T) {
 	}
 }
 
+func TestField_ListFieldsRecursive_WithFilter(t *testing.T) {
+	sch := 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, 3)
+}
+
 func TestField_CloneWithState(t *testing.T) {
 	f := Object("a", String())
 	fld := f.Clone(false)
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