55 lines
1.4 KiB
Go
55 lines
1.4 KiB
Go
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)
|
|
}
|
|
}
|