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>
138 lines
3.6 KiB
Go
138 lines
3.6 KiB
Go
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)
|
|
}
|
|
}
|