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