- 新增 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(已迁移至分层架构)
75 lines
1.7 KiB
Go
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
|
|
}
|