lockbox

password manager
Log | Files | Refs | README | LICENSE

commit bb27ccae15be86424baafe72b810cfba0bf27313
parent 25325851851af09664fbcd7c901585aea2f53242
Author: Sean Enck <sean@ttypty.com>
Date:   Thu,  2 Mar 2023 20:02:38 -0500

remove was moved

Diffstat:
Minternal/app/core.go | 24+-----------------------
Ainternal/commands/remove.go | 38++++++++++++++++++++++++++++++++++++++
Ainternal/commands/remove_test.go | 30++++++++++++++++++++++++++++++
Mscripts/testing/expected.log | 2+-
4 files changed, 70 insertions(+), 24 deletions(-)

diff --git a/internal/app/core.go b/internal/app/core.go @@ -137,29 +137,7 @@ func Run() error { fmt.Println() } case cli.RemoveCommand: - if len(args) != 3 { - return errors.New("remove requires an entry") - } - deleting := args[2] - postfixRemove := "y" - existings, err := t.MatchPath(deleting) - if err != nil { - return wrapped("unable to get entry", err) - } - - if len(existings) > 1 { - postfixRemove = "ies" - fmt.Println("selected entities:") - for _, e := range existings { - fmt.Printf(" %s\n", e.Path) - } - fmt.Println("") - } - if confirm(fmt.Sprintf("delete entr%s", postfixRemove)) { - if err := t.RemoveAll(existings); err != nil { - return wrapped("unable to remove entry", err) - } - } + return commands.Remove(os.Stdout, t, sub, confirm) case cli.ShowCommand, cli.ClipCommand, cli.StatsCommand: if len(args) != 3 { return errors.New("entry required") diff --git a/internal/commands/remove.go b/internal/commands/remove.go @@ -0,0 +1,38 @@ +// Package commands can remove an entry +package commands + +import ( + "errors" + "fmt" + "io" + + "github.com/enckse/lockbox/internal/backend" +) + +// Remove will remove an entry +func Remove(w io.Writer, t *backend.Transaction, args []string, confirm func(string) bool) error { + if len(args) != 1 { + return errors.New("remove requires an entry") + } + deleting := args[0] + postfixRemove := "y" + existings, err := t.MatchPath(deleting) + if err != nil { + return err + } + + if len(existings) > 1 { + postfixRemove = "ies" + fmt.Fprintln(w, "selected entities:") + for _, e := range existings { + fmt.Fprintf(w, " %s\n", e.Path) + } + fmt.Fprintln(w, "") + } + if confirm(fmt.Sprintf("delete entr%s", postfixRemove)) { + if err := t.RemoveAll(existings); err != nil { + return fmt.Errorf("unable to remove: %w", err) + } + } + return nil +} diff --git a/internal/commands/remove_test.go b/internal/commands/remove_test.go @@ -0,0 +1,30 @@ +package commands_test + +import ( + "bytes" + "testing" + + "github.com/enckse/lockbox/internal/backend" + "github.com/enckse/lockbox/internal/commands" +) + +func TestRemove(t *testing.T) { + setup(t) + fullSetup(t, true).Insert(backend.NewPath("test", "test2", "test1"), "pass") + fullSetup(t, true).Insert(backend.NewPath("test", "test2", "test3"), "pass") + m := mockConfirm{} + var buf bytes.Buffer + if err := commands.Remove(&buf, fullSetup(t, true), []string{}, m.prompt); err.Error() != "remove requires an entry" { + t.Errorf("invalid error: %v", err) + } + if err := commands.Remove(&buf, fullSetup(t, true), []string{"a", "b"}, m.prompt); err.Error() != "remove requires an entry" { + t.Errorf("invalid error: %v", err) + } + m.called = false + if err := commands.Remove(&buf, fullSetup(t, true), []string{"tzzzest/test2/test1"}, m.prompt); err.Error() != "unable to remove: no entities given" { + t.Errorf("invalid error: %v", err) + } + if !m.called { + t.Error("no remove") + } +} diff --git a/scripts/testing/expected.log b/scripts/testing/expected.log @@ -40,7 +40,7 @@ test/k/totp: delete entry? (y/N) delete entry? (y/N) -delete entry? (y/N) unable to remove entry (no entities given) +delete entry? (y/N) unable to remove: no entities given exit status 1