feat: 完善后端脚手架基础能力

This commit is contained in:
2026-08-09 01:06:21 +08:00
parent e311f416f2
commit f95311a107
61 changed files with 5630 additions and 521 deletions
+54
View File
@@ -0,0 +1,54 @@
package database
import (
"strings"
"testing"
"skeleton/config"
)
func TestBuildDSN(t *testing.T) {
tests := []struct {
name string
cfg config.DatabaseConfig
want string
}{
{
name: "explicit DSN wins",
cfg: config.DatabaseConfig{Driver: "mysql", DSN: "custom-dsn"},
want: "custom-dsn",
},
{
name: "postgres",
cfg: config.DatabaseConfig{Driver: "postgres", Host: "db", Port: 5432,
Username: "app", Password: "secret", DBName: "demo", SSLMode: "require"},
want: "host=db port=5432 user=app password=secret dbname=demo sslmode=require",
},
{
name: "mysql",
cfg: config.DatabaseConfig{Driver: "mysql", Host: "db", Port: 3306,
Username: "app", Password: "secret", DBName: "demo"},
want: "app:secret@tcp(db:3306)/demo?charset=utf8mb4&parseTime=True&loc=Local",
},
{
name: "sqlite",
cfg: config.DatabaseConfig{Driver: "sqlite", SQLitePath: "data/demo.db"},
want: "data/demo.db",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if got := BuildDSN(&tt.cfg); got != tt.want {
t.Fatalf("BuildDSN() = %q, want %q", got, tt.want)
}
})
}
}
func TestDialectorRejectsUnknownDriver(t *testing.T) {
_, err := Dialector(&config.DatabaseConfig{Driver: "oracle"})
if err == nil || !strings.Contains(err.Error(), "不支持的数据库驱动") {
t.Fatalf("Dialector() error = %v", err)
}
}