Files
tia-love/internal/config/config_test.go
T

94 lines
2.4 KiB
Go

package config
import (
"os"
"path/filepath"
"testing"
)
func TestLoadMissingUsesDefaults(t *testing.T) {
c, err := LoadFrom(filepath.Join(t.TempDir(), "tidak-ada.yaml"))
if err != nil {
t.Fatalf("file tidak ada harusnya bukan error: %v", err)
}
d := Default()
if c.UI.Language != d.UI.Language || c.UI.SoundVolume != d.UI.SoundVolume {
t.Fatalf("default salah: %+v", c.UI)
}
if c.StacksDir == "" {
t.Fatal("stacks_dir default kosong")
}
}
func TestSaveLoadRoundtrip(t *testing.T) {
path := filepath.Join(t.TempDir(), "sub", "config.yaml")
in := Default()
in.UI.Language = "en"
in.UI.SoundVolume = 42
in.StacksDir = "/data/stacks"
if err := SaveTo(path, in); err != nil {
t.Fatalf("SaveTo: %v", err)
}
out, err := LoadFrom(path)
if err != nil {
t.Fatalf("LoadFrom: %v", err)
}
if out.UI.Language != "en" || out.UI.SoundVolume != 42 || out.StacksDir != "/data/stacks" {
t.Fatalf("roundtrip salah: %+v", out)
}
}
func TestPartialYamlKeepsDefaults(t *testing.T) {
path := filepath.Join(t.TempDir(), "config.yaml")
os.WriteFile(path, []byte("ui:\n language: en\n"), 0o644)
c, err := LoadFrom(path)
if err != nil {
t.Fatalf("LoadFrom: %v", err)
}
if c.UI.Language != "en" {
t.Fatalf("language: %s", c.UI.Language)
}
if c.UI.SoundVolume != 70 || !c.UI.SoundEnabled || !c.UI.AnimationEnabled {
t.Fatalf("field lain harus default: %+v", c.UI)
}
}
func TestNormalizeInvalidValues(t *testing.T) {
path := filepath.Join(t.TempDir(), "config.yaml")
os.WriteFile(path, []byte("ui:\n language: klingon\n sound_volume: 999\n"), 0o644)
c, err := LoadFrom(path)
if err != nil {
t.Fatalf("LoadFrom: %v", err)
}
if c.UI.Language != "id" {
t.Fatalf("language rusak harus fallback id: %s", c.UI.Language)
}
if c.UI.SoundVolume != 100 {
t.Fatalf("volume harus diklamp 100: %d", c.UI.SoundVolume)
}
}
func TestMalformedYamlIsError(t *testing.T) {
path := filepath.Join(t.TempDir(), "config.yaml")
os.WriteFile(path, []byte("ui: [ini: rusak\n"), 0o644)
if _, err := LoadFrom(path); err == nil {
t.Fatal("yaml rusak harusnya error")
}
}
func TestExpandPath(t *testing.T) {
home, _ := os.UserHomeDir()
if got := ExpandPath("~/x"); got != filepath.Join(home, "x") {
t.Fatalf("~/x = %s", got)
}
if got := ExpandPath("~"); got != home {
t.Fatalf("~ = %s", got)
}
if got := ExpandPath("/abs/path"); got != "/abs/path" {
t.Fatalf("abs berubah: %s", got)
}
}