feat: 完善后端脚手架基础能力
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user