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  }