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