commit bb27ccae15be86424baafe72b810cfba0bf27313
parent 25325851851af09664fbcd7c901585aea2f53242
Author: Sean Enck <sean@ttypty.com>
Date: Thu, 2 Mar 2023 20:02:38 -0500
remove was moved
Diffstat:
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