1
0
Files
nex/backend/tests/migration_test.go
lanyuanxiaoyao 4c6b49099d feat: 配置 golangci-lint 静态分析并修复存量违规
- 新增 backend/.golangci.yml 配置 12 个 linter(forbidigo、errorlint、errcheck、staticcheck、revive、gocritic、gosec、bodyclose、noctx、nilerr、goimports、gocyclo)
- 新增 lefthook.yml 配置 pre-commit hook 自动运行 lint
- 修复存量代码违规:errors.Is/As 替换、zap.Error 替换、import 排序、errcheck 修复
- 更新 README 补充编码规范说明
- 归档 backend-code-lint 变更
2026-04-24 13:01:48 +08:00

81 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package tests
import (
"testing"
"nex/backend/internal/config"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
func TestMigration_ModelsUUIDPrimaryKey(t *testing.T) {
db := SetupTestDB(t)
defer CleanupTestDB(t, db)
// 创建供应商
_ = CreateTestProvider(t, db, "openai")
// 创建模型使用 UUID 作为 id
model, err := CreateTestModel(t, db, "550e8400-e29b-41d4-a716-446655440000", "openai", "gpt-4")
require.NoError(t, err)
// 通过 UUID 查询
var result config.Model
require.NoError(t, db.First(&result, "id = ?", model.ID).Error)
assert.Equal(t, "gpt-4", result.ModelName)
}
func TestMigration_UniqueProviderModelConstraint(t *testing.T) {
db := SetupTestDB(t)
defer CleanupTestDB(t, db)
// 创建供应商
_ = CreateTestProvider(t, db, "openai")
// 创建第一个模型
_, err := CreateTestModel(t, db, "uuid-1", "openai", "gpt-4")
require.NoError(t, err)
// 尝试创建相同 (provider_id, model_name) 的模型应失败
_, err = CreateTestModel(t, db, "uuid-2", "openai", "gpt-4")
assert.Error(t, err, "UNIQUE(provider_id, model_name) 约束应阻止重复")
// 不同 provider_id 下相同 model_name 应成功
_ = CreateTestProvider(t, db, "anthropic")
_, err = CreateTestModel(t, db, "uuid-3", "anthropic", "gpt-4")
require.NoError(t, err, "不同 provider_id 下相同 model_name 应允许")
}
func TestMigration_CascadeDelete(t *testing.T) {
db := SetupTestDB(t)
defer CleanupTestDB(t, db)
// 创建供应商和模型
provider := CreateTestProvider(t, db, "openai")
_, err := CreateTestModel(t, db, "uuid-1", "openai", "gpt-4")
require.NoError(t, err)
// 删除供应商应级联删除模型
require.NoError(t, db.Delete(&provider).Error)
var count int64
db.Model(&config.Model{}).Where("provider_id = ?", "openai").Count(&count)
assert.Equal(t, int64(0), count, "删除供应商后其模型应被级联删除")
}
func TestMigration_ModelDefaultEnabled(t *testing.T) {
db := SetupTestDB(t)
defer CleanupTestDB(t, db)
_ = CreateTestProvider(t, db, "openai")
// 创建模型不指定 enabled应默认为 true
_, err := CreateTestModel(t, db, "uuid-1", "openai", "gpt-4")
require.NoError(t, err)
var result config.Model
require.NoError(t, db.First(&result, "id = ?", "uuid-1").Error)
assert.True(t, result.Enabled, "enabled 字段默认应为 true")
}