Files

56 lines
1.2 KiB
Go

//go:build integration
package database
import (
"fmt"
"os"
"testing"
"time"
"skeleton/config"
"skeleton/models"
"go.uber.org/zap"
)
func TestPostgresAndMySQL(t *testing.T) {
tests := []struct {
driver string
env string
}{
{driver: "postgres", env: "TEST_POSTGRES_DSN"},
{driver: "mysql", env: "TEST_MYSQL_DSN"},
}
for _, tt := range tests {
t.Run(tt.driver, func(t *testing.T) {
dsn := os.Getenv(tt.env)
if dsn == "" {
t.Skipf("%s 未设置", tt.env)
}
cfg := config.DatabaseConfig{
Driver: tt.driver, DSN: dsn,
MaxIdleConns: 1, MaxOpenConns: 2, ConnMaxLifetime: 1,
}
if err := Init(&cfg, zap.NewNop()); err != nil {
t.Fatalf("Init() error = %v", err)
}
t.Cleanup(func() { _ = Close(); DB = nil })
if err := DB.AutoMigrate(&models.User{}); err != nil {
t.Fatalf("AutoMigrate() error = %v", err)
}
user := models.User{
Username: fmt.Sprintf("integration_%s_%d", tt.driver, time.Now().UnixNano()),
Password: "test-hash",
}
if err := DB.Create(&user).Error; err != nil {
t.Fatalf("Create() error = %v", err)
}
if err := DB.Delete(&user).Error; err != nil {
t.Fatalf("Delete() error = %v", err)
}
})
}
}