Skip to content

Commit

Permalink
Increase test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
dominikschulz committed Dec 26, 2017
1 parent 5d8bcb8 commit 7a83791
Show file tree
Hide file tree
Showing 10 changed files with 219 additions and 18 deletions.
6 changes: 6 additions & 0 deletions action/action_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"testing"

"github.com/blang/semver"
"github.com/fatih/color"
"github.com/google/go-cmp/cmp"
gpgmock "github.com/justwatchcom/gopass/backend/gpg/mock"
"github.com/justwatchcom/gopass/config"
Expand Down Expand Up @@ -53,6 +54,10 @@ func newMock(ctx context.Context, dir string) (*Action, error) {
func capture(t *testing.T, fn func() error) string {
t.Helper()
old := os.Stdout

oldcol := color.NoColor
color.NoColor = true

r, w, _ := os.Pipe()
os.Stdout = w

Expand All @@ -67,6 +72,7 @@ func capture(t *testing.T, fn func() error) string {
// back to normal
_ = w.Close()
os.Stdout = old
color.NoColor = oldcol
if err != nil {
t.Errorf("Error: %s", err)
}
Expand Down
38 changes: 36 additions & 2 deletions action/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,8 @@ func TestConfig(t *testing.T) {
}
buf.Reset()

act.cfg.Mounts["foo"] = &config.StoreConfig{}

// action.printConfigValues
act.cfg.Mounts["foo"] = &config.StoreConfig{}
if err := act.printConfigValues(ctx, "", "nopager"); err != nil {
t.Errorf("Error: %s", err)
}
Expand All @@ -84,5 +83,40 @@ foo/nopager: false`
if sv != want {
t.Errorf("Wrong config result: '%s' != '%s'", sv, want)
}

delete(act.cfg.Mounts, "foo")
buf.Reset()

// config autoimport
fs := flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"autoimport"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)
if err := act.Config(ctx, c); err != nil {
t.Errorf("Error: %s", err)
}
want = `autoimport: true`
sv = strings.TrimSpace(buf.String())
if sv != want {
t.Errorf("Wrong config result: '%s' != '%s'", sv, want)
}
buf.Reset()

// config autoimport false
fs = flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"autoimport", "false"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)
if err := act.Config(ctx, c); err != nil {
t.Errorf("Error: %s", err)
}
want = `autoimport: false`
sv = strings.TrimSpace(buf.String())
if sv != want {
t.Errorf("Wrong config result: '%s' != '%s'", sv, want)
}
buf.Reset()

}
35 changes: 29 additions & 6 deletions action/copy_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,20 +27,43 @@ func TestCopy(t *testing.T) {
t.Fatalf("Error: %s", err)
}

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()
// copy foo bar
fs := flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"foo", "bar"}); err != nil {
t.Fatalf("Error: %s", err)
}
c := cli.NewContext(app, fs, nil)

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

if err := act.Copy(ctx, c); err != nil {
t.Errorf("Error: %s", err)
}
buf.Reset()

// copy not-found still-not-there
fs = flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"not-found", "still-not-there"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

if err := act.Copy(ctx, c); err == nil {
t.Errorf("Should fail")
}
buf.Reset()

// copy
fs = flag.NewFlagSet("default", flag.ContinueOnError)
c = cli.NewContext(app, fs, nil)

if err := act.Copy(ctx, c); err == nil {
t.Errorf("Should fail")
}
buf.Reset()
}
47 changes: 46 additions & 1 deletion action/create_test.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,21 @@
package action

import "testing"
import (
"bytes"
"context"
"flag"
"io/ioutil"
"os"
"testing"

"github.com/justwatchcom/gopass/utils/ctxutil"
"github.com/justwatchcom/gopass/utils/out"
"github.com/urfave/cli"
)

func TestExtractHostname(t *testing.T) {
for in, out := range map[string]string{
"": "",
"http://www.example.org/": "www.example.org",
"++#+++#jhlkadsrezu 33 553q ++++##$§&": "jhlkadsrezu_33_553q",
"www.example.org/?foo=bar#abc": "www.example.org",
Expand All @@ -13,3 +25,36 @@ func TestExtractHostname(t *testing.T) {
}
}
}

func TestCreate(t *testing.T) {
td, err := ioutil.TempDir("", "gopass-")
if err != nil {
t.Fatalf("Error: %s", err)
}
defer func() {
_ = os.RemoveAll(td)
}()

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
act, err := newMock(ctx, td)
if err != nil {
t.Fatalf("Error: %s", err)
}

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()
// create
fs := flag.NewFlagSet("default", flag.ContinueOnError)
c := cli.NewContext(app, fs, nil)

if err := act.Create(ctx, c); err == nil {
t.Errorf("Should fail")
}
buf.Reset()
}
39 changes: 36 additions & 3 deletions action/delete_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import (
"os"
"testing"

"github.com/justwatchcom/gopass/store/secret"
"github.com/justwatchcom/gopass/utils/ctxutil"
"github.com/justwatchcom/gopass/utils/out"
"github.com/urfave/cli"
)
Expand All @@ -22,21 +24,52 @@ func TestDelete(t *testing.T) {
}()

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
act, err := newMock(ctx, td)
if err != nil {
t.Fatalf("Error: %s", err)
}

app := cli.NewApp()
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()

// delete
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)

if err := act.Delete(ctx, c); err == nil || err.Error() != "Usage: action.test rm name" {
t.Errorf("Should fail")
}
buf.Reset()

// delete foo
fs := flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"foo"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

if err := act.Delete(ctx, c); err != nil {
t.Errorf("Error: %s", err)
}
buf.Reset()

// delete foo bar
if err := act.Store.Set(ctx, "foo", secret.New("123", "---\nbar: zab")); err != nil {
t.Errorf("Failed to add secret: %s", err)
}
fs = flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"foo", "bar"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

if err := act.Delete(ctx, c); err != nil {
t.Errorf("Error: %s", err)
}
buf.Reset()
}
5 changes: 5 additions & 0 deletions action/edit.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/fatih/color"
"github.com/justwatchcom/gopass/store/secret"
"github.com/justwatchcom/gopass/store/sub"
"github.com/justwatchcom/gopass/utils/ctxutil"
"github.com/justwatchcom/gopass/utils/fsutil"
"github.com/justwatchcom/gopass/utils/out"
"github.com/justwatchcom/gopass/utils/pwgen"
Expand Down Expand Up @@ -77,6 +78,10 @@ func (s *Action) Edit(ctx context.Context, c *cli.Context) error {
}

func (s *Action) editor(ctx context.Context, editor string, content []byte) ([]byte, error) {
if !ctxutil.IsTerminal(ctx) {
return nil, errors.New("need terminal")
}

tmpfile, err := fsutil.TempFile(ctx, "gopass-edit")
if err != nil {
return []byte{}, errors.Errorf("failed to create tmpfile %s: %s", editor, err)
Expand Down
22 changes: 19 additions & 3 deletions action/edit_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
"os/exec"
"testing"

"github.com/justwatchcom/gopass/utils/ctxutil"
"github.com/justwatchcom/gopass/utils/out"
"github.com/urfave/cli"
)
Expand All @@ -23,23 +24,38 @@ func TestEdit(t *testing.T) {
}()

ctx := context.Background()
ctx = ctxutil.WithAlwaysYes(ctx, true)
ctx = ctxutil.WithTerminal(ctx, false)
act, err := newMock(ctx, td)
if err != nil {
t.Fatalf("Error: %s", err)
}

app := cli.NewApp()
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()

// edit
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)
if err := act.Edit(ctx, c); err == nil || err.Error() != "Usage: action.test edit secret" {
t.Errorf("Should fail")
}

// edit foo
fs := flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"foo"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

if err := act.Edit(ctx, c); err == nil {
t.Errorf("Should fail")
}
buf.Reset()
}

func TestEditor(t *testing.T) {
Expand Down
37 changes: 34 additions & 3 deletions action/find_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"flag"
"io/ioutil"
"os"
"strings"
"testing"

"github.com/justwatchcom/gopass/utils/out"
Expand All @@ -27,16 +28,46 @@ func TestFind(t *testing.T) {
t.Fatalf("Error: %s", err)
}

app := cli.NewApp()
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)

buf := &bytes.Buffer{}
out.Stdout = buf
defer func() {
out.Stdout = os.Stdout
}()

app := cli.NewApp()

// find
c := cli.NewContext(app, flag.NewFlagSet("default", flag.ContinueOnError), nil)
if err := act.Find(ctx, c); err == nil || err.Error() != "Usage: action.test find arg" {
t.Errorf("Should fail")
}

// find fo
fs := flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"fo"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

out := capture(t, func() error {
return act.Find(ctx, c)
})
out = strings.TrimSpace(out)
want := "0xDEADBEEF"
if out != want {
t.Errorf("'%s' != '%s'", out, want)
}
buf.Reset()

// find yo
fs = flag.NewFlagSet("default", flag.ContinueOnError)
if err := fs.Parse([]string{"yo"}); err != nil {
t.Fatalf("Error: %s", err)
}
c = cli.NewContext(app, fs, nil)

if err := act.Find(ctx, c); err == nil {
t.Errorf("Should fail")
}
buf.Reset()
}
4 changes: 4 additions & 0 deletions utils/cui/cui.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (

"github.com/fatih/color"
"github.com/jroimartin/gocui"
"github.com/justwatchcom/gopass/utils/ctxutil"
)

type selection struct {
Expand Down Expand Up @@ -161,6 +162,9 @@ func (s *selection) sync(g *gocui.Gui, v *gocui.View) error {
// GetSelection show a navigateable multiple-choice list to the user
// and returns the selected entry along with the action
func GetSelection(ctx context.Context, prompt, usage string, choices []string) (string, int) {
if ctxutil.IsAlwaysYes(ctx) || !ctxutil.IsInteractive(ctx) {
return "impossible", 0
}
g, err := gocui.NewGui(gocui.OutputNormal)
if err != nil {
panic(err)
Expand Down
Loading

0 comments on commit 7a83791

Please sign in to comment.