add db tests
This commit is contained in:
52
db/db.go
52
db/db.go
@@ -28,6 +28,34 @@ type DB struct {
|
|||||||
*gorm.DB
|
*gorm.DB
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func New(path string) (*DB, error) {
|
||||||
|
pathAndArgs := fmt.Sprintf("%s?%s", path, dbOptions.Encode())
|
||||||
|
db, err := gorm.Open("sqlite3", pathAndArgs)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrap(err, "with gorm")
|
||||||
|
}
|
||||||
|
db.SetLogger(log.New(os.Stdout, "gorm ", 0))
|
||||||
|
db.DB().SetMaxOpenConns(dbMaxOpenConns)
|
||||||
|
db.AutoMigrate(
|
||||||
|
model.Artist{},
|
||||||
|
model.Track{},
|
||||||
|
model.User{},
|
||||||
|
model.Setting{},
|
||||||
|
model.Play{},
|
||||||
|
model.Album{},
|
||||||
|
)
|
||||||
|
db.FirstOrCreate(&model.User{}, model.User{
|
||||||
|
Name: "admin",
|
||||||
|
Password: "admin",
|
||||||
|
IsAdmin: true,
|
||||||
|
})
|
||||||
|
return &DB{DB: db}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewMock() (*DB, error) {
|
||||||
|
return New(":memory:")
|
||||||
|
}
|
||||||
|
|
||||||
func (db *DB) GetSetting(key string) string {
|
func (db *DB) GetSetting(key string) string {
|
||||||
setting := &model.Setting{}
|
setting := &model.Setting{}
|
||||||
db.
|
db.
|
||||||
@@ -60,27 +88,3 @@ func (db *DB) WithTx(cb func(tx *gorm.DB)) {
|
|||||||
defer tx.Commit()
|
defer tx.Commit()
|
||||||
cb(tx)
|
cb(tx)
|
||||||
}
|
}
|
||||||
|
|
||||||
func New(path string) (*DB, error) {
|
|
||||||
pathAndArgs := fmt.Sprintf("%s?%s", path, dbOptions.Encode())
|
|
||||||
db, err := gorm.Open("sqlite3", pathAndArgs)
|
|
||||||
if err != nil {
|
|
||||||
return nil, errors.Wrap(err, "with gorm")
|
|
||||||
}
|
|
||||||
db.SetLogger(log.New(os.Stdout, "gorm ", 0))
|
|
||||||
db.DB().SetMaxOpenConns(dbMaxOpenConns)
|
|
||||||
db.AutoMigrate(
|
|
||||||
model.Artist{},
|
|
||||||
model.Track{},
|
|
||||||
model.User{},
|
|
||||||
model.Setting{},
|
|
||||||
model.Play{},
|
|
||||||
model.Album{},
|
|
||||||
)
|
|
||||||
db.FirstOrCreate(&model.User{}, model.User{
|
|
||||||
Name: "admin",
|
|
||||||
Password: "admin",
|
|
||||||
IsAdmin: true,
|
|
||||||
})
|
|
||||||
return &DB{DB: db}, nil
|
|
||||||
}
|
|
||||||
|
|||||||
46
db/db_test.go
Normal file
46
db/db_test.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"math/rand"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
_ "github.com/jinzhu/gorm/dialects/sqlite"
|
||||||
|
)
|
||||||
|
|
||||||
|
var testDB *DB
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
var err error
|
||||||
|
testDB, err = NewMock()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error opening database: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func randKey() string {
|
||||||
|
letters := []rune("abcdef0123456789")
|
||||||
|
b := make([]rune, 16)
|
||||||
|
for i := range b {
|
||||||
|
b[i] = letters[rand.Intn(len(letters))]
|
||||||
|
}
|
||||||
|
return string(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestGetSetting(t *testing.T) {
|
||||||
|
key := randKey()
|
||||||
|
// new key
|
||||||
|
expected := "hello"
|
||||||
|
testDB.SetSetting(key, expected)
|
||||||
|
actual := testDB.GetSetting(key)
|
||||||
|
if actual != expected {
|
||||||
|
t.Errorf("expected %q, got %q", expected, actual)
|
||||||
|
}
|
||||||
|
// existing key
|
||||||
|
expected = "howdy"
|
||||||
|
testDB.SetSetting(key, expected)
|
||||||
|
actual = testDB.GetSetting(key)
|
||||||
|
if actual != expected {
|
||||||
|
t.Errorf("expected %q, got %q", expected, actual)
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user