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(已迁移至分层架构)
This commit is contained in:
74
backend/tests/helpers.go
Normal file
74
backend/tests/helpers.go
Normal file
@@ -0,0 +1,74 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user