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  }