forked from slicebit/qb
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsqlite_test.go
117 lines (93 loc) · 3.45 KB
/
sqlite_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
package qb
import (
"database/sql"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/suite"
"testing"
"time"
)
type SqliteTestSuite struct {
suite.Suite
db *Session
}
func (suite *SqliteTestSuite) SetupTest() {
var err error
suite.db, err = New("sqlite3", "./qb_test.db")
suite.db.Dialect().SetEscaping(true)
assert.Nil(suite.T(), err)
assert.NotNil(suite.T(), suite.db)
}
func (suite *SqliteTestSuite) TestSqlite() {
type User struct {
ID string `qb:"type:varchar(40); constraints:primary_key"`
Email string `qb:"constraints:unique, notnull"`
FullName string `qb:"constraints:notnull"`
Bio sql.NullString `qb:"type:text; constraints:null"`
Oscars int `qb:"constraints:default(0)"`
}
type Session struct {
ID int `qb:"type:integer; constraints:primary_key"`
UserID string `qb:"type:varchar(40); constraints:ref(user.id)"`
AuthToken string `qb:"type:varchar(40); constraints:notnull, unique"`
CreatedAt time.Time `qb:"constraints:notnull"`
ExpiresAt time.Time `qb:"constraints:notnull"`
}
var err error
suite.db.AddTable(User{})
suite.db.AddTable(Session{})
err = suite.db.CreateAll()
assert.Nil(suite.T(), err)
// add sample user & session
suite.db.AddAll(
&User{
ID: "b6f8bfe3-a830-441a-a097-1777e6bfae95",
Email: "[email protected]",
FullName: "Jack Nicholson",
Bio: sql.NullString{String: "Jack Nicholson, an American actor, producer, screen-writer and director, is a three-time Academy Award winner and twelve-time nominee.", Valid: true},
}, &Session{
UserID: "b6f8bfe3-a830-441a-a097-1777e6bfae95",
AuthToken: "e4968197-6137-47a4-ba79-690d8c552248",
CreatedAt: time.Now(),
ExpiresAt: time.Now().Add(24 * time.Hour),
},
)
err = suite.db.Commit()
assert.Nil(suite.T(), err)
// find user
var user User
suite.db.Find(&User{ID: "b6f8bfe3-a830-441a-a097-1777e6bfae95"}).One(&user)
assert.Equal(suite.T(), user.Email, "[email protected]")
assert.Equal(suite.T(), user.FullName, "Jack Nicholson")
assert.Equal(suite.T(), user.Bio.String, "Jack Nicholson, an American actor, producer, screen-writer and director, is a three-time Academy Award winner and twelve-time nominee.")
// select using join
sessions := []Session{}
err = suite.db.
Query(
suite.db.T("session").C("id"),
suite.db.T("session").C("user_id"),
suite.db.T("session").C("auth_token"),
).
InnerJoin(suite.db.T("user"), suite.db.T("session").C("user_id"), suite.db.T("user").C("id")).
Filter(suite.db.T("user").C("id").Eq("b6f8bfe3-a830-441a-a097-1777e6bfae95")).
All(&sessions)
assert.Nil(suite.T(), err)
assert.Equal(suite.T(), len(sessions), 1)
assert.Equal(suite.T(), sessions[0].ID, 1)
assert.Equal(suite.T(), sessions[0].UserID, "b6f8bfe3-a830-441a-a097-1777e6bfae95")
assert.Equal(suite.T(), sessions[0].AuthToken, "e4968197-6137-47a4-ba79-690d8c552248")
user.Bio = sql.NullString{String: "nil", Valid: false}
suite.db.Add(user)
err = suite.db.Commit()
assert.Nil(suite.T(), err)
suite.db.Find(&User{ID: "b6f8bfe3-a830-441a-a097-1777e6bfae95"}).One(&user)
assert.Equal(suite.T(), user.Bio, sql.NullString{String: "", Valid: false})
// delete session
suite.db.Delete(&Session{AuthToken: "99e591f8-1025-41ef-a833-6904a0f89a38"})
err = suite.db.Commit()
assert.Nil(suite.T(), err)
// drop tables
assert.Nil(suite.T(), suite.db.DropAll())
}
func TestSqliteTestSuite(t *testing.T) {
suite.Run(t, new(SqliteTestSuite))
}