Skip to content
Snippets Groups Projects
Commit 04774659 authored by Danis Kirasirov's avatar Danis Kirasirov
Browse files

fix list fields

parent 23f78314
No related branches found
No related tags found
No related merge requests found
...@@ -33,14 +33,21 @@ func (p FileParameters) GetField(f *field.Field, name string) *field.Field { ...@@ -33,14 +33,21 @@ func (p FileParameters) GetField(f *field.Field, name string) *field.Field {
} }
func (p FileParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field { func (p FileParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field {
return []*field.Field{ var res []*field.Field
for _, fld := range []*field.Field{
f.SetFieldState("id", field.String()), f.SetFieldState("id", field.String()),
f.SetFieldState("name", field.String()), f.SetFieldState("name", field.String()),
f.SetFieldState("mimeType", field.String()), f.SetFieldState("mimeType", field.String()),
f.SetFieldState("size", field.Number(field.NumberFormatInt)), f.SetFieldState("size", field.Number(field.NumberFormatInt)),
f.SetFieldState("url", field.String()), f.SetFieldState("url", field.String()),
f.SetFieldState("key", field.String()), f.SetFieldState("key", field.String()),
} {
if field.ApplyFilterFunc(filter, fld) {
res = append(res, fld)
}
} }
return res
} }
type FileType struct { type FileType struct {
......
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"git.perx.ru/perxis/perxis-go/pkg/schema" "git.perx.ru/perxis/perxis-go/pkg/schema"
"git.perx.ru/perxis/perxis-go/pkg/schema/field" "git.perx.ru/perxis/perxis-go/pkg/schema/field"
"github.com/stretchr/testify/assert" "github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
) )
func TestFileField_Get(t *testing.T) { func TestFileField_Get(t *testing.T) {
...@@ -32,3 +33,43 @@ func TestFileField_Get(t *testing.T) { ...@@ -32,3 +33,43 @@ func TestFileField_Get(t *testing.T) {
assert.Equal(t, field.String(), sch.GetField("b.file.key")) assert.Equal(t, field.String(), sch.GetField("b.file.key"))
assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("b.file.size")) assert.Equal(t, field.Number(field.NumberFormatInt), sch.GetField("b.file.size"))
} }
func TestFileField_ListFields(t *testing.T) {
tests := []struct {
name string
file *field.Field
filter field.FieldFilterFunc
want []*field.Field
}{
{
name: "Without filter",
file: Field(),
want: []*field.Field{
field.String(), // id
field.String(), // name
field.String(), // mimeType
field.Number(field.NumberFormatInt), // size
field.String(), // url
field.String(), // key
},
},
{
name: "With filter",
file: Field(),
filter: func(f *field.Field) bool { return f.GetType().Name() == "number" },
want: []*field.Field{
field.Number(field.NumberFormatInt), // size
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var filters []field.FieldFilterFunc
if tt.filter != nil {
filters = append(filters, tt.filter)
}
got := tt.file.ListFields(filters...)
require.Equal(t, tt.want, got)
})
}
}
...@@ -37,11 +37,18 @@ func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field ...@@ -37,11 +37,18 @@ func (p ReferenceParameters) GetField(f *field.Field, name string) *field.Field
return f.SetFieldState(name, fld) return f.SetFieldState(name, fld)
} }
func (p ReferenceParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field { func (p ReferenceParameters) ListFields(f *field.Field, filter ...field.FieldFilterFunc) []*field.Field {
return []*field.Field{ var res []*field.Field
for _, fld := range []*field.Field{
f.SetFieldState("id", field.String()), f.SetFieldState("id", field.String()),
f.SetFieldState("collection_id", field.String()), f.SetFieldState("collection_id", field.String()),
f.SetFieldState("disabled", field.Bool()), f.SetFieldState("disabled", field.Bool()),
} {
if field.ApplyFilterFunc(filter, fld) {
res = append(res, fld)
}
} }
return res
} }
type ReferenceType struct{} type ReferenceType struct{}
......
...@@ -318,3 +318,40 @@ func TestReferenceField_Get(t *testing.T) { ...@@ -318,3 +318,40 @@ func TestReferenceField_Get(t *testing.T) {
assert.Equal(t, field.Bool(), sch.GetField("b.ref.disabled")) assert.Equal(t, field.Bool(), sch.GetField("b.ref.disabled"))
} }
func TestReferenceField_ListFields(t *testing.T) {
tests := []struct {
name string
file *field.Field
filter field.FieldFilterFunc
want []*field.Field
}{
{
name: "Without filter",
file: Field([]string{}),
want: []*field.Field{
field.String(), // id
field.String(), // collection_id
field.Bool(), // disabled
},
},
{
name: "With filter",
file: Field([]string{}),
filter: func(f *field.Field) bool { return f.GetType().Name() == "bool" },
want: []*field.Field{
field.Bool(), // disabled
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var filters []field.FieldFilterFunc
if tt.filter != nil {
filters = append(filters, tt.filter)
}
got := tt.file.ListFields(filters...)
require.Equal(t, tt.want, got)
})
}
}
...@@ -35,8 +35,11 @@ func (a ArrayParameters) GetField(f *Field, name string) *Field { ...@@ -35,8 +35,11 @@ func (a ArrayParameters) GetField(f *Field, name string) *Field {
func (a ArrayParameters) ListFields(f *Field, filterFunc ...FieldFilterFunc) []*Field { func (a ArrayParameters) ListFields(f *Field, filterFunc ...FieldFilterFunc) []*Field {
f.SetFieldState("Item", a.Item) f.SetFieldState("Item", a.Item)
if ApplyFilterFunc(filterFunc, a.Item) {
return []*Field{a.Item} return []*Field{a.Item}
} }
return nil
}
type ArrayType struct{} type ArrayType struct{}
......
...@@ -267,3 +267,40 @@ func TestArrayField_WithType(t *testing.T) { ...@@ -267,3 +267,40 @@ func TestArrayField_WithType(t *testing.T) {
assert.ElementsMatch(t, got, []interface{}{map[string]interface{}{"a": "1", "b": "2"}}) assert.ElementsMatch(t, got, []interface{}{map[string]interface{}{"a": "1", "b": "2"}})
}) })
} }
func TestArrayField_ListFields(t *testing.T) {
tests := []struct {
name string
field *Field
filter FieldFilterFunc
want []*Field
}{
{
name: "Without filter",
field: Array(Number("number")),
want: []*Field{Number("number")},
},
{
name: "With filter positive",
field: Array(Number("number").SetTextSearch(true)),
filter: func(f *Field) bool { return f.TextSearch },
want: []*Field{Number("number").SetTextSearch(true)},
},
{
name: "With filter negative",
field: Array(Number("float")),
filter: func(f *Field) bool { return f.TextSearch },
want: nil,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
var filters []FieldFilterFunc
if tt.filter != nil {
filters = append(filters, tt.filter)
}
got := tt.field.ListFields(filters...)
require.Equal(t, tt.want, got)
})
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment