Extract Files seam, WebDAV, and Visit from CheckDNS.

Publish go-nc-files v1 with local/WebDAV Root, DefaultPathStore, and
neutral Working Folder language; depends on go-nc-exapp v0.1.0.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Konrad Neitzel
2026-08-26 19:16:53 +02:00
co-authored by Cursor
commit 9068d8ba8e
14 changed files with 1308 additions and 0 deletions
+137
View File
@@ -0,0 +1,137 @@
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)
}
}