Browse Source

model unittests added

master
Bernd-René Predota 5 years ago
parent
commit
dbce4d7e76
  1. 101
      models/token_test.go
  2. 20
      models/user.go
  3. 103
      models/user_test.go

101
models/token_test.go

@ -0,0 +1,101 @@
package models
import (
"database/sql"
"testing"
"time"
"git.devices.local/mawas/golang-api-skeleton/lib/cache"
"git.devices.local/mawas/golang-api-skeleton/lib/common"
"github.com/oklog/ulid/v2"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
const userID = "01F5Z7CFER2D9QH2VY2V7PVQHF"
func tokenmock(t *testing.T) (*gorm.DB, cache.Cache, Token) {
db, err := gorm.Open(
sqlite.Open(":memory:"),
&gorm.Config{DisableForeignKeyConstraintWhenMigrating: true},
)
if err != nil {
t.Fatal(err)
}
if err := db.AutoMigrate(&User{}); err != nil {
t.Fatal(err)
}
appCache, err := cache.Bootstrap()
if err != nil {
t.Fatal(err)
}
if err := appCache.Set("user:"+userID, username); err != nil {
t.Fatal(err)
}
if err := appCache.Set("user:"+username, userID); err != nil {
t.Fatal(err)
}
guid, err := common.StringToGUID(userID)
if err != nil {
t.Fatal(err)
}
return db, appCache, Token{UserID: guid}
}
func TestTokenBeforeCreate(t *testing.T) {
db, _, token := tokenmock(t)
err := token.BeforeCreate(db.Set("userID", userID))
if err != nil {
t.Fatal(err)
}
if token.CreatedByDB.String() != userID {
t.Fatal("BeforeCreate doesn't set CreatedByDB")
}
if token.UpdatedByDB.String() != userID {
t.Fatal("BeforeCreate doesn't set UpdatedByDB")
}
if _, err := ulid.Parse(token.Token.String()); err != nil {
t.Fatal("BeforeCreate doesn't set proper token ->", err.Error())
}
}
func TestTokenAfterFind(t *testing.T) {
db, appCache, token := tokenmock(t)
defer appCache.Close()
now := time.Now()
token.CreatedByDB = token.UserID
token.UpdatedByDB = token.UserID
token.DeletedAtDB = gorm.DeletedAt{
Valid: true,
Time: now,
}
token.LastUsedDB = sql.NullTime{
Valid: true,
Time: now,
}
err := token.AfterFind(db.Set("cache", appCache))
if err != nil {
t.Fatal(err)
}
if token.DeletedAtJSON == nil {
t.Fatal("Token AfterFind doesn't set DeletedAtJSON")
}
if *token.DeletedAtJSON != now {
t.Fatal("Token AfterFind doesn't set DeletedAtJSON proper")
}
if token.LastUsedJSON == nil {
t.Fatal("Token AfterFind doesn't set LastUsedJSON")
}
if *token.LastUsedJSON != now {
t.Fatal("Token AfterFind doesn't proper set LastUsedJSON")
}
if token.CreatedByJSON != username {
t.Fatal("Token AfterFind doesn't set CreatedByJSON")
}
if token.UpdatedByJSON != username {
t.Fatal("Token AfterFind doesn't set UpdatedByJSON")
}
if token.Username != username {
t.Fatal("Token AfterFind doesn't set Username")
}
}

20
models/user.go

@ -38,14 +38,14 @@ func (user *User) AfterFind(tx *gorm.DB) error {
for i := range user.TokensRef {
user.Tokens = append(user.Tokens, user.TokensRef[i].Token.String())
}
if cc, ok := tx.Get("cache"); ok {
if c, ok := cc.(cache.Cache); ok {
if username, err := c.Get("user:" + user.CreatedByDB.String()); err != nil {
if c, ok := tx.Get("cache"); ok {
if appCache, ok := c.(cache.Cache); ok {
if username, err := appCache.Get("user:" + user.CreatedByDB.String()); err != nil {
return err
} else if username != nil {
user.CreatedByJSON = *username
}
if username, err := c.Get("user:" + user.UpdatedByDB.String()); err != nil {
if username, err := appCache.Get("user:" + user.UpdatedByDB.String()); err != nil {
return err
} else if username != nil {
user.UpdatedByJSON = *username
@ -54,15 +54,3 @@ func (user *User) AfterFind(tx *gorm.DB) error {
}
return nil
}
// func (user *User) BeforeCreate(tx *gorm.DB) error {
// // ctx := tx.Statement.Context
// // username := ctx.Value("username")
// // switch v := username.(type) {
// // case nil:
// // case string:
// // user.CreatedBy = v
// // }
// //
// return nil
// }

103
models/user_test.go

@ -0,0 +1,103 @@
package models
import (
"testing"
"time"
"git.devices.local/mawas/golang-api-skeleton/lib/cache"
"git.devices.local/mawas/golang-api-skeleton/lib/common"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
const username = "unittest"
func usermock(t *testing.T) (*gorm.DB, cache.Cache, User) {
db, err := gorm.Open(
sqlite.Open(":memory:"),
&gorm.Config{DisableForeignKeyConstraintWhenMigrating: true},
)
if err != nil {
t.Fatal(err)
}
if err := db.AutoMigrate(&User{}); err != nil {
t.Fatal(err)
}
appCache, err := cache.Bootstrap()
if err != nil {
t.Fatal(err)
}
userID, err := common.NewGUID()
if err != nil {
t.Fatal(err)
}
if err := appCache.Set("user:"+userID.String(), username); err != nil {
t.Fatal(err)
}
if err := appCache.Set("user:"+username, userID.String()); err != nil {
t.Fatal(err)
}
user := User{
Username: username,
Firstname: "Unit",
Lastname: "Test",
}
user.ID = userID
return db, appCache, user
}
func TestUserAfterCreate(t *testing.T) {
db, _, user := usermock(t)
err := user.AfterCreate(db.Set("username", username))
if err != nil {
t.Fatal(err)
}
if user.CreatedByJSON != username {
t.Fatal("User AfterCreate doesn't set CreatedByJSON")
}
if user.UpdatedByJSON != username {
t.Fatal("User AfterCreate doesn't set UpdatedByJSON")
}
if user.Tokens == nil {
t.Fatal("User AfterCreate doesn't initialize Tokens")
}
}
func TestUserAfterFind(t *testing.T) {
db, appCache, user := usermock(t)
defer appCache.Close()
now := time.Now()
user.CreatedByDB = user.ID
user.UpdatedByDB = user.ID
user.DeletedAtDB = gorm.DeletedAt{
Valid: true,
Time: now,
}
token, err := common.NewGUID()
if err != nil {
t.Fatal(err)
}
user.TokensRef = []Token{{Token: token}}
err = user.AfterFind(db.Set("username", username).Set("cache", appCache))
if err != nil {
t.Fatal(err)
}
if user.DeletedAtJSON == nil {
t.Fatal("User AfterFind doesn't set DeletedAtJSON")
}
if *user.DeletedAtJSON != now {
t.Fatal("User AfterFind doesn't proper set DeletedAtJSON")
}
if user.Tokens == nil {
t.Fatal("User AfterFind doesn't initialize Tokens")
}
if user.Tokens[0] != token.String() {
t.Fatal("User AfterFind Tokens assignment broken")
}
if user.CreatedByJSON != username {
t.Fatal("User AfterFind doesn't set CreatedByJSON")
}
if user.UpdatedByJSON != username {
t.Fatal("User AfterFind doesn't set UpdatedByJSON")
}
}
Loading…
Cancel
Save