Files
ng-blog/internal/auth/jwt_test.go
2025-05-05 10:00:50 +02:00

77 lines
1.4 KiB
Go

package auth
import (
"log"
"testing"
"time"
"git.schreifuchs.ch/schreifuchs/ng-blog/internal/model"
"github.com/google/uuid"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
func testDB() (db *gorm.DB) {
db, err := gorm.Open(sqlite.Open(":memory:"))
if err != nil {
log.Panic(err)
}
db.AutoMigrate(&model.User{}, &model.InvalidJWT{})
return
}
func TestService_JWT(t *testing.T) {
t.Parallel()
tests := []struct {
user model.User
}{
{
user: model.User{
ID: 0,
Name: "Hans de Admin",
Role: model.RoleAdmin,
UUID: uuid.MustParse("9d8973b7-2005-4ca6-a4bf-7bae5aad2916"),
},
},
{
user: model.User{
ID: 1,
Name: "Ueli de User",
Role: model.RoleUser,
UUID: uuid.MustParse("e1b7099f-a3be-4d77-b33f-389e27123187"),
},
},
}
for _, tt := range tests {
t.Run(tt.user.Name, func(t *testing.T) {
t.Parallel()
s := New(&Config{
Secret: "asdf",
ValidDuration: time.Hour,
AdminName: "adsf",
AdminPassword: "adsf",
}, testDB())
jwt, err := s.createJWT(&tt.user)
if err != nil {
t.Errorf("Error while creating JWT: %v", err)
}
claims, err := s.validateJWT(jwt)
if err != nil {
t.Errorf("Error while creating JWT: %v", err)
}
if claims.Subject != tt.user.UUID.String() {
t.Error("Subject does not match")
}
if claims.Role != tt.user.Role {
t.Error("Roles did not match")
}
})
}
}