lockbox

password manager
Log | Files | Refs | README | LICENSE

commit d6ad4c1949694dfbe2520d2ed3c8d0b0091d477a
parent bb27ccae15be86424baafe72b810cfba0bf27313
Author: Sean Enck <sean@ttypty.com>
Date:   Thu,  2 Mar 2023 20:09:17 -0500

add stats

Diffstat:
Minternal/app/core.go | 14+++-----------
Ainternal/commands/stats.go | 26++++++++++++++++++++++++++
Ainternal/commands/stats_test.go | 33+++++++++++++++++++++++++++++++++
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") + } +}