From 7ea9d9164aa228a3bad79ccf3338e67470f5a8e2 Mon Sep 17 00:00:00 2001 From: Jessica Sestak Date: Sun, 13 Jun 2021 20:16:19 -0700 Subject: [PATCH] Fixed TestNewCmdBrowse and added more tests --- pkg/cmd/browse/browse_test.go | 151 ++++++++++++++++++++++++++++++---- 1 file changed, 136 insertions(+), 15 deletions(-) diff --git a/pkg/cmd/browse/browse_test.go b/pkg/cmd/browse/browse_test.go index e73a6a067..05114f66a 100644 --- a/pkg/cmd/browse/browse_test.go +++ b/pkg/cmd/browse/browse_test.go @@ -8,27 +8,121 @@ import ( "github.com/cli/cli/pkg/cmdutil" "github.com/cli/cli/pkg/httpmock" "github.com/cli/cli/pkg/iostreams" + "github.com/google/shlex" "github.com/stretchr/testify/assert" ) func TestNewCmdBrowse(t *testing.T) { - f := cmdutil.Factory{} - var opts *BrowseOptions - // pass a stub implementation of `runBrowse` for testing to avoid having real `runBrowse` called - cmd := NewCmdBrowse(&f, func(o *BrowseOptions) error { - opts = o - return nil - }) + tests := []struct { + name string + cli string + factory func(*cmdutil.Factory) *cmdutil.Factory + wants BrowseOptions + wantsErr bool + }{ + { + name: "no arguments", + cli: "", + wantsErr: false, + }, + { + name: "settings flag", + cli: "--settings", + wants: BrowseOptions{ + SettingsFlag: true, + }, + wantsErr: false, + }, + { + name: "projects flag", + cli: "--projects", + wants: BrowseOptions{ + ProjectsFlag: true, + }, + wantsErr: false, + }, + { + name: "wiki flag", + cli: "--wiki", + wants: BrowseOptions{ + WikiFlag: true, + }, + wantsErr: false, + }, + { + name: "branch flag", + cli: "--branch main", + wants: BrowseOptions{ + Branch: "main", + }, + wantsErr: false, + }, + { + name: "branch flag without a branch name", + cli: "--branch", + wantsErr: true, + }, + { + name: "combination: settings projects", + cli: "--settings --projects", + wants: BrowseOptions{ + SettingsFlag: true, + ProjectsFlag: true, + }, + wantsErr: true, + }, + { + name: "combination: projects wiki", + cli: "--projects --wiki", + wants: BrowseOptions{ + ProjectsFlag: true, + WikiFlag: true, + }, + wantsErr: true, + }, + { + name: "passed argument", + cli: "main.go", + wants: BrowseOptions{ + SelectorArg: "main.go", + }, + wantsErr: false, + }, + { + name: "no arguments", + cli: "", + wantsErr: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + f := cmdutil.Factory{} + var opts *BrowseOptions + // pass a stub implementation of `runBrowse` for testing to avoid having real `runBrowse` called + cmd := NewCmdBrowse(&f, func(o *BrowseOptions) error { + opts = o + return nil + }) + argv, err := shlex.Split(tt.cli) + assert.NoError(t, err) + cmd.SetArgs(argv) + _, err = cmd.ExecuteC() - cmd.SetArgs([]string{"--branch", "main"}) - _, err := cmd.ExecuteC() - assert.NoError(t, err) + if tt.wantsErr { + assert.Error(t, err) + return - assert.Equal(t, "main", opts.Branch) - assert.Equal(t, "", opts.SelectorArg) - assert.Equal(t, false, opts.ProjectsFlag) - assert.Equal(t, false, opts.WikiFlag) - assert.Equal(t, false, opts.SettingsFlag) + } else { + assert.NoError(t, err) + } + + assert.Equal(t, tt.wants.Branch, opts.Branch) + assert.Equal(t, tt.wants.SelectorArg, opts.SelectorArg) + assert.Equal(t, tt.wants.ProjectsFlag, opts.ProjectsFlag) + assert.Equal(t, tt.wants.WikiFlag, opts.WikiFlag) + assert.Equal(t, tt.wants.SettingsFlag, opts.SettingsFlag) + }) + } } func Test_runBrowse(t *testing.T) { @@ -96,6 +190,33 @@ func Test_runBrowse(t *testing.T) { baseRepo: ghrepo.New("bchadwic", "cli"), expectedURL: "https://github.com/bchadwic/cli/issues/217", }, + { + name: "file with line argument", + opts: BrowseOptions{ + SelectorArg: "path/to/file.txt:32", + }, + baseRepo: ghrepo.New("bchadwic", "cli"), + defaultBranch: "trunk", + expectedURL: "https://github.com/bchadwic/cli/tree/trunk/path/to/file.txt#L32", + }, + { + name: "file with invalid line number", + opts: BrowseOptions{ + SelectorArg: "path/to/file.txt:32:32", + }, + baseRepo: ghrepo.New("bchadwic", "cli"), + defaultBranch: "trunk", + wantsErr: true, + }, + { + name: "file with line argument", + opts: BrowseOptions{ + SelectorArg: "path/to/file.txt:32", + }, + baseRepo: ghrepo.New("bchadwic", "cli"), + defaultBranch: "trunk", + expectedURL: "https://github.com/bchadwic/cli/tree/trunk/path/to/file.txt#L32", + }, } for _, tt := range tests {