Files
user-system/internal/service/warmup_test.go
long-agent 582ad7a069 test: add comprehensive test coverage and improve code quality
- Add new test files for auth, service, and handler modules
- Improve test organization and coverage
- Refactor code for better maintainability
- Add captcha, settings, stats, and theme handler tests
- Add auth module tests (CAS, OAuth, password, SSO, state)
- Add service layer tests for auth, export, permissions, roles
- All Go tests pass (exit code 0)
- All frontend tests pass (325 tests in 59 files)
2026-04-17 20:43:50 +08:00

101 lines
2.9 KiB
Go

package service_test
import (
"context"
"testing"
"time"
"github.com/user-management-system/internal/auth"
"github.com/user-management-system/internal/cache"
"github.com/user-management-system/internal/domain"
"github.com/user-management-system/internal/repository"
"github.com/user-management-system/internal/service"
gormsqlite "gorm.io/driver/sqlite"
"gorm.io/gorm"
"gorm.io/gorm/logger"
_ "modernc.org/sqlite"
)
// =============================================================================
// Cache Warmup Tests - TDD approach
// =============================================================================
func setupWarmupTestEnv(t *testing.T) (*service.AuthService, *cache.CacheManager, *gorm.DB) {
t.Helper()
db, err := gorm.Open(gormsqlite.New(gormsqlite.Config{
DriverName: "sqlite",
DSN: "file:warmup_test?mode=memory&cache=shared",
}), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
t.Fatalf("failed to connect database: %v", err)
}
if err := db.AutoMigrate(&domain.User{}); err != nil {
t.Fatalf("failed to migrate: %v", err)
}
userRepo := repository.NewUserRepository(db)
jwtManager, _ := auth.NewJWTWithOptions(auth.JWTOptions{
HS256Secret: "test-secret",
AccessTokenExpire: 15 * time.Minute,
RefreshTokenExpire: 7 * 24 * time.Hour,
})
l1Cache := cache.NewL1Cache()
l2Cache := cache.NewRedisCache(false)
cacheManager := cache.NewCacheManager(l1Cache, l2Cache)
authSvc := service.NewAuthService(userRepo, nil, jwtManager, cacheManager, 8, 5, 15*time.Minute)
return authSvc, cacheManager, db
}
func TestAuthService_WarmupCache(t *testing.T) {
authSvc, _, db := setupWarmupTestEnv(t)
ctx := context.Background()
// 创建测试用户
db.Create(&domain.User{Username: "user1", Status: domain.UserStatusActive})
db.Create(&domain.User{Username: "user2", Status: domain.UserStatusActive})
db.Create(&domain.User{Username: "user3", Status: domain.UserStatusActive})
t.Run("缓存预热成功", func(t *testing.T) {
err := authSvc.WarmupCache(ctx, 10)
if err != nil {
t.Fatalf("WarmupCache failed: %v", err)
}
// 验证用户已缓存
// 注意:由于缓存键格式是内部实现,这里只验证方法执行成功
t.Log("缓存预热成功完成")
})
t.Run("缓存预热使用默认值", func(t *testing.T) {
err := authSvc.WarmupCache(ctx, 0) // 0 表示使用默认值100
if err != nil {
t.Fatalf("WarmupCache failed: %v", err)
}
})
t.Run("缓存预热限制最大值", func(t *testing.T) {
err := authSvc.WarmupCache(ctx, 2000) // 超过1000会被限制
if err != nil {
t.Fatalf("WarmupCache failed: %v", err)
}
})
}
func TestAuthService_WarmupCache_WithEmptyDB(t *testing.T) {
authSvc, _, _ := setupWarmupTestEnv(t)
ctx := context.Background()
t.Run("空数据库预热", func(t *testing.T) {
err := authSvc.WarmupCache(ctx, 10)
if err != nil {
t.Fatalf("WarmupCache failed: %v", err)
}
// 空数据库时应该静默完成
})
}