Files
magpie/internal/gui/davsync_view_test.go
Gabyran abbe314f74 gui: Settings re-reads the WebDAV setup when redrawn; the off-state description names only what is on (#307)
Fixes #305. loadSettings() drops the page's cached davsync view so a refocus shows what magpie webdav set wrote, and the off-state description is built from the view's toggles like the CLI's status. An open sync form is still never rebuilt by a refocus (#104). Merged by hand over a tests README conflict; webdav-settings-refresh, old-webkit, click-scroll (Chromium, WebKit) and go test ./internal/gui ./internal/davsync pass.
2026-10-01 11:25:29 +08:00

68 lines
2.4 KiB
Go

package gui
import (
"encoding/json"
"net/http"
"net/http/httptest"
"testing"
"github.com/yetone/magpie/internal/davsync"
)
// The Settings page re-reads the WebDAV view when it is redrawn (the CLI
// can have changed the setup behind the window), so the endpoint must
// answer from the setup as it is on disk, never from a copy made when the
// page was first drawn. The view's keys/agents/library are what the page's
// description and the form's ticks are built from.
func TestDavsyncViewFollowsTheSetup(t *testing.T) {
sandboxHome(t)
mux := http.NewServeMux()
backupRoutes(mux, folderOnly{})
view := func() map[string]any {
t.Helper()
w := httptest.NewRecorder()
mux.ServeHTTP(w, httptest.NewRequest("GET", "/api/davsync", nil))
if w.Code != http.StatusOK {
t.Fatalf("%d %s", w.Code, w.Body)
}
var v map[string]any
json.Unmarshal(w.Body.Bytes(), &v)
return v
}
// off: the defaults the form's ticks would show
if v := view(); v["on"] != false || v["keys"] != true || v["agents"] != true || v["library"] != true {
t.Fatalf("off: %v", v)
}
// what `magpie webdav on … agents=no library=no` leaves (the CLI's own
// defaults for what it isn't told: keys yes), behind the window's back
no := false
if err := davsync.Configure(davsync.Config{URL: "https://dav.jianguoyun.com/dav/", Passphrase: "correct horse", Keys: true, Agents: false, Library: &no}); err != nil {
t.Fatal(err)
}
if v := view(); v["on"] != true || v["keys"] != true || v["agents"] != false || v["library"] != false || v["kind"] != "webdav" {
t.Fatalf("after the CLI change: %v", v)
}
// what `magpie s3 on …` leaves: the same re-read, a bucket's view
if err := davsync.Off(); err != nil {
t.Fatal(err)
}
if err := davsync.Configure(davsync.Config{URL: "s3://bucket/prefix", User: "key-id", Password: "secret", Passphrase: "correct horse",
Endpoint: "https://example.com", Region: "auto", PathStyle: true, Keys: false, Agents: true}); err != nil {
t.Fatal(err)
}
if v := view(); v["on"] != true || v["kind"] != "s3" || v["endpoint"] != "https://example.com" || v["keys"] != false || v["agents"] != true {
t.Fatalf("after an S3 change: %v", v)
}
// and what `magpie webdav off` leaves: off, the defaults back
if err := davsync.Off(); err != nil {
t.Fatal(err)
}
if v := view(); v["on"] != false || v["keys"] != true || v["agents"] != true || v["library"] != true {
t.Fatalf("off again: %v", v)
}
}