github.com/RevenueMonster/sqlike@v1.0.6/sql/expr/expression_test.go (about) 1 package expr 2 3 import ( 4 "testing" 5 "time" 6 7 "github.com/RevenueMonster/sqlike/sqlike/primitive" 8 "github.com/stretchr/testify/require" 9 ) 10 11 func TestExpression(t *testing.T) { 12 var ( 13 grp primitive.Group 14 str *string 15 ) 16 17 invalids := []interface{}{ 18 And(), 19 nil, 20 struct{}{}, 21 Or(), 22 make([]interface{}, 0), 23 []interface{}{}, 24 []interface{}(nil), 25 map[string]string(nil), 26 str, 27 } 28 29 now := time.Now() 30 filters := []interface{}{ 31 Equal("A", 1), 32 Like("B", "abc%"), 33 Between("DateTime", now, now.Add(5*time.Minute)), 34 } 35 filters = append(filters, invalids...) 36 37 t.Run("Empty And", func(ti *testing.T) { 38 grp = And() 39 require.Equal(ti, primitive.Group{}, grp) 40 41 grp = And(invalids...) 42 require.Equal(ti, primitive.Group{}, grp) 43 }) 44 45 t.Run("And", func(ti *testing.T) { 46 grp = And(filters...) 47 require.Equal(ti, primitive.Group{ 48 Values: []interface{}{ 49 Raw("("), 50 Equal("A", 1), 51 primitive.And, 52 Like("B", "abc%"), 53 primitive.And, 54 Between("DateTime", now, now.Add(5*time.Minute)), 55 Raw(")"), 56 }, 57 }, grp) 58 }) 59 60 t.Run("Or", func(ti *testing.T) { 61 grp = Or(filters...) 62 require.Equal(ti, primitive.Group{ 63 Values: []interface{}{ 64 Raw("("), 65 Equal("A", 1), 66 primitive.Or, 67 Like("B", "abc%"), 68 primitive.Or, 69 Between("DateTime", now, now.Add(5*time.Minute)), 70 Raw(")"), 71 }, 72 }, grp) 73 }) 74 75 }