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.Error(err) } if err := db.AutoMigrate(&User{}); err != nil { t.Error(err) } appCache, err := cache.Bootstrap() if err != nil { t.Error(err) } userID, err := common.NewGUID() if err != nil { t.Error(err) } if err := appCache.Set("user:"+userID.String(), username); err != nil { t.Error(err) } if err := appCache.Set("user:"+username, userID.String()); err != nil { t.Error(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.Error(err) } if user.CreatedByJSON != username { t.Error("User AfterCreate doesn't set CreatedByJSON") } if user.UpdatedByJSON != username { t.Error("User AfterCreate doesn't set UpdatedByJSON") } if user.Tokens == nil { t.Error("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.Error(err) } user.TokensRef = []Token{{Token: token}} err = user.AfterFind(db.Set("username", username).Set("cache", appCache)) if err != nil { t.Error(err) } if user.DeletedAtJSON == nil { t.Error("User AfterFind doesn't set DeletedAtJSON") } if *user.DeletedAtJSON != now { t.Error("User AfterFind doesn't proper set DeletedAtJSON") } if user.Tokens == nil { t.Error("User AfterFind doesn't initialize Tokens") } if user.Tokens[0] != token.String() { t.Error("User AfterFind Tokens assignment broken") } if user.CreatedByJSON != username { t.Error("User AfterFind doesn't set CreatedByJSON") } if user.UpdatedByJSON != username { t.Error("User AfterFind doesn't set UpdatedByJSON") } }