Skip to content

Commit 279518b

Browse files
Feature/get states custom flag(AST-123836) (#1371)
1 parent 5aa7bc8 commit 279518b

File tree

2 files changed

+202
-1
lines changed

2 files changed

+202
-1
lines changed

internal/commands/predicates.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,16 +59,36 @@ func triageGetStatesSubCommand(customStatesWrapper wrappers.CustomStatesWrapper,
5959
}
6060

6161
triageGetStatesCmd.PersistentFlags().Bool(params.AllStatesFlag, false, "Show all custom states, including the ones that have been deleted")
62-
62+
triageGetStatesCmd.PersistentFlags().String(params.ScanTypeFlag, "sast", "Scan Type")
6363
return triageGetStatesCmd
6464
}
6565

6666
func runTriageGetStates(customStatesWrapper wrappers.CustomStatesWrapper, featureFlagsWrapper wrappers.FeatureFlagsWrapper) func(*cobra.Command, []string) error {
6767
return func(cmd *cobra.Command, _ []string) error {
68+
scanType, _ := cmd.Flags().GetString(params.ScanTypeFlag)
69+
scanType = strings.TrimSpace(strings.ToLower(scanType))
6870
flagResponse, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, wrappers.CustomStatesFeatureFlag)
6971
if !flagResponse.Status {
7072
return printer.Print(cmd.OutOrStdout(), systemStates, printer.FormatJSON)
7173
}
74+
75+
switch scanType {
76+
case params.KicsType:
77+
kicsCustomStates, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, "KICS_CUSTOM_STATES_ENABLED")
78+
if !kicsCustomStates.Status {
79+
return printer.Print(cmd.OutOrStdout(), systemStates, printer.FormatJSON)
80+
}
81+
case params.ScaType:
82+
scaCustomStates, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, "SCA_CUSTOM_STATES")
83+
if !scaCustomStates.Status {
84+
return printer.Print(cmd.OutOrStdout(), systemStates, printer.FormatJSON)
85+
}
86+
default:
87+
sastCustomStates, _ := wrappers.GetSpecificFeatureFlag(featureFlagsWrapper, "SAST_CUSTOM_STATES_ENABLED")
88+
if !sastCustomStates.Status {
89+
return printer.Print(cmd.OutOrStdout(), systemStates, printer.FormatJSON)
90+
}
91+
}
7292
includeDeleted, _ := cmd.Flags().GetBool(params.AllStatesFlag)
7393
states, err := customStatesWrapper.GetAllCustomStates(includeDeleted)
7494
if err != nil {

internal/commands/predicates_test.go

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,187 @@ func TestRunTriageUpdateWithSystemState(t *testing.T) {
213213
assert.NilError(t, err)
214214
}
215215

216+
func TestRunTriageGetStates_ScanTypeSwitch(t *testing.T) {
217+
tests := []struct {
218+
name string
219+
scanType string
220+
customStatesFeatureFlag wrappers.FeatureFlagResponseModel
221+
scanTypeFeatureFlag wrappers.FeatureFlagResponseModel
222+
expectedError bool
223+
description string
224+
}{
225+
{
226+
name: "KICS scan type with KICS custom states enabled",
227+
scanType: "kics",
228+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
229+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "KICS_CUSTOM_STATES_ENABLED", Status: true},
230+
expectedError: false,
231+
description: "Should successfully get custom states for KICS when feature flag is enabled",
232+
},
233+
{
234+
name: "KICS scan type with KICS custom states disabled",
235+
scanType: "kics",
236+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
237+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "KICS_CUSTOM_STATES_ENABLED", Status: false},
238+
expectedError: false,
239+
description: "Should return system states for KICS when feature flag is disabled",
240+
},
241+
{
242+
name: "SCA scan type with SCA custom states enabled",
243+
scanType: "sca",
244+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
245+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SCA_CUSTOM_STATES", Status: true},
246+
expectedError: false,
247+
description: "Should successfully get custom states for SCA when feature flag is enabled",
248+
},
249+
{
250+
name: "SCA scan type with SCA custom states disabled",
251+
scanType: "sca",
252+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
253+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SCA_CUSTOM_STATES", Status: false},
254+
expectedError: false,
255+
description: "Should return system states for SCA when feature flag is disabled",
256+
},
257+
{
258+
name: "SAST scan type with SAST custom states enabled",
259+
scanType: "sast",
260+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
261+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SAST_CUSTOM_STATES_ENABLED", Status: true},
262+
expectedError: false,
263+
description: "Should successfully get custom states for SAST when feature flag is enabled",
264+
},
265+
{
266+
name: "SAST scan type with SAST custom states disabled",
267+
scanType: "sast",
268+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
269+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SAST_CUSTOM_STATES_ENABLED", Status: false},
270+
expectedError: false,
271+
description: "Should return system states for SAST when feature flag is disabled",
272+
},
273+
{
274+
name: "Unknown scan type defaults to SAST behavior",
275+
scanType: "unknown",
276+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
277+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SAST_CUSTOM_STATES_ENABLED", Status: true},
278+
expectedError: false,
279+
description: "Should default to SAST logic for unknown scan types",
280+
},
281+
{
282+
name: "KICS with uppercase scan type",
283+
scanType: "KICS",
284+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
285+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "KICS_CUSTOM_STATES_ENABLED", Status: true},
286+
expectedError: false,
287+
description: "Should handle uppercase scan type correctly",
288+
},
289+
{
290+
name: "SCA with mixed case scan type",
291+
scanType: "ScA",
292+
customStatesFeatureFlag: wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true},
293+
scanTypeFeatureFlag: wrappers.FeatureFlagResponseModel{Name: "SCA_CUSTOM_STATES", Status: true},
294+
expectedError: false,
295+
description: "Should handle mixed case scan type correctly",
296+
},
297+
}
298+
299+
for _, tt := range tests {
300+
tt := tt
301+
t.Run(tt.name, func(t *testing.T) {
302+
clearFlags()
303+
mockCustomStatesWrapper := &mock.CustomStatesMockWrapper{}
304+
mockFeatureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
305+
306+
// First, set the custom states feature flag
307+
mock.Flag = tt.customStatesFeatureFlag
308+
cmd := triageGetStatesSubCommand(mockCustomStatesWrapper, mockFeatureFlagsWrapper)
309+
310+
// Then set the scan-type specific feature flag for the actual execution
311+
mock.Flag = tt.scanTypeFeatureFlag
312+
cmd.SetArgs([]string{"--scan-type", tt.scanType})
313+
314+
err := cmd.Execute()
315+
316+
if tt.expectedError {
317+
assert.Assert(t, err != nil, tt.description)
318+
} else {
319+
assert.NilError(t, err, tt.description)
320+
}
321+
})
322+
}
323+
}
324+
325+
func TestRunTriageGetStates_OverallFeatureFlagDisabled(t *testing.T) {
326+
clearFlags()
327+
mockCustomStatesWrapper := &mock.CustomStatesMockWrapper{}
328+
mockFeatureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
329+
330+
// Set the overall custom states feature flag to disabled
331+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: false}
332+
333+
cmd := triageGetStatesSubCommand(mockCustomStatesWrapper, mockFeatureFlagsWrapper)
334+
cmd.SetArgs([]string{"--scan-type", "sast"})
335+
336+
err := cmd.Execute()
337+
assert.NilError(t, err, "Should return system states when overall custom states feature flag is disabled")
338+
}
339+
340+
func TestRunTriageGetStates_WithAllFlag(t *testing.T) {
341+
clearFlags()
342+
mockCustomStatesWrapper := &mock.CustomStatesMockWrapper{}
343+
mockFeatureFlagsWrapper := &mock.FeatureFlagsMockWrapper{}
344+
345+
tests := []struct {
346+
name string
347+
scanType string
348+
allFlag bool
349+
}{
350+
{
351+
name: "KICS with all flag true",
352+
scanType: "kics",
353+
allFlag: true,
354+
},
355+
{
356+
name: "SCA with all flag false",
357+
scanType: "sca",
358+
allFlag: false,
359+
},
360+
{
361+
name: "SAST with all flag true",
362+
scanType: "sast",
363+
allFlag: true,
364+
},
365+
}
366+
367+
for _, tt := range tests {
368+
tt := tt
369+
t.Run(tt.name, func(t *testing.T) {
370+
clearFlags()
371+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: wrappers.CustomStatesFeatureFlag, Status: true}
372+
373+
cmd := triageGetStatesSubCommand(mockCustomStatesWrapper, mockFeatureFlagsWrapper)
374+
375+
// Set the scan-type specific feature flag to enabled
376+
switch tt.scanType {
377+
case "kics":
378+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: "KICS_CUSTOM_STATES_ENABLED", Status: true}
379+
case "sca":
380+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: "SCA_CUSTOM_STATES", Status: true}
381+
default:
382+
mock.Flag = wrappers.FeatureFlagResponseModel{Name: "SAST_CUSTOM_STATES_ENABLED", Status: true}
383+
}
384+
385+
args := []string{"--scan-type", tt.scanType}
386+
if tt.allFlag {
387+
args = append(args, "--all")
388+
}
389+
cmd.SetArgs(args)
390+
391+
err := cmd.Execute()
392+
assert.NilError(t, err)
393+
})
394+
}
395+
}
396+
216397
func TestDetermineSystemOrCustomState(t *testing.T) {
217398
tests := []struct {
218399
name string

0 commit comments

Comments
 (0)