Files
dygou_go/internal/config/config_test.go
T

81 lines
2.0 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
)
func TestMigrateLegacyFile(t *testing.T) {
dir := t.TempDir()
legacy := filepath.Join(dir, "legacy", "config.json")
target := filepath.Join(dir, "internal", "config.json")
content := []byte(`{"activity":"xiaodian"}`)
if err := os.MkdirAll(filepath.Dir(legacy), 0700); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(legacy, content, 0600); err != nil {
t.Fatal(err)
}
migrated, err := MigrateLegacyFile(target, legacy)
if err != nil {
t.Fatalf("迁移失败: %v", err)
}
if !migrated {
t.Fatal("应迁移旧文件")
}
got, err := os.ReadFile(target)
if err != nil {
t.Fatal(err)
}
if string(got) != string(content) {
t.Fatalf("迁移内容 = %q, want %q", got, content)
}
if _, err := os.Stat(legacy); err != nil {
t.Fatalf("旧文件不应被删除: %v", err)
}
if err := os.WriteFile(legacy, []byte(`{"activity":"other"}`), 0600); err != nil {
t.Fatal(err)
}
migrated, err = MigrateLegacyFile(target, legacy)
if err != nil {
t.Fatalf("重复迁移失败: %v", err)
}
if migrated {
t.Fatal("目标已存在时不应覆盖迁移")
}
got, err = os.ReadFile(target)
if err != nil {
t.Fatal(err)
}
if string(got) != string(content) {
t.Fatalf("目标文件被意外覆盖: %q", got)
}
}
func TestDefaultAppPathsUseInternalDataDir(t *testing.T) {
dir := t.TempDir()
t.Setenv("DOUYU_DATA_DIR", dir)
t.Setenv("DOUYU_CONFIG", "")
t.Setenv("DOUYU_USERS", "")
t.Setenv("DOUYU_LOG_DIR", "")
t.Setenv("DOUYU_SUCCESS_DIR", "")
paths := DefaultAppPaths()
if paths.DataDir != dir {
t.Fatalf("DataDir = %q, want %q", paths.DataDir, dir)
}
if paths.ConfigFile != filepath.Join(dir, "config.json") {
t.Fatalf("ConfigFile = %q", paths.ConfigFile)
}
if paths.AccountFile != filepath.Join(dir, "accounts.txt") {
t.Fatalf("AccountFile = %q", paths.AccountFile)
}
if paths.LogDir != filepath.Join(dir, "logs") || paths.SuccessDir != filepath.Join(dir, "success_images") {
t.Fatalf("应用数据子目录异常: logs=%q success=%q", paths.LogDir, paths.SuccessDir)
}
}