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.Error(err) } if err := db.AutoMigrate(&User{}); err != nil { t.Error(err) } appCache, err := cache.Bootstrap() if err != nil { t.Error(err) } if err := appCache.Set("user:"+userID, username); err != nil { t.Error(err) } if err := appCache.Set("user:"+username, userID); err != nil { t.Error(err) } guid, err := common.StringToGUID(userID) if err != nil { t.Error(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.Error(err) } if token.CreatedByDB.String() != userID { t.Error("Token BeforeCreate doesn't set CreatedByDB") } if token.UpdatedByDB.String() != userID { t.Error("Token BeforeCreate doesn't set UpdatedByDB") } if _, err := ulid.Parse(token.Token.String()); err != nil { t.Error("Token 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.Error(err) } if token.DeletedAtJSON == nil { t.Error("Token AfterFind doesn't set DeletedAtJSON") } if *token.DeletedAtJSON != now { t.Error("Token AfterFind doesn't set DeletedAtJSON proper") } if token.LastUsedJSON == nil { t.Error("Token AfterFind doesn't set LastUsedJSON") } if *token.LastUsedJSON != now { t.Error("Token AfterFind doesn't proper set LastUsedJSON") } if token.CreatedByJSON != username { t.Error("Token AfterFind doesn't set CreatedByJSON") } if token.UpdatedByJSON != username { t.Error("Token AfterFind doesn't set UpdatedByJSON") } if token.Username != username { t.Error("Token AfterFind doesn't set Username") } }