...

Source file src/github.com/doug-martin/goqu/v9/exp/exp_map_test.go

Documentation: github.com/doug-martin/goqu/v9/exp

     1  package exp_test
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/doug-martin/goqu/v9/exp"
     7  	"github.com/stretchr/testify/suite"
     8  )
     9  
    10  type exTestSuite struct {
    11  	suite.Suite
    12  }
    13  
    14  func TestExSuite(t *testing.T) {
    15  	suite.Run(t, new(exTestSuite))
    16  }
    17  
    18  func (ets *exTestSuite) TestExpression() {
    19  	ex := exp.Ex{"a": "b"}
    20  	ets.Equal(ex, ex.Expression())
    21  }
    22  
    23  func (ets *exTestSuite) TestClone() {
    24  	ex := exp.Ex{"a": "b"}
    25  	ets.Equal(ex, ex.Clone())
    26  }
    27  
    28  func (ets *exTestSuite) TestIsEmpty() {
    29  	ets.False(exp.Ex{"a": "b"}.IsEmpty())
    30  	ets.True(exp.Ex{}.IsEmpty())
    31  }
    32  
    33  func (ets *exTestSuite) TestToExpression() {
    34  	ident := exp.NewIdentifierExpression("", "", "a")
    35  	testCases := []struct {
    36  		ExMap exp.Ex
    37  		El    exp.ExpressionList
    38  		Err   string
    39  	}{
    40  		{
    41  			ExMap: exp.Ex{"a": "b"},
    42  			El:    exp.NewExpressionList(exp.AndType, ident.Eq("b")),
    43  		},
    44  		{
    45  			ExMap: exp.Ex{"a": "b", "b": "c"},
    46  			El: exp.NewExpressionList(
    47  				exp.AndType,
    48  				ident.Eq("b"),
    49  				exp.NewIdentifierExpression("", "", "b").Eq("c"),
    50  			),
    51  		},
    52  		{
    53  			ExMap: exp.Ex{"a": exp.Op{"eq": "b"}},
    54  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Eq("b"))),
    55  		},
    56  		{
    57  			ExMap: exp.Ex{"a": exp.Op{"neq": "b"}},
    58  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Neq("b"))),
    59  		},
    60  		{
    61  			ExMap: exp.Ex{"a": exp.Op{"is": nil}},
    62  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Is(nil))),
    63  		},
    64  		{
    65  			ExMap: exp.Ex{"a": exp.Op{"isNot": nil}},
    66  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.IsNot(nil))),
    67  		},
    68  		{
    69  			ExMap: exp.Ex{"a": exp.Op{"gt": "b"}},
    70  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Gt("b"))),
    71  		},
    72  		{
    73  			ExMap: exp.Ex{"a": exp.Op{"gte": "b"}},
    74  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Gte("b"))),
    75  		},
    76  		{
    77  			ExMap: exp.Ex{"a": exp.Op{"lt": "b"}},
    78  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Lt("b"))),
    79  		},
    80  		{
    81  			ExMap: exp.Ex{"a": exp.Op{"lte": "b"}},
    82  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Lte("b"))),
    83  		},
    84  		{
    85  			ExMap: exp.Ex{"a": exp.Op{"in": "b"}},
    86  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.In("b"))),
    87  		},
    88  		{
    89  			ExMap: exp.Ex{"a": exp.Op{"notIn": "b"}},
    90  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.NotIn("b"))),
    91  		},
    92  		{
    93  			ExMap: exp.Ex{"a": exp.Op{"like": "b"}},
    94  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Like("b"))),
    95  		},
    96  		{
    97  			ExMap: exp.Ex{"a": exp.Op{"notLike": "b"}},
    98  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.NotLike("b"))),
    99  		},
   100  		{
   101  			ExMap: exp.Ex{"a": exp.Op{"iLike": "b"}},
   102  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.ILike("b"))),
   103  		},
   104  		{
   105  			ExMap: exp.Ex{"a": exp.Op{"notILike": "b"}},
   106  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.NotILike("b"))),
   107  		},
   108  		{
   109  			ExMap: exp.Ex{"a": exp.Op{"regexpLike": "b"}},
   110  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.RegexpLike("b"))),
   111  		},
   112  		{
   113  			ExMap: exp.Ex{"a": exp.Op{"regexpNotLike": "b"}},
   114  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.RegexpNotLike("b"))),
   115  		},
   116  		{
   117  			ExMap: exp.Ex{"a": exp.Op{"regexpILike": "b"}},
   118  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.RegexpILike("b"))),
   119  		},
   120  		{
   121  			ExMap: exp.Ex{"a": exp.Op{"regexpNotILike": "b"}},
   122  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.RegexpNotILike("b"))),
   123  		},
   124  		{
   125  			ExMap: exp.Ex{"a": exp.Op{"between": exp.NewRangeVal("a", "z")}},
   126  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Between(exp.NewRangeVal("a", "z")))),
   127  		},
   128  		{
   129  			ExMap: exp.Ex{"a": exp.Op{"notBetween": exp.NewRangeVal("a", "z")}},
   130  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.NotBetween(exp.NewRangeVal("a", "z")))),
   131  		},
   132  		{
   133  			ExMap: exp.Ex{"a": exp.Op{"foo": "z"}},
   134  			Err:   "goqu: unsupported expression type foo",
   135  		},
   136  		{
   137  			ExMap: exp.Ex{"a": exp.Op{"eq": "b", "neq": "c", "gt": "m"}},
   138  			El:    exp.NewExpressionList(exp.AndType, exp.NewExpressionList(exp.OrType, ident.Eq("b"), ident.Gt("m"), ident.Neq("c"))),
   139  		},
   140  
   141  		{
   142  			ExMap: exp.Ex{
   143  				"a": "b",
   144  				"c": "d",
   145  			},
   146  			El: exp.NewExpressionList(
   147  				exp.AndType,
   148  				ident.Eq("b"),
   149  				exp.NewIdentifierExpression("", "", "c").Eq("d"),
   150  			),
   151  		},
   152  	}
   153  
   154  	for _, tc := range testCases {
   155  		el, err := tc.ExMap.ToExpressions()
   156  
   157  		if tc.Err == "" {
   158  			ets.NoError(err)
   159  			ets.Equal(tc.El, el, "For Ex %v", tc.ExMap)
   160  		} else {
   161  			ets.EqualError(err, tc.Err)
   162  		}
   163  	}
   164  }
   165  
   166  type exOrTestSuite struct {
   167  	suite.Suite
   168  }
   169  
   170  func TestExOrSuite(t *testing.T) {
   171  	suite.Run(t, new(exOrTestSuite))
   172  }
   173  
   174  func (ets *exOrTestSuite) TestExpression() {
   175  	ex := exp.ExOr{"a": "b"}
   176  	ets.Equal(ex, ex.Expression())
   177  }
   178  
   179  func (ets *exOrTestSuite) TestClone() {
   180  	ex := exp.ExOr{"a": "b"}
   181  	ets.Equal(ex, ex.Clone())
   182  }
   183  
   184  func (ets *exOrTestSuite) TestIsEmpty() {
   185  	ets.False(exp.ExOr{"a": "b"}.IsEmpty())
   186  	ets.True(exp.ExOr{}.IsEmpty())
   187  }
   188  
   189  func (ets *exOrTestSuite) TestToExpression() {
   190  	ident := exp.NewIdentifierExpression("", "", "a")
   191  	testCases := []struct {
   192  		ExMap exp.ExOr
   193  		El    exp.ExpressionList
   194  		Err   string
   195  	}{
   196  		{
   197  			ExMap: exp.ExOr{"a": "b"},
   198  			El:    exp.NewExpressionList(exp.OrType, ident.Eq("b")),
   199  		},
   200  		{
   201  			ExMap: exp.ExOr{"a": "b", "b": "c"},
   202  			El: exp.NewExpressionList(
   203  				exp.OrType,
   204  				ident.Eq("b"),
   205  				exp.NewIdentifierExpression("", "", "b").Eq("c"),
   206  			),
   207  		},
   208  		{
   209  			ExMap: exp.ExOr{"a": exp.Op{"eq": "b"}},
   210  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Eq("b"))),
   211  		},
   212  		{
   213  			ExMap: exp.ExOr{"a": exp.Op{"neq": "b"}},
   214  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Neq("b"))),
   215  		},
   216  		{
   217  			ExMap: exp.ExOr{"a": exp.Op{"is": nil}},
   218  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Is(nil))),
   219  		},
   220  		{
   221  			ExMap: exp.ExOr{"a": exp.Op{"isNot": nil}},
   222  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.IsNot(nil))),
   223  		},
   224  		{
   225  			ExMap: exp.ExOr{"a": exp.Op{"gt": "b"}},
   226  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Gt("b"))),
   227  		},
   228  		{
   229  			ExMap: exp.ExOr{"a": exp.Op{"gte": "b"}},
   230  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Gte("b"))),
   231  		},
   232  		{
   233  			ExMap: exp.ExOr{"a": exp.Op{"lt": "b"}},
   234  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Lt("b"))),
   235  		},
   236  		{
   237  			ExMap: exp.ExOr{"a": exp.Op{"lte": "b"}},
   238  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Lte("b"))),
   239  		},
   240  		{
   241  			ExMap: exp.ExOr{"a": exp.Op{"in": "b"}},
   242  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.In("b"))),
   243  		},
   244  		{
   245  			ExMap: exp.ExOr{"a": exp.Op{"notIn": "b"}},
   246  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.NotIn("b"))),
   247  		},
   248  		{
   249  			ExMap: exp.ExOr{"a": exp.Op{"like": "b"}},
   250  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Like("b"))),
   251  		},
   252  		{
   253  			ExMap: exp.ExOr{"a": exp.Op{"notLike": "b"}},
   254  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.NotLike("b"))),
   255  		},
   256  		{
   257  			ExMap: exp.ExOr{"a": exp.Op{"iLike": "b"}},
   258  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.ILike("b"))),
   259  		},
   260  		{
   261  			ExMap: exp.ExOr{"a": exp.Op{"notILike": "b"}},
   262  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.NotILike("b"))),
   263  		},
   264  		{
   265  			ExMap: exp.ExOr{"a": exp.Op{"regexpLike": "b"}},
   266  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.RegexpLike("b"))),
   267  		},
   268  		{
   269  			ExMap: exp.ExOr{"a": exp.Op{"regexpNotLike": "b"}},
   270  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.RegexpNotLike("b"))),
   271  		},
   272  		{
   273  			ExMap: exp.ExOr{"a": exp.Op{"regexpILike": "b"}},
   274  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.RegexpILike("b"))),
   275  		},
   276  		{
   277  			ExMap: exp.ExOr{"a": exp.Op{"regexpNotILike": "b"}},
   278  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.RegexpNotILike("b"))),
   279  		},
   280  		{
   281  			ExMap: exp.ExOr{"a": exp.Op{"between": exp.NewRangeVal("a", "z")}},
   282  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Between(exp.NewRangeVal("a", "z")))),
   283  		},
   284  		{
   285  			ExMap: exp.ExOr{"a": exp.Op{"notBetween": exp.NewRangeVal("a", "z")}},
   286  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.NotBetween(exp.NewRangeVal("a", "z")))),
   287  		},
   288  		{
   289  			ExMap: exp.ExOr{"a": exp.Op{"foo": "z"}},
   290  			Err:   "goqu: unsupported expression type foo",
   291  		},
   292  		{
   293  			ExMap: exp.ExOr{"a": exp.Op{"eq": "b", "neq": "c", "gt": "m"}},
   294  			El:    exp.NewExpressionList(exp.OrType, exp.NewExpressionList(exp.OrType, ident.Eq("b"), ident.Gt("m"), ident.Neq("c"))),
   295  		},
   296  
   297  		{
   298  			ExMap: exp.ExOr{
   299  				"a": "b",
   300  				"c": "d",
   301  			},
   302  			El: exp.NewExpressionList(
   303  				exp.OrType,
   304  				ident.Eq("b"),
   305  				exp.NewIdentifierExpression("", "", "c").Eq("d"),
   306  			),
   307  		},
   308  	}
   309  
   310  	for _, tc := range testCases {
   311  		el, err := tc.ExMap.ToExpressions()
   312  
   313  		if tc.Err == "" {
   314  			ets.NoError(err)
   315  			ets.Equal(tc.El, el, "For Ex %v", tc.ExMap)
   316  		} else {
   317  			ets.EqualError(err, tc.Err)
   318  		}
   319  	}
   320  }
   321  

View as plain text