fix: пути (db, worktree) и config.yaml резолвятся рядом с .exe, а не от CWD
This commit is contained in:
@@ -2,6 +2,7 @@ package config
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -155,6 +156,58 @@ func TestLoad_FileNotFound(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveExePaths_RelativeToExe(t *testing.T) {
|
||||
t.Setenv("TG_TOKEN", "tok")
|
||||
t.Setenv("TG_CHAT_ID", "42")
|
||||
|
||||
yaml := `telegram:
|
||||
token: "${TG_TOKEN}"
|
||||
chat_id: "${TG_CHAT_ID}"
|
||||
paths:
|
||||
db: "./ratatoskr.db"
|
||||
worktree: "./worktrees"
|
||||
`
|
||||
cfg, err := Load(writeCfg(t, yaml))
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
cfg.ResolveExePaths()
|
||||
|
||||
base := ExeDir()
|
||||
if cfg.Paths.DB != filepath.Join(base, "ratatoskr.db") {
|
||||
t.Errorf("db = %q, want %q", cfg.Paths.DB, filepath.Join(base, "ratatoskr.db"))
|
||||
}
|
||||
if cfg.Paths.Worktree != filepath.Join(base, "worktrees") {
|
||||
t.Errorf("worktree = %q, want %q", cfg.Paths.Worktree, filepath.Join(base, "worktrees"))
|
||||
}
|
||||
}
|
||||
|
||||
func TestResolveExePaths_AbsoluteKept(t *testing.T) {
|
||||
t.Setenv("TG_TOKEN", "tok")
|
||||
t.Setenv("TG_CHAT_ID", "42")
|
||||
|
||||
absDB := filepath.Join(string(filepath.Separator), "data", "ratatoskr.db") // абсолютный для текущей ОС
|
||||
absWt := filepath.Join(string(filepath.Separator), "worktrees")
|
||||
yaml := `telegram:
|
||||
username: "${TG_TOKEN}"
|
||||
chat_id: "${TG_CHAT_ID}"
|
||||
paths:
|
||||
db: "` + absDB + `"
|
||||
worktree: "` + absWt + `"
|
||||
`
|
||||
cfg, err := Load(writeCfg(t, yaml))
|
||||
if err != nil {
|
||||
t.Fatalf("Load: %v", err)
|
||||
}
|
||||
cfg.ResolveExePaths()
|
||||
if cfg.Paths.DB != absDB {
|
||||
t.Errorf("db = %q, want абсолютный путь сохранён %q", cfg.Paths.DB, absDB)
|
||||
}
|
||||
if cfg.Paths.Worktree != absWt {
|
||||
t.Errorf("worktree = %q, want абсолютный путь сохранён %q", cfg.Paths.Worktree, absWt)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoad_MissingRequired(t *testing.T) {
|
||||
// пустой конфиг — все обязательные поля отсутствуют
|
||||
t.Setenv("TG_TOKEN", "")
|
||||
|
||||
Reference in New Issue
Block a user