diff --git a/lib/database/main.go b/lib/database/main.go index 4d971ad..e863f93 100644 --- a/lib/database/main.go +++ b/lib/database/main.go @@ -22,11 +22,17 @@ type Config struct { func Open(c Config) (err error) { config = &c Write, err = gorm.Open(config.Type, config.Connection) + Write.SingularTable(true) + Write.Callback().Create().Remove("gorm:update_time_stamp") + Write.Callback().Update().Remove("gorm:update_time_stamp") if err != nil { return } if len(config.ReadConnection) > 0 { Read, err = gorm.Open(config.Type, config.ReadConnection) + Read.SingularTable(true) + Read.Callback().Create().Remove("gorm:update_time_stamp") + Read.Callback().Update().Remove("gorm:update_time_stamp") } else { Read = Write } @@ -36,9 +42,12 @@ func Open(c Config) (err error) { func Close() { Write.Close() + Write = nil + if len(config.ReadConnection) > 0 { Read.Close() } + Read = nil } func AddModel(m interface{}) { diff --git a/lib/database/main_test.go b/lib/database/main_test.go index 636bab8..97a0233 100644 --- a/lib/database/main_test.go +++ b/lib/database/main_test.go @@ -1 +1,73 @@ package database + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +type TestModel struct { + ID int64 + Value string `gorm:"type:varchar(255);column:value" json:"value"` +} + +func TestOpenNoDB(t *testing.T) { + assert := assert.New(t) + + c := Config{} + + err := Open(c) + assert.Error(err, "error") +} +func TestOpenOneDB(t *testing.T) { + assert := assert.New(t) + AddModel(&TestModel{}) + + c := Config{ + Type: "sqlite3", + Connection: "file:database?mode=memory", + } + var count int64 + + err := Open(c) + assert.NoError(err, "no error") + Write.LogMode(true) + Read.LogMode(true) + + Write.Create(&TestModel{Value: "first"}) + Write.Create(&TestModel{Value: "secound"}) + + var list []*TestModel + Read.Find(&list).Count(&count) + assert.Equal(int64(2), count, "not enought entries") + Close() +} + +func TestOpenTwoDB(t *testing.T) { + assert := assert.New(t) + AddModel(&TestModel{}) + + c := Config{ + Type: "sqlite3", + Connection: "file:database?mode=memory", + ReadConnection: "file:database2?mode=memory", + } + var count int64 + + err := Open(c) + assert.NoError(err, "no error") + Write.LogMode(true) + Read.LogMode(true) + + Write.Create(&TestModel{Value: "first"}) + Write.Create(&TestModel{Value: "secound"}) + + var list []*TestModel + Write.Find(&list).Count(&count) + assert.Equal(int64(2), count, "not enought entries") + + result := Read.Find(&list) + assert.Error(result.Error, "error, because it is the wrong database") + Close() + +}