Add tests for auth, rate limiting, security, and util
This commit is contained in:
82
internal/auth/service_test.go
Normal file
82
internal/auth/service_test.go
Normal file
@@ -0,0 +1,82 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"ResendIt/internal/security"
|
||||
"ResendIt/internal/user"
|
||||
"testing"
|
||||
|
||||
"gorm.io/driver/sqlite"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func TestServiceLogin_InvalidUserDoesNotEnumerate(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("open sqlite: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&user.User{}); err != nil {
|
||||
t.Fatalf("migrate: %v", err)
|
||||
}
|
||||
|
||||
svc := NewService(NewRepository(db))
|
||||
|
||||
_, err = svc.Login("does-not-exist", "whatever")
|
||||
if err != ErrInvalidCredentials {
|
||||
t.Fatalf("expected ErrInvalidCredentials for missing user, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceLogin_WrongPassword(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("open sqlite: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&user.User{}); err != nil {
|
||||
t.Fatalf("migrate: %v", err)
|
||||
}
|
||||
|
||||
hash, err := security.HashPassword("right")
|
||||
if err != nil {
|
||||
t.Fatalf("hash: %v", err)
|
||||
}
|
||||
|
||||
u := user.User{Username: "alice", PasswordHash: hash, Role: "user"}
|
||||
if err := db.Create(&u).Error; err != nil {
|
||||
t.Fatalf("create user: %v", err)
|
||||
}
|
||||
|
||||
svc := NewService(NewRepository(db))
|
||||
_, err = svc.Login("alice", "wrong")
|
||||
if err != ErrInvalidCredentials {
|
||||
t.Fatalf("expected ErrInvalidCredentials for wrong password, got %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestServiceLogin_SuccessReturnsJWT(t *testing.T) {
|
||||
db, err := gorm.Open(sqlite.Open(":memory:"), &gorm.Config{})
|
||||
if err != nil {
|
||||
t.Fatalf("open sqlite: %v", err)
|
||||
}
|
||||
if err := db.AutoMigrate(&user.User{}); err != nil {
|
||||
t.Fatalf("migrate: %v", err)
|
||||
}
|
||||
|
||||
hash, err := security.HashPassword("right")
|
||||
if err != nil {
|
||||
t.Fatalf("hash: %v", err)
|
||||
}
|
||||
|
||||
u := user.User{Username: "alice", PasswordHash: hash, Role: "user"}
|
||||
if err := db.Create(&u).Error; err != nil {
|
||||
t.Fatalf("create user: %v", err)
|
||||
}
|
||||
|
||||
svc := NewService(NewRepository(db))
|
||||
token, err := svc.Login("alice", "right")
|
||||
if err != nil {
|
||||
t.Fatalf("expected success, got error: %v", err)
|
||||
}
|
||||
if token == "" {
|
||||
t.Fatalf("expected non-empty jwt token")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user