From acad1a95143d713946f546dc2592ed6b5109a987 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Barroso?= Date: Tue, 28 Jan 2025 12:05:37 +0100 Subject: [PATCH] feat: use output decorator, adding tests (#2104) * use display decorator * update method * add tests * go mod tidy * use latest commit * uses latest version of ecdysis * update test --- cmd/conduit/root/config/config_test.go | 2 +- cmd/conduit/root/root.go | 11 ++++-- cmd/conduit/root/root_test.go | 29 ++++++++++++++ cmd/conduit/root/version/version.go | 12 ++++-- cmd/conduit/root/version/version_test.go | 48 ++++++++++++++++++++++++ 5 files changed, 95 insertions(+), 7 deletions(-) create mode 100644 cmd/conduit/root/version/version_test.go diff --git a/cmd/conduit/root/config/config_test.go b/cmd/conduit/root/config/config_test.go index 0e7362cc7..63ea0c139 100644 --- a/cmd/conduit/root/config/config_test.go +++ b/cmd/conduit/root/config/config_test.go @@ -27,7 +27,7 @@ import ( "github.com/matryer/is" ) -func TestConfig_WithFlags(t *testing.T) { +func TestConfigWithFlags(t *testing.T) { testCases := []struct { name string args []string diff --git a/cmd/conduit/root/root.go b/cmd/conduit/root/root.go index 0786eb4d7..af248ac0a 100644 --- a/cmd/conduit/root/root.go +++ b/cmd/conduit/root/root.go @@ -17,7 +17,6 @@ package root import ( "context" "fmt" - "os" "github.com/conduitio/conduit/cmd/conduit/root/config" "github.com/conduitio/conduit/cmd/conduit/root/connectorplugins" @@ -39,6 +38,7 @@ var ( _ ecdysis.CommandWithExecute = (*RootCommand)(nil) _ ecdysis.CommandWithDocs = (*RootCommand)(nil) _ ecdysis.CommandWithSubCommands = (*RootCommand)(nil) + _ ecdysis.CommandWithOutput = (*RootCommand)(nil) ) type RootFlags struct { @@ -50,12 +50,17 @@ type RootFlags struct { } type RootCommand struct { - flags RootFlags + flags RootFlags + output ecdysis.Output +} + +func (c *RootCommand) Output(output ecdysis.Output) { + c.output = output } func (c *RootCommand) Execute(ctx context.Context) error { if c.flags.Version { - _, _ = fmt.Fprintf(os.Stdout, "%s\n", conduit.Version(true)) + c.output.Stdout(fmt.Sprintf("%s\n", conduit.Version(true))) return nil } diff --git a/cmd/conduit/root/root_test.go b/cmd/conduit/root/root_test.go index e522b1919..b09791c48 100644 --- a/cmd/conduit/root/root_test.go +++ b/cmd/conduit/root/root_test.go @@ -15,8 +15,12 @@ package root import ( + "bytes" + "context" + "strings" "testing" + "github.com/conduitio/conduit/pkg/conduit" "github.com/conduitio/ecdysis" "github.com/matryer/is" "github.com/spf13/pflag" @@ -56,3 +60,28 @@ func TestRootCommandFlags(t *testing.T) { is.Equal(cf.Usage, f.usage) } } + +func TestRootCommandExecuteWithVersionFlag(t *testing.T) { + is := is.New(t) + + buf := new(bytes.Buffer) + + out := &ecdysis.DefaultOutput{} + out.Output(buf, nil) + + cmd := &RootCommand{ + flags: RootFlags{ + Version: true, + }, + } + cmd.Output(out) + + expectedOutput := strings.TrimSpace(conduit.Version(true)) + + err := cmd.Execute(context.Background()) + is.NoErr(err) + + actualOutput := strings.TrimSpace(buf.String()) + + is.Equal(actualOutput, expectedOutput) +} diff --git a/cmd/conduit/root/version/version.go b/cmd/conduit/root/version/version.go index 669113146..2cd411d1d 100644 --- a/cmd/conduit/root/version/version.go +++ b/cmd/conduit/root/version/version.go @@ -17,7 +17,6 @@ package version import ( "context" "fmt" - "os" "github.com/conduitio/conduit/pkg/conduit" "github.com/conduitio/ecdysis" @@ -26,14 +25,21 @@ import ( var ( _ ecdysis.CommandWithExecute = (*VersionCommand)(nil) _ ecdysis.CommandWithDocs = (*VersionCommand)(nil) + _ ecdysis.CommandWithOutput = (*VersionCommand)(nil) ) -type VersionCommand struct{} +type VersionCommand struct { + output ecdysis.Output +} + +func (c *VersionCommand) Output(output ecdysis.Output) { + c.output = output +} func (c *VersionCommand) Usage() string { return "version" } func (c *VersionCommand) Execute(_ context.Context) error { - _, _ = fmt.Fprintf(os.Stdout, "%s\n", conduit.Version(true)) + c.output.Stdout(fmt.Sprintf("%s\n", conduit.Version(true))) return nil } diff --git a/cmd/conduit/root/version/version_test.go b/cmd/conduit/root/version/version_test.go new file mode 100644 index 000000000..d67952aa2 --- /dev/null +++ b/cmd/conduit/root/version/version_test.go @@ -0,0 +1,48 @@ +// Copyright © 2025 Meroxa, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package version + +import ( + "bytes" + "context" + "fmt" + "runtime" + "strings" + "testing" + + "github.com/conduitio/ecdysis" + "github.com/matryer/is" +) + +func TestVersionCommandExecute(t *testing.T) { + is := is.New(t) + + buf := new(bytes.Buffer) + + out := &ecdysis.DefaultOutput{} + out.Output(buf, nil) + + cmd := &VersionCommand{} + cmd.Output(out) + + expectedOutput := fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH) + + err := cmd.Execute(context.Background()) + is.NoErr(err) + + actualOutput := strings.TrimSpace(buf.String()) + + is.Equal(actualOutput, expectedOutput) +}