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) } }