Restore per-vault groups and scroll edit forms

This commit is contained in:
Joe Julian
2026-03-29 16:32:54 -07:00
parent 20d5b3ba3d
commit d7026d5c0e
2 changed files with 199 additions and 13 deletions
+83
View File
@@ -1822,6 +1822,89 @@ func TestUILoadsRecentVaultsFromPersistedConfig(t *testing.T) {
}
}
func TestUIRecentVaultsPersistLastOpenedGroupPerVault(t *testing.T) {
t.Parallel()
configPath := filepath.Join(t.TempDir(), "recent-vaults.json")
first := newUIWithSession("desktop", &session.Manager{})
first.recentVaultsPath = configPath
first.recentVaults = nil
first.currentPath = []string{"Root", "Internet"}
first.syncedPath = []string{"Root", "Internet"}
first.noteRecentVault("/tmp/one.kdbx")
first.currentPath = []string{"Root", "Home Assistant"}
first.syncedPath = []string{"Root", "Home Assistant"}
first.noteRecentVault("/tmp/two.kdbx")
first.currentPath = []string{"Root", "Finance"}
first.syncedPath = []string{"Root", "Finance"}
first.noteRecentVault("/tmp/one.kdbx")
second := newUIWithSession("desktop", &session.Manager{})
second.recentVaultsPath = configPath
second.recentVaults = nil
second.loadRecentVaults()
if got := second.recentVaults; !slices.Equal(got, []string{"/tmp/one.kdbx", "/tmp/two.kdbx"}) {
t.Fatalf("recentVaults after reload = %v, want [/tmp/one.kdbx /tmp/two.kdbx]", got)
}
if got := second.recentVaultGroup("/tmp/one.kdbx"); !slices.Equal(got, []string{"Root", "Finance"}) {
t.Fatalf("recentVaultGroup(one) = %v, want [Root Finance]", got)
}
if got := second.recentVaultGroup("/tmp/two.kdbx"); !slices.Equal(got, []string{"Root", "Home Assistant"}) {
t.Fatalf("recentVaultGroup(two) = %v, want [Root Home Assistant]", got)
}
}
func TestUIOpenVaultRestoresLastOpenedGroupForThatVault(t *testing.T) {
t.Parallel()
dir := t.TempDir()
path := filepath.Join(dir, "keepass.kdbx")
statePath := filepath.Join(dir, "recent-vaults.json")
u := newUIWithSession("desktop", &session.Manager{})
u.recentVaultsPath = statePath
u.masterPassword.SetText("correct horse battery staple")
if err := u.createVaultAction(); err != nil {
t.Fatalf("createVaultAction() error = %v", err)
}
if err := u.state.UpsertEntry(vault.Entry{
ID: "entry-1",
Title: "Vault Console",
Username: "dannyocean",
Password: "token-1",
URL: "https://vault.crew.example.invalid",
Path: []string{"Root", "Internet"},
}); err != nil {
t.Fatalf("UpsertEntry() error = %v", err)
}
u.state.NavigateToPath([]string{"Root", "Internet"})
u.currentPath = []string{"Root", "Internet"}
u.syncedPath = []string{"Root", "Internet"}
u.saveAsPath.SetText(path)
if err := u.saveAsAction(); err != nil {
t.Fatalf("saveAsAction() error = %v", err)
}
reopened := newUIWithSession("desktop", &session.Manager{})
reopened.recentVaultsPath = statePath
reopened.recentVaults = nil
reopened.loadRecentVaults()
reopened.masterPassword.SetText("correct horse battery staple")
reopened.vaultPath.SetText(path)
if err := reopened.openVaultAction(); err != nil {
t.Fatalf("openVaultAction() error = %v", err)
}
if got := reopened.displayPath(); !slices.Equal(got, []string{"Internet"}) {
t.Fatalf("displayPath() after reopen = %v, want [Internet]", got)
}
if got := reopened.state.CurrentPath; !slices.Equal(got, []string{"Root", "Internet"}) {
t.Fatalf("state.CurrentPath after reopen = %v, want [Root Internet]", got)
}
}
func TestDefaultStatePathsUsesProvidedStateDir(t *testing.T) {
t.Parallel()