-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathor_test.go
88 lines (73 loc) · 2.34 KB
/
or_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
package go_specs
import (
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"testing"
)
type OrTestSuite struct {
suite.Suite
Db *gorm.DB
}
func (suite *OrTestSuite) SetupTest() {
suite.Db, _ = gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
suite.Db = suite.Db.Session(&gorm.Session{DryRun: true})
}
func (suite *OrTestSuite) TestSimpleOr() {
t := suite.T()
db := suite.Db
eq := &Or{[]Spec{
&Arg{Param: "name", Path: []string{"firstname"}, Func: Equal},
&Arg{Param: "name", Path: []string{"lastname"}, Func: Equal},
},
}
db = eq.Apply(db, &TestContext{
map[string][]string{"name": {"testname1"}},
})
db = db.Find(&TestModel{})
assert.Equal(t, "SELECT * FROM `test_models` WHERE [firstname] = ? OR [lastname] = ?", db.Statement.SQL.String())
assert.Equal(t, "testname1", db.Statement.Vars[0])
}
func (suite *OrTestSuite) TestAndOr() {
t := suite.T()
db := suite.Db
eq := &And{[]Spec{
&Arg{Param: "name", Path: []string{"first"}, Func: Equal},
&Or{[]Spec{
&Arg{Param: "name", Path: []string{"second"}, Func: Equal},
&Arg{Param: "name", Path: []string{"third"}, Func: Equal},
}},
},
}
//db = db.Where("id = ?", 1).Where(db.Where("firstname = ?", "firstname").Or("lastname = ?", "lastname"))
db = eq.Apply(db, &TestContext{
map[string][]string{"name": {"testname1"}},
})
db = db.Find(&TestModel{})
assert.Equal(t, "SELECT * FROM `test_models` WHERE [first] = ? AND ([second] = ? OR [third] = ?)", db.Statement.SQL.String())
}
func (suite *OrTestSuite) TestAndOrAnd() {
t := suite.T()
db := suite.Db
eq := &And{[]Spec{
&Arg{Param: "name", Path: []string{"first"}, Func: Equal},
&Or{[]Spec{
&Arg{Param: "name", Path: []string{"second"}, Func: Like},
&And{[]Spec{
&Arg{Param: "name", Path: []string{"third"}, Func: Equal},
&Arg{Param: "name", Path: []string{"fourth"}, Func: Equal},
}},
}},
},
}
//db = db.Where("id = ?", 1).Where(db.Where("firstname = ?", "firstname").Or("lastname = ?", "lastname"))
db = eq.Apply(db, &TestContext{
map[string][]string{"name": {"test"}, "id": {"1"}},
})
db = db.Find(&TestModel{})
assert.Equal(t, "SELECT * FROM `test_models` WHERE [first] = ? AND ([second] LIKE ? OR ([third] = ? AND [fourth] = ?))", db.Statement.SQL.String())
}
func TestOrTestSuite(t *testing.T) {
suite.Run(t, &OrTestSuite{})
}