-
Notifications
You must be signed in to change notification settings - Fork 0
/
Expect_test.go
133 lines (113 loc) · 3.7 KB
/
Expect_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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package expect
import (
"database/sql"
"database/sql/driver"
"errors"
"log"
"testing"
sqlmock "github.com/DATA-DOG/go-sqlmock"
"github.com/stretchr/testify/suite"
)
type ExpectTestSuite struct {
suite.Suite
db *sql.DB
mock sqlmock.Sqlmock
table string
columns []string
}
// TestExpectTestSuite runs ExpectTestSuite
func TestExpectTestSuite(t *testing.T) {
suite.Run(t, new(ExpectTestSuite))
}
// SetupSuite runs once at the very start of the testing suite, before any tests are run.
func (suite *ExpectTestSuite) SetupSuite() {
log.Println("Expect Tests Begin")
suite.db, suite.mock, _ = sqlmock.New()
suite.table = "some_table"
suite.columns = []string{
"id",
"value",
}
}
// TearDownSuite runs once at the very end of the testing suite, after all tests have been run.
func (suite *ExpectTestSuite) TearDownSuite() {
log.Println("Expect Tests End")
}
func (suite *ExpectTestSuite) TestSelect() {
Select(suite.mock, suite.table, suite.columns, errors.New("db error"))
_, err := suite.db.Query("SELECT * FROM " + suite.table)
suite.Error(err)
Select(suite.mock, suite.table, suite.columns, nil)
rows, err := suite.db.Query("SELECT * FROM " + suite.table)
suite.NoError(err)
defer rows.Close()
suite.False(rows.Next())
Select(suite.mock, suite.table, suite.columns, nil, []driver.Value{1, 2})
rows, err = suite.db.Query("SELECT * FROM " + suite.table)
suite.NoError(err)
var id, value int
for rows.Next() {
err := rows.Scan(&id, &value)
suite.NoError(err)
suite.Equal(1, id)
suite.Equal(2, value)
}
}
func (suite *ExpectTestSuite) TestUpdate() {
Update(suite.mock, suite.table, nil, 1)
res, err := suite.db.Exec("UPDATE " + suite.table + " SET value = 2 WHERE id = 1")
suite.NoError(err)
rowsAffected, err := res.RowsAffected()
suite.NoError(err)
suite.Equal(int64(1), rowsAffected)
Update(suite.mock, suite.table, errors.New("db error"), 0)
_, err = suite.db.Exec("UPDATE " + suite.table + " SET value = 2 WHERE id = 1")
suite.Error(err)
}
func (suite *ExpectTestSuite) TestInsert() {
Insert(suite.mock, suite.table, nil, 1)
res, err := suite.db.Exec("INSERT INTO " + suite.table + "(id, value) VALUES (1, 2)")
suite.NoError(err)
lastInsertID, err := res.LastInsertId()
suite.NoError(err)
suite.Equal(int64(1), lastInsertID)
Insert(suite.mock, suite.table, errors.New("db error"), 0)
_, err = suite.db.Exec("INSERT INTO " + suite.table + "(id, value) VALUES (1, 2)")
suite.Error(err)
}
func (suite *ExpectTestSuite) TestReplace() {
Replace(suite.mock, suite.table, nil, 1)
res, err := suite.db.Exec("REPLACE INTO " + suite.table + "(id, value) VALUES (1, 2)")
suite.NoError(err)
lastInsertID, err := res.LastInsertId()
suite.NoError(err)
suite.Equal(int64(1), lastInsertID)
Replace(suite.mock, suite.table, errors.New("db error"), 0)
_, err = suite.db.Exec("REPLACE INTO " + suite.table + "(id, value) VALUES (1, 2)")
suite.Error(err)
}
func (suite *ExpectTestSuite) TestDelete() {
Delete(suite.mock, suite.table, nil, 1)
res, err := suite.db.Exec("DELETE FROM " + suite.table + " WHERE id = 1")
suite.NoError(err)
rowsAffected, err := res.RowsAffected()
suite.NoError(err)
suite.Equal(int64(1), rowsAffected)
Delete(suite.mock, suite.table, errors.New("db error"), 0)
_, err = suite.db.Exec("DELETE FROM " + suite.table + " WHERE id = 1")
suite.Error(err)
}
func (suite *ExpectTestSuite) TestCount() {
Count(suite.mock, suite.table, nil, 1)
rows, err := suite.db.Query("SELECT * FROM " + suite.table)
suite.NoError(err)
defer rows.Close()
var count int
rows.Next()
err = rows.Scan(&count)
suite.NoError(err)
suite.Equal(1, count)
Count(suite.mock, suite.table, errors.New("db error"), 0)
_, err = suite.db.Query("SELECT * FROM " + suite.table)
suite.Error(err)
}