3 changed files with 208 additions and 16 deletions
@ -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") |
||||
|
} |
||||
|
} |
||||
@ -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") |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue