@@ -319,6 +319,42 @@ def test_vulnerability_model_as_cyclonedx(self):
319319 }
320320 self .assertEqual (expected , as_dict ["analysis" ])
321321
322+ def test_vulnerability_model_as_cyclonedx_is_reachable_property (self ):
323+ vulnerability = make_vulnerability (self .dataspace )
324+ package = make_package (self .dataspace )
325+ product_package = make_product_package (make_product (self .dataspace ), package = package )
326+
327+ def make_analysis (is_reachable ):
328+ return VulnerabilityAnalysis (
329+ product_package = product_package ,
330+ vulnerability = vulnerability ,
331+ dataspace = self .dataspace ,
332+ state = VulnerabilityAnalysis .State .IN_TRIAGE ,
333+ is_reachable = is_reachable ,
334+ )
335+
336+ cdx = vulnerability .as_cyclonedx (
337+ affected_instances = [package ], analysis = make_analysis (True )
338+ )
339+ as_dict = json .loads (cdx .as_json ())
340+ self .assertEqual (
341+ [{"name" : "aboutcode:is_reachable" , "value" : "true" }], as_dict ["properties" ]
342+ )
343+
344+ cdx = vulnerability .as_cyclonedx (
345+ affected_instances = [package ], analysis = make_analysis (False )
346+ )
347+ as_dict = json .loads (cdx .as_json ())
348+ self .assertEqual (
349+ [{"name" : "aboutcode:is_reachable" , "value" : "false" }], as_dict ["properties" ]
350+ )
351+
352+ cdx = vulnerability .as_cyclonedx (
353+ affected_instances = [package ], analysis = make_analysis (None )
354+ )
355+ as_dict = json .loads (cdx .as_json ())
356+ self .assertNotIn ("properties" , as_dict )
357+
322358 def test_vulnerability_model_vulnerability_analysis_save (self ):
323359 vulnerability1 = make_vulnerability (dataspace = self .dataspace )
324360 product_package1 = make_product_package (make_product (self .dataspace ))
0 commit comments