gostations/filer_test.go

140 lines
3.0 KiB
Go
Raw Normal View History

package main
import (
"os"
"path/filepath"
"testing"
)
func TestCreateIniFile_Unit(t *testing.T) {
t.Parallel()
t.Log("✓ Fast createIniFile unit test")
tests := []struct {
name string
fpath string
setup func(string)
wantLen int
wantFile bool
}{
{
name: "happy path",
fpath: "testdata/config.ini",
wantLen: 0,
wantFile: true,
},
{
name: "dir already exists",
fpath: "testdata/config.ini",
setup: func(dir string) {
os.MkdirAll(dir, 0770)
},
wantLen: 0,
wantFile: true,
},
{
name: "deep nested dir",
fpath: "testdata/nested/sub/dir/config.ini",
wantLen: 0,
wantFile: true,
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
dir := t.TempDir()
fpath := filepath.Join(dir, tt.fpath)
origWd, err := os.Getwd()
if err != nil {
t.Fatalf("failed to get working dir: %v", err)
}
if err := os.Chdir(dir); err != nil {
t.Fatalf("failed to chdir: %v", err)
}
defer func() {
if err := os.Chdir(origWd); err != nil {
t.Errorf("failed to restore working dir: %v", err)
}
}()
if tt.setup != nil {
tt.setup(filepath.Dir(fpath))
}
errs := createIniFile(fpath)
if len(errs) != tt.wantLen {
t.Errorf("createIniFile() got %d errors = %v, want len %d", len(errs), errs, tt.wantLen)
}
exists := false
if tt.wantFile {
exists = true
if _, err := os.Stat(fpath); err != nil {
if os.IsNotExist(err) {
exists = false
} else {
t.Errorf("stat(%q) unexpected error: %v", fpath, err)
}
}
}
if exists != tt.wantFile {
t.Errorf("file exists = %v, want %v", exists, tt.wantFile)
}
if tt.wantFile {
data, err := os.ReadFile(fpath)
if err != nil {
t.Errorf("failed to read created file: %v", err)
return
}
const wantContent = `[DEFAULT]
radio_browser.api=all.api.radio-browser.info
player.command=mpv
player.options=--no-video
menu_items.max=9999
`
if string(data) != wantContent {
t.Errorf("file content mismatch:\ngot: %q\nwant: %q", string(data), wantContent)
}
}
})
}
}
func TestCreateIniFile_Live(t *testing.T) {
if !testing.Short() {
t.Skip("skipping live integration test. Run with:\n go test -run TestCreateIniFile_Live -short -v")
}
t.Log("🧪 Running live integration test...")
dir := t.TempDir()
fpath := filepath.Join(dir, "live_config.ini")
t.Logf("🧪 Testing with real file path: %s", fpath)
errs := createIniFile(fpath)
t.Logf("🧪 createIniFile returned %d errors", len(errs))
if len(errs) > 0 {
t.Errorf("unexpected errors: %v", errs)
return
}
data, err := os.ReadFile(fpath)
if err != nil {
t.Fatalf("failed to read created file: %v", err)
}
const wantContent = `[DEFAULT]
radio_browser.api=all.api.radio-browser.info
player.command=mpv
player.options=--no-video
menu_items.max=9999
`
if string(data) != wantContent {
t.Errorf("file content mismatch:\ngot: %q\nwant: %q", string(data), wantContent)
}
t.Logf("🧪 Live test PASSED: file created successfully with correct content")
}