commit d6ad4c1949694dfbe2520d2ed3c8d0b0091d477a
parent bb27ccae15be86424baafe72b810cfba0bf27313
Author: Sean Enck <sean@ttypty.com>
Date: Thu, 2 Mar 2023 20:09:17 -0500
add stats
Diffstat:
3 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/internal/app/core.go b/internal/app/core.go
@@ -138,21 +138,13 @@ func Run() error {
}
case cli.RemoveCommand:
return commands.Remove(os.Stdout, t, sub, confirm)
- case cli.ShowCommand, cli.ClipCommand, cli.StatsCommand:
+ case cli.StatsCommand:
+ return commands.Stats(os.Stdout, t, sub)
+ case cli.ShowCommand, cli.ClipCommand:
if len(args) != 3 {
return errors.New("entry required")
}
entry := args[2]
- if command == cli.StatsCommand {
- v, err := t.Get(entry, backend.StatsValue)
- if err != nil {
- return wrapped("unable to get stats", err)
- }
- if v != nil {
- fmt.Println(v.Value)
- }
- return nil
- }
clipboard := platform.Clipboard{}
isShow := command == cli.ShowCommand
if !isShow {
diff --git a/internal/commands/stats.go b/internal/commands/stats.go
@@ -0,0 +1,26 @@
+// Package commands can get stats
+package commands
+
+import (
+ "errors"
+ "fmt"
+ "io"
+
+ "github.com/enckse/lockbox/internal/backend"
+)
+
+// Stats will retrieve entry stats
+func Stats(w io.Writer, t *backend.Transaction, args []string) error {
+ if len(args) != 1 {
+ return errors.New("entry required")
+ }
+ entry := args[0]
+ v, err := t.Get(entry, backend.StatsValue)
+ if err != nil {
+ return fmt.Errorf("unable to get stats: %w", err)
+ }
+ if v != nil {
+ fmt.Fprintln(w, v.Value)
+ }
+ return nil
+}
diff --git a/internal/commands/stats_test.go b/internal/commands/stats_test.go
@@ -0,0 +1,33 @@
+package commands_test
+
+import (
+ "bytes"
+ "testing"
+
+ "github.com/enckse/lockbox/internal/backend"
+ "github.com/enckse/lockbox/internal/commands"
+)
+
+func TestStats(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")
+ tx := fullSetup(t, true)
+ var b bytes.Buffer
+ if err := commands.Stats(&b, tx, []string{}); err.Error() != "entry required" {
+ t.Errorf("invalid error: %v", err)
+ }
+ if err := commands.Stats(&b, tx, []string{"test/test2/test1"}); err != nil {
+ t.Errorf("invalid error: %v", err)
+ }
+ if b.String() == "" {
+ t.Error("no stats")
+ }
+ b = bytes.Buffer{}
+ if err := commands.Stats(&b, tx, []string{"tsest/test2/test1"}); err != nil {
+ t.Errorf("invalid error: %v", err)
+ }
+ if b.String() != "" {
+ t.Error("no stats")
+ }
+}