1
0
Files
nex/backend/tests/helpers.go
lanyuanxiaoyao f18904af1e feat: 实现分层架构,包含 domain、service、repository 和 pkg 层
- 新增 domain 层:model、provider、route、stats 实体
- 新增 service 层:models、providers、routing、stats 业务逻辑
- 新增 repository 层:models、providers、stats 数据访问
- 新增 pkg 工具包:errors、logger、validator
- 新增中间件:CORS、logging、recovery、request ID
- 新增数据库迁移:初始 schema 和索引
- 新增单元测试和集成测试
- 新增规范文档:config-management、database-migration、error-handling、layered-architecture、middleware-system、request-validation、structured-logging、test-coverage
- 移除 config 子包和 model_router(已迁移至分层架构)
2026-04-16 00:47:20 +08:00

75 lines
1.7 KiB
Go

package tests
import (
"fmt"
"testing"
"nex/backend/internal/config"
"github.com/stretchr/testify/assert"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
)
// SetupTestDB initializes a temporary SQLite database with auto-migration.
func SetupTestDB(t *testing.T) *gorm.DB {
t.Helper()
dir := t.TempDir()
dsn := dir + "/test.db"
db, err := gorm.Open(sqlite.Open(dsn), &gorm.Config{})
assert.NoError(t, err, "failed to open test database")
err = db.AutoMigrate(&config.Provider{}, &config.Model{}, &config.UsageStats{})
assert.NoError(t, err, "failed to auto-migrate test database")
return db
}
// CleanupTestDB closes the database and removes the temp database file.
func CleanupTestDB(t *testing.T, db *gorm.DB) {
t.Helper()
sqlDB, err := db.DB()
assert.NoError(t, err, "failed to get underlying sql.DB")
err = sqlDB.Close()
assert.NoError(t, err, "failed to close test database")
}
// CreateTestProvider creates a test provider and returns it.
func CreateTestProvider(t *testing.T, db *gorm.DB, id string) config.Provider {
t.Helper()
provider := config.Provider{
ID: id,
Name: fmt.Sprintf("test-provider-%s", id),
APIKey: fmt.Sprintf("test-api-key-%s", id),
BaseURL: fmt.Sprintf("https://api.test-%s.com", id),
Enabled: true,
}
err := db.Create(&provider).Error
assert.NoError(t, err, "failed to create test provider")
return provider
}
// CreateTestModel creates a test model and returns it.
func CreateTestModel(t *testing.T, db *gorm.DB, id string, providerID string, modelName string) config.Model {
t.Helper()
model := config.Model{
ID: id,
ProviderID: providerID,
ModelName: modelName,
Enabled: true,
}
err := db.Create(&model).Error
assert.NoError(t, err, "failed to create test model")
return model
}