protofilters/matcher/matcher_test.go

86 lines
2.7 KiB
Go

package matcher
import (
"testing"
"github.com/stretchr/testify/assert"
pf "go.linka.cloud/protofilters"
test "go.linka.cloud/protofilters/tests/pb"
)
func TestFieldFilter(t *testing.T) {
assert := assert.New(t)
m := &test.Test{StringField: "ok"}
ok, err := Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"noop": pf.StringEquals("ok"),
}})
assert.Error(err)
assert.False(ok)
ok, err = Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"messageField": pf.Null(),
}})
assert.Error(err)
assert.False(ok)
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"string_field": pf.StringEquals("ok"),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"string_field": pf.StringIN("other", "ok"),
}}))
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"string_field": pf.StringIN("other", "noop"),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"string_field": pf.StringNotIN(),
"enum_field": pf.StringIN("NONE"),
}}))
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"string_field": pf.StringNotRegex(`[a-z](.+)`),
}}))
m.EnumField = test.Test_Type(42)
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"enum_field": pf.StringIN("OTHER"),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"message_field": pf.Null(),
}}))
m.MessageField = m
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"message_field": pf.Null(),
}}))
ok, err = Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"message_field.string_field.message_field": pf.Null(),
}})
assert.Error(err)
assert.False(ok)
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"message_field.message_field.message_field": pf.Null(),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"message_field.message_field.message_field.string_field": pf.StringIN("ok"),
}}))
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"enum_field": pf.StringIN("OTHER"),
}}))
m.NumberField = 42
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"number_field": pf.NumberEquals(0),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"number_field": pf.NumberEquals(42),
}}))
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"number_field": pf.NumberIN(0, 22),
}}))
assert.True(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"enum_field": pf.NumberIN(0, 42),
}}))
assert.False(Match(m, &pf.FieldsFilter{Filters: map[string]*pf.Filter{
"enum_field": pf.NumberNotIN(0, 42),
}}))
}