Skip to content

Commit 9a54ab8

Browse files
committed
Merge remote-tracking branch 'origin/APP-440-Create-application-descriptor' into APP-443-Update-specific-application
2 parents 2cef81c + 0b7e0c3 commit 9a54ab8

File tree

3 files changed

+95
-15
lines changed

3 files changed

+95
-15
lines changed

application/commands/application/create_app_cmd.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package application
22

33
import (
4-
"slices"
5-
64
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
75

86
"github.com/jfrog/jfrog-cli-application/application/commands/utils"
@@ -11,7 +9,6 @@ import (
119
commonCLiCommands "github.com/jfrog/jfrog-cli-core/v2/common/commands"
1210
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
1311
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
14-
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
1512
"github.com/jfrog/jfrog-client-go/utils/errorutils"
1613

1714
"github.com/jfrog/jfrog-cli-application/application/app"
@@ -56,20 +53,24 @@ func (cac *createAppCommand) buildRequestPayload(ctx *components.Context) (*mode
5653
return nil, errorutils.CheckErrorf("--%s is mandatory", commands.ProjectFlag)
5754
}
5855

59-
businessCriticality := ctx.GetStringFlagValue(commands.BusinessCriticalityFlag)
60-
if businessCriticality == "" {
61-
// Default to "unspecified" if not provided
62-
businessCriticality = model.BusinessCriticalityUnspecified
63-
} else if !slices.Contains(model.BusinessCriticalityValues, businessCriticality) {
64-
return nil, errorutils.CheckErrorf("invalid value for --%s: '%s'. Allowed values: %s", commands.BusinessCriticalityFlag, businessCriticality, coreutils.ListToText(model.BusinessCriticalityValues))
56+
businessCriticalityStr := ctx.GetStringFlagValue(commands.BusinessCriticalityFlag)
57+
businessCriticality, err := utils.ValidateEnumFlag(
58+
commands.BusinessCriticalityFlag,
59+
businessCriticalityStr,
60+
model.BusinessCriticalityUnspecified,
61+
model.BusinessCriticalityValues)
62+
if err != nil {
63+
return nil, err
6564
}
6665

67-
maturityLevel := ctx.GetStringFlagValue(commands.MaturityLevelFlag)
68-
if maturityLevel == "" {
69-
// Default to "unspecified" if not provided
70-
maturityLevel = model.MaturityLevelUnspecified
71-
} else if !slices.Contains(model.MaturityLevelValues, maturityLevel) {
72-
return nil, errorutils.CheckErrorf("invalid value for --%s: '%s'. Allowed values: %s", commands.MaturityLevelFlag, maturityLevel, coreutils.ListToText(model.MaturityLevelValues))
66+
maturityLevelStr := ctx.GetStringFlagValue(commands.MaturityLevelFlag)
67+
maturityLevel, err := utils.ValidateEnumFlag(
68+
commands.MaturityLevelFlag,
69+
maturityLevelStr,
70+
model.MaturityLevelUnspecified,
71+
model.MaturityLevelValues)
72+
if err != nil {
73+
return nil, err
7374
}
7475

7576
description := ctx.GetStringFlagValue(commands.DescriptionFlag)

application/commands/utils/utils.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ package utils
22

33
import (
44
"fmt"
5+
"slices"
56
"strings"
67

78
commonCliUtils "github.com/jfrog/jfrog-cli-core/v2/common/cliutils"
89
pluginsCommon "github.com/jfrog/jfrog-cli-core/v2/plugins/common"
910
"github.com/jfrog/jfrog-cli-core/v2/plugins/components"
1011
coreConfig "github.com/jfrog/jfrog-cli-core/v2/utils/config"
12+
"github.com/jfrog/jfrog-cli-core/v2/utils/coreutils"
1113
"github.com/jfrog/jfrog-client-go/utils/errorutils"
1214
)
1315

@@ -63,3 +65,19 @@ func ParseMapFlag(flagValue string) (map[string]string, error) {
6365
}
6466
return result, nil
6567
}
68+
69+
// ValidateEnumFlag validates that a flag value is in the list of allowed values.
70+
// If the value is empty, returns the default value.
71+
// Otherwise, returns an error if the value is not in the allowed values.
72+
func ValidateEnumFlag(flagName, value string, defaultValue string, allowedValues []string) (string, error) {
73+
if value == "" {
74+
return defaultValue, nil
75+
}
76+
77+
if slices.Contains(allowedValues, value) {
78+
return value, nil
79+
}
80+
81+
return "", errorutils.CheckErrorf("invalid value for --%s: '%s'. Allowed values: %s",
82+
flagName, value, coreutils.ListToText(allowedValues))
83+
}

application/commands/utils/utils_test.go

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,64 @@ func TestParseMapFlag(t *testing.T) {
5353
})
5454
}
5555
}
56+
57+
func TestValidateEnumFlag(t *testing.T) {
58+
tests := []struct {
59+
name string
60+
flagName string
61+
value string
62+
validValues []string
63+
defaultValue string
64+
expectError bool
65+
expectedValue string
66+
}{
67+
{
68+
name: "valid value",
69+
flagName: "test-flag",
70+
value: "foo",
71+
validValues: []string{"foo", "bar", "baz"},
72+
defaultValue: "",
73+
expectError: false,
74+
expectedValue: "foo",
75+
},
76+
{
77+
name: "invalid value with default",
78+
flagName: "test-flag",
79+
value: "invalid",
80+
validValues: []string{"foo", "bar", "baz"},
81+
defaultValue: "bar",
82+
expectError: true,
83+
expectedValue: "",
84+
},
85+
{
86+
name: "invalid value without default",
87+
flagName: "test-flag",
88+
value: "invalid",
89+
validValues: []string{"foo", "bar", "baz"},
90+
defaultValue: "",
91+
expectError: true,
92+
expectedValue: "",
93+
},
94+
{
95+
name: "empty value with default",
96+
flagName: "test-flag",
97+
value: "",
98+
validValues: []string{"foo", "bar", "baz"},
99+
defaultValue: "baz",
100+
expectError: false,
101+
expectedValue: "baz",
102+
},
103+
}
104+
105+
for _, tt := range tests {
106+
t.Run(tt.name, func(t *testing.T) {
107+
result, err := ValidateEnumFlag(tt.flagName, tt.value, tt.defaultValue, tt.validValues)
108+
if tt.expectError {
109+
assert.Error(t, err, "ValidateEnumFlag(%q) expected error, got nil", tt.value)
110+
return
111+
}
112+
assert.NoError(t, err, "ValidateEnumFlag(%q) unexpected error: %v", tt.value, err)
113+
assert.Equal(t, tt.expectedValue, result, "ValidateEnumFlag(%q) = %v, want %v", tt.value, result, tt.expectedValue)
114+
})
115+
}
116+
}

0 commit comments

Comments
 (0)