@@ -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+
216397func TestDetermineSystemOrCustomState (t * testing.T ) {
217398 tests := []struct {
218399 name string
0 commit comments