diff --git a/pkg/cmd/delete.go b/pkg/cmd/delete.go index 2fd5aa347a..ff12d31b8f 100644 --- a/pkg/cmd/delete.go +++ b/pkg/cmd/delete.go @@ -46,11 +46,7 @@ func newCmdDelete(rootCmdOptions *RootCmdOptions) (*cobra.Command, *deleteCmdOpt if err := options.validate(args); err != nil { return err } - if err := options.run(cmd, args); err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), err.Error()) - } - - return nil + return options.run(cmd, args) }, } @@ -66,10 +62,10 @@ type deleteCmdOptions struct { func (command *deleteCmdOptions) validate(args []string) error { if command.DeleteAll && len(args) > 0 { - return errors.New("invalid combination: both all flag and named integrations are set") + return errors.New("invalid combination: --all flag is set and at least one integration name is provided") } if !command.DeleteAll && len(args) == 0 { - return errors.New("invalid combination: neither all flag nor named integrations are set") + return errors.New("invalid combination: provide one or several integration names or set --all flag for all integrations") } return nil diff --git a/pkg/cmd/kamelet_delete.go b/pkg/cmd/kamelet_delete.go index 36fcc049c5..4d50a859f0 100644 --- a/pkg/cmd/kamelet_delete.go +++ b/pkg/cmd/kamelet_delete.go @@ -35,19 +35,14 @@ func newKameletDeleteCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kamel } cmd := cobra.Command{ - Use: "delete ", - Short: "Delete a Kamelet", - Long: `Delete a Kamelet.`, + Use: "delete [Kamelet1] [Kamelet2] ...", + Short: "Delete Kamelets deployed on Kubernetes", PreRunE: decode(&options), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err } - if err := options.run(cmd, args); err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), err.Error()) - } - - return nil + return options.run(cmd, args) }, } @@ -63,10 +58,10 @@ type kameletDeleteCommandOptions struct { func (command *kameletDeleteCommandOptions) validate(args []string) error { if command.All && len(args) > 0 { - return errors.New("invalid combination: both all flag and named kamelets are set") + return errors.New("invalid combination: --all flag is set and at least one kamelet name is provided") } if !command.All && len(args) == 0 { - return errors.New("invalid combination: neither all flag nor named kamelets are set") + return errors.New("invalid combination: provide one or several kamelet names or set --all flag for all kamelets") } return nil diff --git a/pkg/cmd/kit_delete.go b/pkg/cmd/kit_delete.go index ec1c5ebd1e..33515ee061 100644 --- a/pkg/cmd/kit_delete.go +++ b/pkg/cmd/kit_delete.go @@ -36,19 +36,14 @@ func newKitDeleteCmd(rootCmdOptions *RootCmdOptions) (*cobra.Command, *kitDelete } cmd := cobra.Command{ - Use: "delete ", - Short: "Delete an Integration Kit", - Long: `Delete an Integration Kit.`, + Use: "delete [integration kit1] [integration kit2] ...", + Short: "Delete integration kits deployed on Kubernetes", PreRunE: decode(&options), RunE: func(cmd *cobra.Command, args []string) error { if err := options.validate(args); err != nil { return err } - if err := options.run(cmd, args); err != nil { - fmt.Fprintln(cmd.ErrOrStderr(), err.Error()) - } - - return nil + return options.run(cmd, args) }, } @@ -64,10 +59,10 @@ type kitDeleteCommandOptions struct { func (command *kitDeleteCommandOptions) validate(args []string) error { if command.All && len(args) > 0 { - return errors.New("invalid combination: both all flag and named Kits are set") + return errors.New("invalid combination: --all flag is set and at least one integration kit name is provided") } if !command.All && len(args) == 0 { - return errors.New("invalid combination: neither all flag nor named Kits are set") + return errors.New("invalid combination: provide one or several integration kit names or set --all flag for all integration kits") } return nil diff --git a/pkg/cmd/rebuild.go b/pkg/cmd/rebuild.go index 7ea4279233..9c402c23aa 100644 --- a/pkg/cmd/rebuild.go +++ b/pkg/cmd/rebuild.go @@ -34,32 +34,51 @@ func newCmdRebuild(rootCmdOptions *RootCmdOptions) (*cobra.Command, *rebuildCmdO RootCmdOptions: rootCmdOptions, } cmd := cobra.Command{ - Use: "rebuild [integration]", + Use: "rebuild [integration1] [integration2] ...", Short: "Clear the state of integrations to rebuild them", Long: `Clear the state of one or more integrations causing a rebuild.`, PreRunE: decode(&options), - RunE: options.rebuild, + RunE: func(cmd *cobra.Command, args []string) error { + if err := options.validate(args); err != nil { + return err + } + return options.run(cmd, args) + }, } + cmd.Flags().Bool("all", false, "Rebuild all integrations") + return &cmd, &options } type rebuildCmdOptions struct { *RootCmdOptions + RebuildAll bool `mapstructure:"all"` +} + +func (o *rebuildCmdOptions) validate(args []string) error { + if o.RebuildAll && len(args) > 0 { + return errors.New("invalid combination: --all flag is set and at least one integration name is provided") + } + if !o.RebuildAll && len(args) == 0 { + return errors.New("invalid combination: provide one or several integration names or set --all flag for all integrations") + } + + return nil } -func (o *rebuildCmdOptions) rebuild(cmd *cobra.Command, args []string) error { +func (o *rebuildCmdOptions) run(cmd *cobra.Command, args []string) error { c, err := o.GetCmdClient() if err != nil { return err } var integrations []v1.Integration - if len(args) == 0 { + if o.RebuildAll { if integrations, err = o.listAllIntegrations(c); err != nil { return err } - } else { + } else if len(args) > 0 { if integrations, err = o.getIntegrations(c, args); err != nil { return err } diff --git a/pkg/cmd/rebuild_test.go b/pkg/cmd/rebuild_test.go new file mode 100644 index 0000000000..e6e0c95a40 --- /dev/null +++ b/pkg/cmd/rebuild_test.go @@ -0,0 +1,66 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You 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 cmd + +import ( + "testing" + + "github.com/apache/camel-k/pkg/util/test" + "github.com/spf13/cobra" + "github.com/stretchr/testify/assert" +) + +const cmdRebuild = "rebuild" + +// nolint: unparam +func initializeRebuildCmdOptions(t *testing.T) (*rebuildCmdOptions, *cobra.Command, RootCmdOptions) { + t.Helper() + + options, rootCmd := kamelTestPreAddCommandInit() + rebuildCmdOptions := addTestRebuildCmd(*options, rootCmd) + kamelTestPostAddCommandInit(t, rootCmd) + + return rebuildCmdOptions, rootCmd, *options +} + +func addTestRebuildCmd(options RootCmdOptions, rootCmd *cobra.Command) *rebuildCmdOptions { + // add a testing version of rebuild Command + rebuildCmd, rebuildOptions := newCmdRebuild(&options) + rebuildCmd.RunE = func(c *cobra.Command, args []string) error { + return nil + } + rebuildCmd.PostRunE = func(c *cobra.Command, args []string) error { + return nil + } + rebuildCmd.Args = test.ArbitraryArgs + rootCmd.AddCommand(rebuildCmd) + return rebuildOptions +} + +func TestRebuildNonExistingFlag(t *testing.T) { + _, rootCmd, _ := initializeRebuildCmdOptions(t) + _, err := test.ExecuteCommand(rootCmd, cmdRebuild, "--nonExistingFlag") + assert.NotNil(t, err) +} + +func TestRebuildAllFlag(t *testing.T) { + rebuildCmdOptions, rootCmd, _ := initializeRebuildCmdOptions(t) + _, err := test.ExecuteCommand(rootCmd, cmdRebuild, "--all") + assert.Nil(t, err) + assert.Equal(t, true, rebuildCmdOptions.RebuildAll) +} diff --git a/pkg/cmd/trait_help.go b/pkg/cmd/trait_help.go index 0ef7bc9afb..163e1cd9a0 100644 --- a/pkg/cmd/trait_help.go +++ b/pkg/cmd/trait_help.go @@ -89,10 +89,10 @@ type traitMetaData struct { func (command *traitHelpCommandOptions) validate(args []string) error { if command.IncludeAll && len(args) > 0 { - return errors.New("invalid combination: both all flag and a named trait is set") + return errors.New("invalid combination: --all flag is set and a trait name is provided") } if !command.IncludeAll && len(args) == 0 { - return errors.New("invalid combination: neither all flag nor a named trait is set") + return errors.New("invalid combination: provide a trait name or set --all flag for all traits") } return nil }