diff --git a/main.go b/main.go index 397d6be..9a03989 100644 --- a/main.go +++ b/main.go @@ -1581,6 +1581,9 @@ func (u *ui) persistSyncDialogRemoteBinding(baseURL, remotePath string) error { if err != nil { return err } + if err := u.state.Save(); err != nil { + return err + } u.selectedVaultRemoteProfileID = binding.RemoteProfileID u.selectedVaultRemoteCredentialEntryID = binding.CredentialEntryID u.selectedVaultRemoteSyncMode = binding.SyncMode diff --git a/main_test.go b/main_test.go index a552d08..532a8a4 100644 --- a/main_test.go +++ b/main_test.go @@ -5924,7 +5924,13 @@ func TestUIOpenRemoteSyncSetupDialogPrefillsCurrentVaultSetupFlow(t *testing.T) func TestUISelectedLocalVaultRemoteSyncSummaryMentionsSetup(t *testing.T) { t.Parallel() - u := newUIWithSession("desktop", &session.Manager{}) + dir := t.TempDir() + u := newUIWithSession("desktop", &session.Manager{}, statePaths{ + DefaultSaveAsPath: filepath.Join(dir, "vault.kdbx"), + RecentVaultsPath: filepath.Join(dir, "recent-vaults.json"), + RecentRemotesPath: filepath.Join(dir, "recent-remotes.json"), + UIPreferencesPath: filepath.Join(dir, "ui-prefs.json"), + }) if got := u.selectedLocalVaultRemoteSyncSummary("/vaults/family.kdbx"); got != "Open this vault to set up a WebDAV sync target for it." { t.Fatalf("selectedLocalVaultRemoteSyncSummary() = %q, want setup guidance", got) @@ -6003,7 +6009,13 @@ func TestUIRemoteSyncSetupPersistsBindingAfterSuccessfulPush(t *testing.T) { })) defer server.Close() - u := newUIWithSession("desktop", &session.Manager{}) + dir := t.TempDir() + u := newUIWithSession("desktop", &session.Manager{}, statePaths{ + DefaultSaveAsPath: filepath.Join(dir, "vault.kdbx"), + RecentVaultsPath: filepath.Join(dir, "recent-vaults.json"), + RecentRemotesPath: filepath.Join(dir, "recent-remotes.json"), + UIPreferencesPath: filepath.Join(dir, "ui-prefs.json"), + }) u.masterPassword.SetText(key.Password) u.vaultPath.SetText(currentPath) if err := u.openVaultAction(); err != nil { @@ -6038,6 +6050,29 @@ func TestUIRemoteSyncSetupPersistsBindingAfterSuccessfulPush(t *testing.T) { if got := u.recentRemotes[0].LocalVaultPath; got != currentPath { t.Fatalf("recentRemotes[0].LocalVaultPath = %q, want %q", got, currentPath) } + + var reopened session.Manager + if err := reopened.Open(currentPath, key); err != nil { + t.Fatalf("reopened.Open(currentPath) error = %v", err) + } + reopenedModel, err := reopened.Current() + if err != nil { + t.Fatalf("reopened.Current() error = %v", err) + } + profiles := reopenedModel.RemoteProfiles + if len(profiles) != 1 { + t.Fatalf("len(reopened.RemoteProfiles) = %d, want 1 persisted profile", len(profiles)) + } + if profiles[0].BaseURL != server.URL || profiles[0].Path != "vaults/other.kdbx" { + t.Fatalf("reopened.RemoteProfiles[0] = %#v, want persisted setup target", profiles[0]) + } + cred, err := reopenedModel.EntryByID(u.selectedVaultRemoteCredentialEntryID) + if err != nil { + t.Fatalf("reopened.EntryByID(saved credential) error = %v", err) + } + if cred.Username != "tjulian" || cred.Password != "token-1" { + t.Fatalf("reopened saved credential = %#v, want tjulian/token-1", cred) + } } func TestUISaveCurrentRemoteBindingActionPersistsBindingIntoVault(t *testing.T) {