forked from alterminal/alterminal
40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
package auth
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
|
|
"gorm.io/driver/postgres"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
// envOrTest 讀取環境變數,空值時回傳 fallback(與 store.EnvOr 同邏輯;
|
|
// 測試不可匯入 internal/store——其 AutoMigrate 匯入本套件,會形成測試循環)。
|
|
func envOrTest(key, fallback string) string {
|
|
if v := os.Getenv(key); v != "" {
|
|
return v
|
|
}
|
|
return fallback
|
|
}
|
|
|
|
// openTestDB 連線 DB_* 環境變數指定的資料庫並遷移 users、sessions 資料表,
|
|
// 供 login/logout 整合測試使用(測試自行建立資料並於 t.Cleanup 清理)。
|
|
func openTestDB() (*gorm.DB, error) {
|
|
dsn := fmt.Sprintf(
|
|
"host=%s port=%s user=%s password=%s dbname=%s sslmode=disable TimeZone=UTC",
|
|
envOrTest("DB_HOST", "localhost"),
|
|
envOrTest("DB_PORT", "5432"),
|
|
envOrTest("DB_USER", "postgres"),
|
|
envOrTest("DB_PASSWORD", "postgres"),
|
|
envOrTest("DB_NAME", "alterminal"),
|
|
)
|
|
db, err := gorm.Open(postgres.Open(dsn), &gorm.Config{TranslateError: true})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if err := db.AutoMigrate(&User{}, &Session{}); err != nil {
|
|
return nil, fmt.Errorf("auto migrate: %w", err)
|
|
}
|
|
return db, nil
|
|
}
|