From dbce4d7e761271941b2930faa2d78137eb48e5a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernd-Ren=C3=A9=20Predota?= Date: Tue, 18 May 2021 11:41:08 +0200 Subject: [PATCH] model unittests added --- models/token_test.go | 101 ++++++++++++++++++++++++++++++++++++++++++ models/user.go | 20 ++------- models/user_test.go | 103 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 208 insertions(+), 16 deletions(-) create mode 100644 models/token_test.go create mode 100644 models/user_test.go diff --git a/models/token_test.go b/models/token_test.go new file mode 100644 index 0000000..2be6a99 --- /dev/null +++ b/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") + } +} diff --git a/models/user.go b/models/user.go index a142876..11b7a2d 100644 --- a/models/user.go +++ b/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 -// } diff --git a/models/user_test.go b/models/user_test.go new file mode 100644 index 0000000..d662762 --- /dev/null +++ b/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") + } +}