Share local vaults from Android
This commit is contained in:
+84
-1
@@ -99,6 +99,33 @@ func (s *remoteOpenCaptureSession) OpenRemote(client webdav.Client, path string,
|
||||
return nil
|
||||
}
|
||||
|
||||
type saveCaptureSession struct {
|
||||
model vault.Model
|
||||
saveCount int
|
||||
saveErr error
|
||||
}
|
||||
|
||||
func (s *saveCaptureSession) Current() (vault.Model, error) {
|
||||
return s.model, nil
|
||||
}
|
||||
|
||||
func (s *saveCaptureSession) Save() error {
|
||||
s.saveCount++
|
||||
return s.saveErr
|
||||
}
|
||||
|
||||
type captureVaultSharer struct {
|
||||
path string
|
||||
title string
|
||||
err error
|
||||
}
|
||||
|
||||
func (s *captureVaultSharer) ShareVault(path, title string) error {
|
||||
s.path = path
|
||||
s.title = title
|
||||
return s.err
|
||||
}
|
||||
|
||||
func TestUIFiltersUsingVaultModelPathsAndSearch(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -367,7 +394,12 @@ func TestUIChildGroupsComeFromVaultModel(t *testing.T) {
|
||||
func TestUIAPITokenLifecycleManagement(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
u := newUIWithSession("desktop", &session.Manager{}, statePaths{
|
||||
DefaultSaveAsPath: filepath.Join(t.TempDir(), "vault.kdbx"),
|
||||
RecentVaultsPath: filepath.Join(t.TempDir(), "recent-vaults.json"),
|
||||
RecentRemotesPath: filepath.Join(t.TempDir(), "recent-remotes.json"),
|
||||
UIPreferencesPath: filepath.Join(t.TempDir(), "ui-prefs.json"),
|
||||
})
|
||||
u.masterPassword.SetText("correct horse battery staple")
|
||||
if err := u.createVaultAction(); err != nil {
|
||||
t.Fatalf("createVaultAction() error = %v", err)
|
||||
@@ -5787,6 +5819,57 @@ func TestUIConsumesPendingSharedVaultImportOnStartup(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUICurrentShareableVaultPathUsesSelectedVaultPath(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("phone", &session.Manager{})
|
||||
u.vaultPath.SetText("/vaults/crew-shared.kdbx")
|
||||
|
||||
if got := u.currentShareableVaultPath(); got != "/vaults/crew-shared.kdbx" {
|
||||
t.Fatalf("currentShareableVaultPath() = %q, want %q", got, "/vaults/crew-shared.kdbx")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIShareCurrentVaultActionSavesAndSharesCurrentVault(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
session := &saveCaptureSession{}
|
||||
sharer := &captureVaultSharer{}
|
||||
u := newUIWithSession("phone", session)
|
||||
u.vaultSharer = sharer
|
||||
u.vaultPath.SetText("/vaults/crew-shared.kdbx")
|
||||
|
||||
if err := u.shareCurrentVaultAction(); err != nil {
|
||||
t.Fatalf("shareCurrentVaultAction() error = %v", err)
|
||||
}
|
||||
if session.saveCount != 1 {
|
||||
t.Fatalf("shareCurrentVaultAction() saveCount = %d, want 1", session.saveCount)
|
||||
}
|
||||
if got := sharer.path; got != "/vaults/crew-shared.kdbx" {
|
||||
t.Fatalf("ShareVault path = %q, want %q", got, "/vaults/crew-shared.kdbx")
|
||||
}
|
||||
if got := sharer.title; got != "crew-shared.kdbx" {
|
||||
t.Fatalf("ShareVault title = %q, want %q", got, "crew-shared.kdbx")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIShareCurrentVaultActionRequiresVaultPath(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("phone", &saveCaptureSession{}, statePaths{
|
||||
DefaultSaveAsPath: filepath.Join(t.TempDir(), "vault.kdbx"),
|
||||
RecentVaultsPath: filepath.Join(t.TempDir(), "recent-vaults.json"),
|
||||
RecentRemotesPath: filepath.Join(t.TempDir(), "recent-remotes.json"),
|
||||
UIPreferencesPath: filepath.Join(t.TempDir(), "ui-prefs.json"),
|
||||
})
|
||||
u.vaultSharer = &captureVaultSharer{}
|
||||
|
||||
err := u.shareCurrentVaultAction()
|
||||
if err == nil || err.Error() != errVaultPathRequired {
|
||||
t.Fatalf("shareCurrentVaultAction() error = %v, want %q", err, errVaultPathRequired)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDefaultStatePathsUsesEnvironmentStateDirWhenFlagUnset(t *testing.T) {
|
||||
base := filepath.Join(t.TempDir(), "keepassgo-state-env")
|
||||
t.Setenv("KEEPASSGO_STATE_DIR", base)
|
||||
|
||||
Reference in New Issue
Block a user