From 7b14a239c46a7700051a4115e274b55e0bee5e60 Mon Sep 17 00:00:00 2001
From: Alena Petraki <a.petraki@perx.ru>
Date: Thu, 15 Aug 2024 18:12:01 +0000
Subject: [PATCH] =?UTF-8?q?chore(schema):=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?=
 =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=BB=D1=83=D1=87=D0=B5?=
 =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=BD?=
 =?UTF-8?q?=D1=8B=D1=85=20=D0=B2=20Reference=20=D0=BF=D0=BE=D0=BB=D0=B5?=
 =?UTF-8?q?=D0=B9=20=D1=81=D1=85=D0=B5=D0=BC=D1=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 pkg/files/field_test.go      | 34 ++++++++++++++++++++++++++++++++++
 pkg/references/field.go      | 17 +++++++++++++++--
 pkg/references/field_test.go | 20 ++++++++++++++++++++
 3 files changed, 69 insertions(+), 2 deletions(-)
 create mode 100644 pkg/files/field_test.go

diff --git a/pkg/files/field_test.go b/pkg/files/field_test.go
new file mode 100644
index 00000000..7b631730
--- /dev/null
+++ b/pkg/files/field_test.go
@@ -0,0 +1,34 @@
+package files
+
+import (
+	"testing"
+
+	"git.perx.ru/perxis/perxis-go/pkg/schema"
+	"git.perx.ru/perxis/perxis-go/pkg/schema/field"
+	"github.com/stretchr/testify/assert"
+)
+
+func TestFileField_Get(t *testing.T) {
+	sch := schema.New(
+		"a", field.String(),
+		"b", field.Object(
+			"file", Field(),
+		),
+		"file", Field(),
+	)
+	sch.ClearState()
+
+	assert.Equal(t, field.String(), sch.GetField("file.id"))
+	assert.Equal(t, field.String(), sch.GetField("file.name"))
+	assert.Equal(t, field.String(), sch.GetField("file.mimeType"))
+	assert.Equal(t, field.String(), sch.GetField("file.url"))
+	assert.Equal(t, field.String(), sch.GetField("file.key"))
+	assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("file.size"))
+
+	assert.Equal(t, field.String(), sch.GetField("b.file.id"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.name"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.mimeType"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.url"))
+	assert.Equal(t, field.String(), sch.GetField("b.file.key"))
+	assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("b.file.size"))
+}
diff --git a/pkg/references/field.go b/pkg/references/field.go
index 905c2d43..f80e7b5a 100644
--- a/pkg/references/field.go
+++ b/pkg/references/field.go
@@ -26,9 +26,22 @@ func (p ReferenceParameters) Clone(reset bool) field.Parameters {
 	}
 	return &p
 }
-func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field { return nil }
+func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field {
+	var fld *field.Field
+	switch name {
+	case "id", "collection_id":
+		return field.String()
+	case "disabled":
+		return field.Bool()
+	}
+	return f.SetFieldState(name, fld)
+}
 func (p ReferenceParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field {
-	return nil
+	return []*field.Field{
+		f.SetFieldState("id", field.String()),
+		f.SetFieldState("collection_id", field.String()),
+		f.SetFieldState("disabled", field.Bool()),
+	}
 }
 
 type ReferenceType struct{}
diff --git a/pkg/references/field_test.go b/pkg/references/field_test.go
index 8891c5a4..ac9d5c03 100644
--- a/pkg/references/field_test.go
+++ b/pkg/references/field_test.go
@@ -298,3 +298,23 @@ func TestReference_JSON(t *testing.T) {
 
 	assert.Equal(t, fld, res)
 }
+
+func TestReferenceField_Get(t *testing.T) {
+	sch := schema.New(
+		"a", field.String(),
+		"b", field.Object(
+			"ref", Field(nil),
+		),
+		"ref", Field(nil),
+	)
+	sch.ClearState()
+
+	assert.Equal(t, field.String(), sch.GetField("ref.id"))
+	assert.Equal(t, field.String(), sch.GetField("ref.collection_id"))
+	assert.Equal(t, field.Bool(), sch.GetField("ref.disabled"))
+
+	assert.Equal(t, field.String(), sch.GetField("b.ref.id"))
+	assert.Equal(t, field.String(), sch.GetField("b.ref.collection_id"))
+	assert.Equal(t, field.Bool(), sch.GetField("b.ref.disabled"))
+
+}
-- 
GitLab