You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ts...@apache.org on 2022/08/30 07:46:07 UTC

[camel-k] 01/02: feat(cli): Force arguments for the rebuild command

This is an automated email from the ASF dual-hosted git repository.

tsato pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-k.git

commit 1100a8e72e05e2f4069763e99cf15b3e7f950d40
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Fri Aug 19 11:43:03 2022 +0200

    feat(cli): Force arguments for the rebuild command
---
 pkg/cmd/rebuild.go      | 31 ++++++++++++++++++++---
 pkg/cmd/rebuild_test.go | 66 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 93 insertions(+), 4 deletions(-)

diff --git a/pkg/cmd/rebuild.go b/pkg/cmd/rebuild.go
index 7ea427923..bcdd3c96e 100644
--- a/pkg/cmd/rebuild.go
+++ b/pkg/cmd/rebuild.go
@@ -34,18 +34,41 @@ 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
+			}
+			if err := options.rebuild(cmd, args); err != nil {
+				fmt.Fprintln(cmd.ErrOrStderr(), err.Error())
+			}
+
+			return nil
+		},
 	}
 
+	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: both all flag and named integrations are set")
+	}
+	if !o.RebuildAll && len(args) == 0 {
+		return errors.New("invalid combination: neither all flag nor named integrations are set")
+	}
+
+	return nil
 }
 
 func (o *rebuildCmdOptions) rebuild(cmd *cobra.Command, args []string) error {
@@ -55,11 +78,11 @@ func (o *rebuildCmdOptions) rebuild(cmd *cobra.Command, args []string) error {
 	}
 
 	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 000000000..e6e0c95a4
--- /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)
+}