88 lines
2.3 KiB
Go
88 lines
2.3 KiB
Go
package auth
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"git.pengzhan.dev/haopengzhan/rsspipe/internal/config"
|
|
"git.pengzhan.dev/haopengzhan/rsspipe/internal/db"
|
|
)
|
|
|
|
func TestAuthService(t *testing.T) {
|
|
tempDir, err := os.MkdirTemp("", "rsspipe-auth-test-*")
|
|
if err != nil {
|
|
t.Fatalf("failed to create temp dir: %v", err)
|
|
}
|
|
defer func() {
|
|
_ = os.RemoveAll(tempDir)
|
|
}()
|
|
|
|
dbPath := filepath.Join(tempDir, "auth_test.db")
|
|
database, err := db.InitDB(dbPath)
|
|
if err != nil {
|
|
t.Fatalf("InitDB failed: %v", err)
|
|
}
|
|
defer func() {
|
|
_ = database.Close()
|
|
}()
|
|
|
|
cfg := &config.Config{
|
|
AdminUsername: "admin",
|
|
AdminPassword: "initial_password_123",
|
|
JWTSecret: "super-secret-jwt-key-for-test",
|
|
}
|
|
|
|
authService := NewAuthService(database, cfg)
|
|
|
|
// 1. Bootstrap Admin
|
|
if err := authService.BootstrapAdmin(); err != nil {
|
|
t.Fatalf("BootstrapAdmin failed: %v", err)
|
|
}
|
|
|
|
// 2. Authenticate with initial password
|
|
token, err := authService.Authenticate("admin", "initial_password_123")
|
|
if err != nil {
|
|
t.Fatalf("Authenticate failed: %v", err)
|
|
}
|
|
if token == "" {
|
|
t.Fatalf("expected non-empty token")
|
|
}
|
|
|
|
// 3. Validate Token
|
|
claims, err := authService.ValidateToken(token)
|
|
if err != nil {
|
|
t.Fatalf("ValidateToken failed: %v", err)
|
|
}
|
|
if claims.Username != "admin" {
|
|
t.Errorf("expected username admin, got %s", claims.Username)
|
|
}
|
|
|
|
// 4. Update Password
|
|
if err := authService.UpdatePassword(claims.UserID, "wrong_old_pwd", "new_secure_pwd_456"); err == nil {
|
|
t.Errorf("expected error with incorrect old password")
|
|
}
|
|
|
|
if err := authService.UpdatePassword(claims.UserID, "initial_password_123", "short"); err == nil {
|
|
t.Errorf("expected error with too short new password")
|
|
}
|
|
|
|
if err := authService.UpdatePassword(claims.UserID, "initial_password_123", "new_secure_pwd_456"); err != nil {
|
|
t.Fatalf("UpdatePassword failed: %v", err)
|
|
}
|
|
|
|
// 5. Authenticate with new password
|
|
newToken, err := authService.Authenticate("admin", "new_secure_pwd_456")
|
|
if err != nil {
|
|
t.Fatalf("Authenticate with new password failed: %v", err)
|
|
}
|
|
if newToken == "" {
|
|
t.Fatalf("expected non-empty token for new password")
|
|
}
|
|
|
|
// 6. Old password should now fail
|
|
if _, err := authService.Authenticate("admin", "initial_password_123"); err == nil {
|
|
t.Errorf("expected failure when authenticating with old password")
|
|
}
|
|
}
|