mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
87 lines
2.0 KiB
Go
87 lines
2.0 KiB
Go
package geeorm
|
|
|
|
import (
|
|
"errors"
|
|
"geeorm/session"
|
|
"reflect"
|
|
"testing"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func OpenDB(t *testing.T) *Engine {
|
|
t.Helper()
|
|
engine, err := NewEngine("sqlite3", "gee.db")
|
|
if err != nil {
|
|
t.Fatal("failed to connect", err)
|
|
}
|
|
return engine
|
|
}
|
|
|
|
func TestNewEngine(t *testing.T) {
|
|
engine := OpenDB(t)
|
|
defer engine.Close()
|
|
}
|
|
|
|
type User struct {
|
|
Name string `geeorm:"PRIMARY KEY"`
|
|
Age int
|
|
}
|
|
|
|
func transactionRollback(t *testing.T) {
|
|
engine := OpenDB(t)
|
|
defer engine.Close()
|
|
s := engine.NewSession()
|
|
_ = s.Model(&User{}).DropTable()
|
|
_, err := engine.Transaction(func(s *session.Session) (result interface{}, err error) {
|
|
_ = s.Model(&User{}).CreateTable()
|
|
_, err = s.Insert(&User{"Tom", 18})
|
|
return nil, errors.New("Error")
|
|
})
|
|
if err == nil || s.HasTable() {
|
|
t.Fatal("failed to rollback")
|
|
}
|
|
}
|
|
|
|
func transactionCommit(t *testing.T) {
|
|
engine := OpenDB(t)
|
|
defer engine.Close()
|
|
s := engine.NewSession()
|
|
_ = s.Model(&User{}).DropTable()
|
|
_, err := engine.Transaction(func(s *session.Session) (result interface{}, err error) {
|
|
_ = s.Model(&User{}).CreateTable()
|
|
_, err = s.Insert(&User{"Tom", 18})
|
|
return
|
|
})
|
|
u := &User{}
|
|
_ = s.First(u)
|
|
if err != nil || u.Name != "Tom" {
|
|
t.Fatal("failed to commit")
|
|
}
|
|
}
|
|
|
|
func TestEngine_Transaction(t *testing.T) {
|
|
t.Run("rollback", func(t *testing.T) {
|
|
transactionRollback(t)
|
|
})
|
|
t.Run("commit", func(t *testing.T) {
|
|
transactionCommit(t)
|
|
})
|
|
}
|
|
|
|
func TestEngine_Migrate(t *testing.T) {
|
|
engine := OpenDB(t)
|
|
defer engine.Close()
|
|
s := engine.NewSession()
|
|
_, _ = s.Raw("DROP TABLE IF EXISTS User;").Exec()
|
|
_, _ = s.Raw("CREATE TABLE User(Name text PRIMARY KEY, XXX integer);").Exec()
|
|
_, _ = s.Raw("INSERT INTO User(`Name`) values (?), (?)", "Tom", "Sam").Exec()
|
|
engine.Migrate(&User{})
|
|
|
|
rows, _ := s.Raw("SELECT * FROM User").QueryRows()
|
|
columns, _ := rows.Columns()
|
|
if !reflect.DeepEqual(columns, []string{"Name", "Age"}) {
|
|
t.Fatal("Failed to migrate table User, got columns", columns)
|
|
}
|
|
}
|