Simplify KeePassGO desktop vault workflow
This commit is contained in:
+53
-25
@@ -408,26 +408,13 @@ func TestUIMasterKeyValidationErrorsAreVisible(t *testing.T) {
|
||||
|
||||
tests := []struct {
|
||||
name string
|
||||
mode vault.MasterKeyMode
|
||||
password string
|
||||
keyFile string
|
||||
wantError string
|
||||
}{
|
||||
{
|
||||
name: "password mode requires password",
|
||||
mode: vault.MasterKeyModePasswordOnly,
|
||||
wantError: "master password is required",
|
||||
},
|
||||
{
|
||||
name: "key file mode requires path",
|
||||
mode: vault.MasterKeyModeKeyFileOnly,
|
||||
wantError: "key file is required",
|
||||
},
|
||||
{
|
||||
name: "composite mode requires password",
|
||||
mode: vault.MasterKeyModePasswordAndKeyFile,
|
||||
keyFile: filepath.Join("/tmp", "ignored.key"),
|
||||
wantError: "master password is required",
|
||||
name: "requires either password or key file",
|
||||
wantError: "master password or key file is required",
|
||||
},
|
||||
}
|
||||
|
||||
@@ -437,7 +424,6 @@ func TestUIMasterKeyValidationErrorsAreVisible(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
u.setMasterKeyMode(tt.mode)
|
||||
u.masterPassword.SetText(tt.password)
|
||||
u.keyFilePath.SetText(tt.keyFile)
|
||||
|
||||
@@ -1670,6 +1656,44 @@ func TestUIUsesKeePassGOProductCopy(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIShowsLifecycleSetupOnlyBeforeVaultIsOpened(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
if !u.shouldShowLifecycleSetup() {
|
||||
t.Fatal("shouldShowLifecycleSetup() = false, want true before opening a vault")
|
||||
}
|
||||
|
||||
u.masterPassword.SetText("correct horse battery staple")
|
||||
if err := u.createVaultAction(); err != nil {
|
||||
t.Fatalf("createVaultAction() error = %v", err)
|
||||
}
|
||||
|
||||
if u.shouldShowLifecycleSetup() {
|
||||
t.Fatal("shouldShowLifecycleSetup() = true, want false after opening a vault")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUIRequiresExplicitEditModeForEntryEditor(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithModel("desktop", vault.Model{
|
||||
Entries: []vault.Entry{{ID: "1", Title: "Git Server", Path: []string{"Root"}}},
|
||||
})
|
||||
|
||||
u.filter()
|
||||
u.state.SelectedEntryID = "1"
|
||||
if u.editingEntry {
|
||||
t.Fatal("editingEntry = true, want false by default")
|
||||
}
|
||||
|
||||
u.editingEntry = true
|
||||
u.loadSelectedEntryIntoEditor()
|
||||
if !u.editingEntry {
|
||||
t.Fatal("editingEntry = false, want true after entering edit mode")
|
||||
}
|
||||
}
|
||||
|
||||
func TestUICopyActionsWriteExpectedClipboardContentsAndSanitizedFeedback(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
@@ -1942,28 +1966,32 @@ func TestUILocalLifecycleActionErrorsAreVisibleAndSpecific(t *testing.T) {
|
||||
u.runAction("create vault", u.createVaultAction)
|
||||
u.runAction("save vault", u.saveAction)
|
||||
|
||||
if got := u.state.StatusMessage; got != "" {
|
||||
t.Fatalf("status after failed save = %q, want empty", got)
|
||||
if got := u.state.StatusMessage; got != "save vault complete" {
|
||||
t.Fatalf("status after save = %q, want %q", got, "save vault complete")
|
||||
}
|
||||
if got := u.state.ErrorMessage; !strings.Contains(got, session.ErrNoPath.Error()) {
|
||||
t.Fatalf("error after failed save = %q, want %q", got, session.ErrNoPath.Error())
|
||||
if got := u.state.ErrorMessage; got != "" {
|
||||
t.Fatalf("error after save = %q, want empty", got)
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("save-as without target path", func(t *testing.T) {
|
||||
t.Run("save-as uses default target path", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
u := newUIWithSession("desktop", &session.Manager{})
|
||||
u.masterPassword.SetText("correct horse battery staple")
|
||||
u.defaultSaveAsPath = filepath.Join(t.TempDir(), "default-save-as.kdbx")
|
||||
|
||||
u.runAction("create vault", u.createVaultAction)
|
||||
u.runAction("save-as vault", u.saveAsAction)
|
||||
|
||||
if got := u.state.StatusMessage; got != "" {
|
||||
t.Fatalf("status after failed save-as = %q, want empty", got)
|
||||
if got := u.state.StatusMessage; got != "save-as vault complete" {
|
||||
t.Fatalf("status after save-as = %q, want %q", got, "save-as vault complete")
|
||||
}
|
||||
if got := u.state.ErrorMessage; got != "save-as path is required" {
|
||||
t.Fatalf("error after failed save-as = %q, want %q", got, "save-as path is required")
|
||||
if got := u.state.ErrorMessage; got != "" {
|
||||
t.Fatalf("error after save-as = %q, want empty", got)
|
||||
}
|
||||
if _, err := os.Stat(u.defaultSaveAsPath); err != nil {
|
||||
t.Fatalf("Stat(defaultSaveAsPath) error = %v", err)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
Reference in New Issue
Block a user