From 79532e76353e2977845d071f891a426fa2968bcc Mon Sep 17 00:00:00 2001 From: Erin Call Date: Fri, 17 Jan 2020 11:12:53 -0800 Subject: [PATCH] Extract the debug/namespace flags into run.Config [#67] This is a general-purpose cleanup commit; every step except InitKube had the same six "add the --debug and --namespace flags if applicable" code. --- internal/run/addrepo.go | 10 +----- internal/run/addrepo_test.go | 40 ------------------------ internal/run/config.go | 11 +++++++ internal/run/config_test.go | 13 ++++++++ internal/run/depupdate.go | 10 +----- internal/run/depupdate_test.go | 53 -------------------------------- internal/run/help.go | 6 ++-- internal/run/help_test.go | 18 ----------- internal/run/lint.go | 10 +----- internal/run/lint_test.go | 56 ---------------------------------- internal/run/uninstall.go | 10 +----- internal/run/uninstall_test.go | 42 ------------------------- internal/run/upgrade.go | 10 +----- 13 files changed, 31 insertions(+), 258 deletions(-) diff --git a/internal/run/addrepo.go b/internal/run/addrepo.go index 05d5f3b..5ff7a6e 100644 --- a/internal/run/addrepo.go +++ b/internal/run/addrepo.go @@ -39,15 +39,7 @@ func (a *AddRepo) Prepare() error { name := split[0] url := split[1] - args := make([]string, 0) - - if a.namespace != "" { - args = append(args, "--namespace", a.namespace) - } - if a.debug { - args = append(args, "--debug") - } - + args := a.globalFlags() args = append(args, "repo", "add", name, url) a.cmd = command(helmBin, args...) diff --git a/internal/run/addrepo_test.go b/internal/run/addrepo_test.go index 86c4ad1..4760d45 100644 --- a/internal/run/addrepo_test.go +++ b/internal/run/addrepo_test.go @@ -1,7 +1,6 @@ package run import ( - "fmt" "github.com/golang/mock/gomock" "github.com/pelotech/drone-helm3/internal/env" "github.com/stretchr/testify/suite" @@ -97,42 +96,3 @@ func (suite *AddRepoTestSuite) TestPrepareWithEqualSignInURL() { suite.NoError(a.Prepare()) suite.Contains(suite.commandArgs, "https://github.com/arthur_claypool/samaritan?version=2.1") } - -func (suite *AddRepoTestSuite) TestNamespaceFlag() { - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - cfg := env.Config{ - Namespace: "alliteration", - } - a := NewAddRepo(cfg, "edeath=https://github.com/theater_guy/e-death") - - suite.NoError(a.Prepare()) - suite.Equal(suite.commandPath, helmBin) - suite.Equal(suite.commandArgs, []string{"--namespace", "alliteration", - "repo", "add", "edeath", "https://github.com/theater_guy/e-death"}) -} - -func (suite *AddRepoTestSuite) TestDebugFlag() { - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - - stderr := strings.Builder{} - - command = func(path string, args ...string) cmd { - suite.mockCmd.EXPECT(). - String(). - Return(fmt.Sprintf("%s %s", path, strings.Join(args, " "))) - - return suite.mockCmd - } - - cfg := env.Config{ - Debug: true, - Stderr: &stderr, - } - a := NewAddRepo(cfg, "edeath=https://github.com/the_bug/e-death") - - suite.Require().NoError(a.Prepare()) - suite.Equal(fmt.Sprintf("Generated command: '%s --debug "+ - "repo add edeath https://github.com/the_bug/e-death'\n", helmBin), stderr.String()) -} diff --git a/internal/run/config.go b/internal/run/config.go index 7a20862..268482c 100644 --- a/internal/run/config.go +++ b/internal/run/config.go @@ -20,3 +20,14 @@ func newConfig(cfg env.Config) *config { stderr: cfg.Stderr, } } + +func (cfg *config) globalFlags() []string { + flags := []string{} + if cfg.debug { + flags = append(flags, "--debug") + } + if cfg.namespace != "" { + flags = append(flags, "--namespace", cfg.namespace) + } + return flags +} diff --git a/internal/run/config_test.go b/internal/run/config_test.go index fd781bd..88dbfc4 100644 --- a/internal/run/config_test.go +++ b/internal/run/config_test.go @@ -33,3 +33,16 @@ func (suite *ConfigTestSuite) TestNewConfig() { stderr: stderr, }, cfg) } + +func (suite *ConfigTestSuite) TestGlobalFlags() { + cfg := config{ + debug: true, + namespace: "public", + } + flags := cfg.globalFlags() + suite.Equal([]string{"--debug", "--namespace", "public"}, flags) + + cfg = config{} + flags = cfg.globalFlags() + suite.Equal([]string{}, flags) +} diff --git a/internal/run/depupdate.go b/internal/run/depupdate.go index 667a429..551e7e7 100644 --- a/internal/run/depupdate.go +++ b/internal/run/depupdate.go @@ -31,15 +31,7 @@ func (d *DepUpdate) Prepare() error { return fmt.Errorf("chart is required") } - args := make([]string, 0) - - if d.namespace != "" { - args = append(args, "--namespace", d.namespace) - } - if d.debug { - args = append(args, "--debug") - } - + args := d.globalFlags() args = append(args, "dependency", "update", d.chart) d.cmd = command(helmBin, args...) diff --git a/internal/run/depupdate_test.go b/internal/run/depupdate_test.go index 73c3563..ef553a5 100644 --- a/internal/run/depupdate_test.go +++ b/internal/run/depupdate_test.go @@ -1,7 +1,6 @@ package run import ( - "fmt" "github.com/golang/mock/gomock" "github.com/pelotech/drone-helm3/internal/env" "github.com/stretchr/testify/suite" @@ -71,58 +70,6 @@ func (suite *DepUpdateTestSuite) TestPrepareAndExecute() { suite.NoError(d.Execute()) } -func (suite *DepUpdateTestSuite) TestPrepareNamespaceFlag() { - defer suite.ctrl.Finish() - - cfg := env.Config{ - Namespace: "spotify", - Chart: "your_top_songs_2019", - } - - command = func(path string, args ...string) cmd { - suite.Equal([]string{"--namespace", "spotify", "dependency", "update", "your_top_songs_2019"}, args) - - return suite.mockCmd - } - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - - d := NewDepUpdate(cfg) - - suite.Require().NoError(d.Prepare()) -} - -func (suite *DepUpdateTestSuite) TestPrepareDebugFlag() { - defer suite.ctrl.Finish() - - stdout := strings.Builder{} - stderr := strings.Builder{} - cfg := env.Config{ - Chart: "your_top_songs_2019", - Debug: true, - Stdout: &stdout, - Stderr: &stderr, - } - - command = func(path string, args ...string) cmd { - suite.mockCmd.EXPECT(). - String(). - Return(fmt.Sprintf("%s %s", path, strings.Join(args, " "))) - - return suite.mockCmd - } - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - - d := NewDepUpdate(cfg) - - suite.Require().NoError(d.Prepare()) - - want := fmt.Sprintf("Generated command: '%s --debug dependency update your_top_songs_2019'\n", helmBin) - suite.Equal(want, stderr.String()) - suite.Equal("", stdout.String()) -} - func (suite *DepUpdateTestSuite) TestPrepareChartRequired() { d := NewDepUpdate(env.Config{}) diff --git a/internal/run/help.go b/internal/run/help.go index 79f4101..f5609cd 100644 --- a/internal/run/help.go +++ b/internal/run/help.go @@ -34,10 +34,8 @@ func (h *Help) Execute() error { // Prepare gets the Help ready to execute. func (h *Help) Prepare() error { - args := []string{"help"} - if h.debug { - args = append([]string{"--debug"}, args...) - } + args := h.globalFlags() + args = append(args, "help") h.cmd = command(helmBin, args...) h.cmd.Stdout(h.stdout) diff --git a/internal/run/help_test.go b/internal/run/help_test.go index bdc9dbe..d85cc35 100644 --- a/internal/run/help_test.go +++ b/internal/run/help_test.go @@ -1,7 +1,6 @@ package run import ( - "fmt" "github.com/golang/mock/gomock" "github.com/pelotech/drone-helm3/internal/env" "github.com/stretchr/testify/assert" @@ -75,20 +74,3 @@ func (suite *HelpTestSuite) TestExecute() { help.helmCommand = "get down on friday" suite.EqualError(help.Execute(), "unknown command 'get down on friday'") } - -func (suite *HelpTestSuite) TestPrepareDebugFlag() { - stdout := strings.Builder{} - stderr := strings.Builder{} - cfg := env.Config{ - Debug: true, - Stdout: &stdout, - Stderr: &stderr, - } - - help := NewHelp(cfg) - help.Prepare() - - want := fmt.Sprintf("Generated command: '%s --debug help'\n", helmBin) - suite.Equal(want, stderr.String()) - suite.Equal("", stdout.String()) -} diff --git a/internal/run/lint.go b/internal/run/lint.go index 242e113..7752f8d 100644 --- a/internal/run/lint.go +++ b/internal/run/lint.go @@ -39,15 +39,7 @@ func (l *Lint) Prepare() error { return fmt.Errorf("chart is required") } - args := make([]string, 0) - - if l.namespace != "" { - args = append(args, "--namespace", l.namespace) - } - if l.debug { - args = append(args, "--debug") - } - + args := l.globalFlags() args = append(args, "lint") if l.values != "" { diff --git a/internal/run/lint_test.go b/internal/run/lint_test.go index 1241dfd..42fd923 100644 --- a/internal/run/lint_test.go +++ b/internal/run/lint_test.go @@ -1,7 +1,6 @@ package run import ( - "fmt" "github.com/golang/mock/gomock" "github.com/pelotech/drone-helm3/internal/env" "github.com/stretchr/testify/suite" @@ -126,58 +125,3 @@ func (suite *LintTestSuite) TestPrepareWithLintFlags() { err := l.Prepare() suite.Require().Nil(err) } - -func (suite *LintTestSuite) TestPrepareWithDebugFlag() { - defer suite.ctrl.Finish() - - stderr := strings.Builder{} - - cfg := env.Config{ - Debug: true, - Stderr: &stderr, - Chart: "./scotland/top_40", - } - l := NewLint(cfg) - - command = func(path string, args ...string) cmd { - suite.mockCmd.EXPECT(). - String(). - Return(fmt.Sprintf("%s %s", path, strings.Join(args, " "))) - - return suite.mockCmd - } - - suite.mockCmd.EXPECT().Stdout(gomock.Any()) - suite.mockCmd.EXPECT().Stderr(&stderr) - - err := l.Prepare() - suite.Require().Nil(err) - - want := fmt.Sprintf("Generated command: '%s --debug lint ./scotland/top_40'\n", helmBin) - suite.Equal(want, stderr.String()) -} - -func (suite *LintTestSuite) TestPrepareWithNamespaceFlag() { - defer suite.ctrl.Finish() - - cfg := env.Config{ - Namespace: "table-service", - Chart: "./wales/top_40", - } - l := NewLint(cfg) - - actual := []string{} - command = func(path string, args ...string) cmd { - actual = args - return suite.mockCmd - } - - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - - err := l.Prepare() - suite.Require().Nil(err) - - expected := []string{"--namespace", "table-service", "lint", "./wales/top_40"} - suite.Equal(expected, actual) -} diff --git a/internal/run/uninstall.go b/internal/run/uninstall.go index 186cb16..d0cce60 100644 --- a/internal/run/uninstall.go +++ b/internal/run/uninstall.go @@ -35,15 +35,7 @@ func (u *Uninstall) Prepare() error { return fmt.Errorf("release is required") } - args := make([]string, 0) - - if u.namespace != "" { - args = append(args, "--namespace", u.namespace) - } - if u.debug { - args = append(args, "--debug") - } - + args := u.globalFlags() args = append(args, "uninstall") if u.dryRun { diff --git a/internal/run/uninstall_test.go b/internal/run/uninstall_test.go index 69bde6e..b52ebfd 100644 --- a/internal/run/uninstall_test.go +++ b/internal/run/uninstall_test.go @@ -1,11 +1,9 @@ package run import ( - "fmt" "github.com/golang/mock/gomock" "github.com/pelotech/drone-helm3/internal/env" "github.com/stretchr/testify/suite" - "strings" "testing" ) @@ -110,46 +108,6 @@ func (suite *UninstallTestSuite) TestPrepareKeepHistoryFlag() { suite.Equal(expected, suite.actualArgs) } -func (suite *UninstallTestSuite) TestPrepareNamespaceFlag() { - cfg := env.Config{ - Release: "carly_simon_run_away_with_me", - Namespace: "emotion", - } - u := NewUninstall(cfg) - - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(gomock.Any()).AnyTimes() - - suite.NoError(u.Prepare()) - expected := []string{"--namespace", "emotion", "uninstall", "carly_simon_run_away_with_me"} - suite.Equal(expected, suite.actualArgs) -} - -func (suite *UninstallTestSuite) TestPrepareDebugFlag() { - stderr := strings.Builder{} - cfg := env.Config{ - Release: "just_a_band_huff_and_puff", - Debug: true, - Stderr: &stderr, - } - u := NewUninstall(cfg) - - command = func(path string, args ...string) cmd { - suite.mockCmd.EXPECT(). - String(). - Return(fmt.Sprintf("%s %s", path, strings.Join(args, " "))) - - return suite.mockCmd - } - - suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() - suite.mockCmd.EXPECT().Stderr(&stderr).AnyTimes() - - suite.NoError(u.Prepare()) - suite.Equal(fmt.Sprintf("Generated command: '%s --debug "+ - "uninstall just_a_band_huff_and_puff'\n", helmBin), stderr.String()) -} - func (suite *UninstallTestSuite) TestPrepareRequiresRelease() { // These aren't really expected, but allowing them gives clearer test-failure messages suite.mockCmd.EXPECT().Stdout(gomock.Any()).AnyTimes() diff --git a/internal/run/upgrade.go b/internal/run/upgrade.go index 59af6a6..5995200 100644 --- a/internal/run/upgrade.go +++ b/internal/run/upgrade.go @@ -60,15 +60,7 @@ func (u *Upgrade) Prepare() error { return fmt.Errorf("release is required") } - args := make([]string, 0) - - if u.namespace != "" { - args = append(args, "--namespace", u.namespace) - } - if u.debug { - args = append(args, "--debug") - } - + args := u.globalFlags() args = append(args, "upgrade", "--install") if u.chartVersion != "" {