Restore per-vault groups and scroll edit forms
This commit is contained in:
@@ -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()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user