github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/event/query/builder_test.go (about) 1 package query 2 3 import ( 4 "testing" 5 6 "github.com/hyperledger/burrow/logging/structure" 7 "github.com/stretchr/testify/assert" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestQueryBuilder(t *testing.T) { 12 qb := NewBuilder() 13 qry, err := qb.Query() 14 require.NoError(t, err) 15 assert.Equal(t, "", qry.String()) 16 17 qb = qb.AndGreaterThanOrEqual("foo.size", 45) 18 qry, err = qb.Query() 19 require.NoError(t, err) 20 assert.Equal(t, "foo.size >= 45", qry.String()) 21 22 qb = qb.AndEquals("bar.name", "marmot") 23 qry, err = qb.Query() 24 require.NoError(t, err) 25 assert.Equal(t, "foo.size >= 45 AND bar.name = 'marmot'", qry.String()) 26 27 assert.True(t, qry.Matches(makeTagMap("foo.size", 80, "bar.name", "marmot"))) 28 assert.False(t, qry.Matches(makeTagMap("foo.size", 8, "bar.name", "marmot"))) 29 assert.False(t, qry.Matches(makeTagMap("foo.size", 80, "bar.name", "marot"))) 30 31 qb = qb.AndContains("bar.desc", "burrow") 32 qry, err = qb.Query() 33 require.NoError(t, err) 34 assert.Equal(t, "foo.size >= 45 AND bar.name = 'marmot' AND bar.desc CONTAINS 'burrow'", qry.String()) 35 36 assert.True(t, qry.Matches(makeTagMap("foo.size", 80, "bar.name", "marmot", "bar.desc", "lives in a burrow"))) 37 assert.False(t, qry.Matches(makeTagMap("foo.size", 80, "bar.name", "marmot", "bar.desc", "lives in a shoe"))) 38 39 qb = NewBuilder().AndEquals("foo", "bar") 40 qb = qb.And(NewBuilder().AndGreaterThanOrEqual("frogs", 4)) 41 qry, err = qb.Query() 42 require.NoError(t, err) 43 assert.Equal(t, "foo = 'bar' AND frogs >= 4", qry.String()) 44 45 qb = qb.Not() 46 qry, err = qb.Query() 47 require.NoError(t, err) 48 assert.Equal(t, "NOT (foo = 'bar' AND frogs >= 4)", qry.String()) 49 } 50 51 func makeTagMap(keyvals ...interface{}) TagMap { 52 tmap := make(TagMap) 53 for i := 0; i < len(keyvals); i += 2 { 54 tmap[keyvals[i].(string)] = structure.Stringify(keyvals[i+1]) 55 } 56 return tmap 57 }