package goncfiles_test import ( "os" "path/filepath" "strings" "testing" "gitea.neitzel.de/konrad/go-nc-files" ) const testInitialFolder = "myapp" func TestAppIconLaunchCreatesInitialFolder(t *testing.T) { t.Parallel() root := t.TempDir() settings := filepath.Join(t.TempDir(), "settings.json") visit, err := goncfiles.OpenLocal(root, settings, testInitialFolder, "") if err != nil { t.Fatal(err) } if visit.SavedDefault != testInitialFolder { t.Fatalf("saved: %s", visit.SavedDefault) } info, err := os.Stat(filepath.Join(root, testInitialFolder)) if err != nil || !info.IsDir() { t.Fatalf("initial folder: %v", err) } if visit.WorkingDir() != filepath.Join(root, testInitialFolder) { t.Fatalf("working: %s", visit.WorkingDir()) } } func TestSetDefaultPersistsAndDoesNotNeedVisitFolder(t *testing.T) { t.Parallel() root := t.TempDir() settings := filepath.Join(t.TempDir(), "settings.json") if err := os.Mkdir(filepath.Join(root, "Zones"), 0o755); err != nil { t.Fatal(err) } visit, err := goncfiles.OpenLocal(root, settings, testInitialFolder, "") if err != nil { t.Fatal(err) } if err := visit.SetDefault("Zones"); err != nil { t.Fatal(err) } again, err := goncfiles.OpenLocal(root, settings, testInitialFolder, "") if err != nil { t.Fatal(err) } if again.SavedDefault != "Zones" { t.Fatalf("saved: %s", again.SavedDefault) } if again.WorkingDir() != filepath.Join(root, "Zones") { t.Fatalf("working: %s", again.WorkingDir()) } } func TestFilesViewLaunchDoesNotChangeSavedDefault(t *testing.T) { t.Parallel() root := t.TempDir() settings := filepath.Join(t.TempDir(), "settings.json") share := filepath.Join(root, "Shared", "TeamDNS") if err := os.MkdirAll(share, 0o755); err != nil { t.Fatal(err) } visit, err := goncfiles.OpenLocal(root, settings, testInitialFolder, "Shared/TeamDNS") if err != nil { t.Fatal(err) } if visit.SavedDefault != testInitialFolder { t.Fatalf("saved default must stay %s, got %s", testInitialFolder, visit.SavedDefault) } if visit.WorkingDir() != share { t.Fatalf("visit working: %s", visit.WorkingDir()) } if _, err := os.Stat(filepath.Join(root, testInitialFolder)); err == nil { t.Fatal("files-view launch must not create the initial folder") } } func TestFilesViewMissingFolderFailsClosed(t *testing.T) { t.Parallel() root := t.TempDir() settings := filepath.Join(t.TempDir(), "settings.json") _, err := goncfiles.OpenLocal(root, settings, testInitialFolder, "Missing/Folder") if err == nil { t.Fatal("expected error") } if !goncfiles.IsNotExist(err) { t.Fatalf("want ErrNotExist, got %v", err) } if _, err := os.Stat(filepath.Join(root, "Missing")); err == nil { t.Fatal("must not create the visit path") } if _, err := os.Stat(filepath.Join(root, testInitialFolder)); err == nil { t.Fatal("must not fall back to creating initial folder") } } func TestFileStorePersistsDefaultPath(t *testing.T) { t.Parallel() path := filepath.Join(t.TempDir(), "settings.json") store := goncfiles.FileStore{Path: path} if err := store.SetDefault("Zones"); err != nil { t.Fatal(err) } got, err := store.GetDefault() if err != nil || got != "Zones" { t.Fatalf("got %q err=%v", got, err) } body, err := os.ReadFile(path) if err != nil { t.Fatal(err) } if !strings.Contains(string(body), `"defaultPath"`) { t.Fatalf("expected defaultPath key in %s", body) } } func TestMemoryStore(t *testing.T) { t.Parallel() var m goncfiles.Memory if err := m.SetDefault("a"); err != nil { t.Fatal(err) } got, err := m.GetDefault() if err != nil || got != "a" { t.Fatalf("got %q err=%v", got, err) } }