@@ -52,11 +52,13 @@ def setUp(self):
5252 self .advisory .save ()
5353
5454 self .package = PackageV2 .objects .from_purl (purl = "pkg:pypi/sample@1.0.0" )
55+ self .package2 = PackageV2 .objects .from_purl (purl = "pkg:pypi/sample@2.0.0" )
5556 self .impact = ImpactedPackage .objects .create (
5657 advisory = self .advisory ,
5758 base_purl = "pkg:pypi/sample" ,
5859 )
5960 self .impact .affecting_packages .add (self .package )
61+ self .impact .fixed_by_packages .add (self .package2 )
6062
6163 self .client = APIClient (enforce_csrf_checks = True )
6264
@@ -113,6 +115,31 @@ def test_packages_post_with_details(self):
113115 pkg = response .data ["results" ][0 ]
114116 self .assertEqual (pkg ["purl" ], "pkg:pypi/sample@1.0.0" )
115117
118+ def test_packages_post_with_details_fixing_vulnerabilities (self ):
119+ url = reverse ("package-v3-list" )
120+ GroupAdvisoriesForPackages ().execute ()
121+
122+ with self .assertNumQueries (12 ):
123+ response = self .client .post (
124+ url ,
125+ data = {
126+ "purls" : ["pkg:pypi/sample@2.0.0" ],
127+ "details" : True ,
128+ },
129+ format = "json" ,
130+ HTTP_USER_AGENT = "VCIO_API_AGENT" ,
131+ )
132+
133+ self .assertEqual (response .status_code , status .HTTP_200_OK )
134+
135+ pkg = response .data ["results" ][0 ]
136+ fixing_vulnerability = pkg ["fixing_vulnerabilities" ][0 ]
137+
138+ self .assertEqual (fixing_vulnerability ["advisory_id" ], "GHSA-1234" )
139+ self .assertEqual (fixing_vulnerability ["advisory_uid" ], "ghsa/GHSA-1234" )
140+ self .assertEqual (fixing_vulnerability ["datasource_id" ], "ghsa" )
141+ self .assertEqual (pkg ["next_non_vulnerable_version" ], "2.0.0" )
142+
116143 def test_advisories_post (self ):
117144 url = reverse ("advisory-v3-list" )
118145
@@ -129,6 +156,7 @@ def test_advisories_post(self):
129156 advisory = response .data ["results" ][0 ]
130157 self .assertEqual (advisory ["advisory_id" ], "GHSA-1234" )
131158 self .assertEqual (advisory ["advisory_uid" ], "ghsa/GHSA-1234" )
159+ self .assertEqual (advisory ["datasource_id" ], "ghsa" )
132160
133161 def test_affected_by_advisories_list (self ):
134162 url = reverse ("affected-by-advisories-list" )
@@ -143,6 +171,7 @@ def test_affected_by_advisories_list(self):
143171 results = response .data ["results" ]
144172 self .assertEqual (len (results ), 1 )
145173 self .assertEqual (results [0 ]["advisory_id" ], "GHSA-1234" )
174+ self .assertEqual (results [0 ]["datasource_id" ], "ghsa" )
146175
147176 def test_fixing_advisories_list_empty (self ):
148177 url = reverse ("fixing-advisories-list" )
@@ -155,6 +184,21 @@ def test_fixing_advisories_list_empty(self):
155184 self .assertEqual (response .status_code , status .HTTP_200_OK )
156185 self .assertEqual (len (response .data ["results" ]), 0 )
157186
187+ def test_fixing_advisories_list (self ):
188+ url = reverse ("fixing-advisories-list" )
189+
190+ with self .assertNumQueries (11 ):
191+ response = self .client .get (
192+ url , {"purl" : "pkg:pypi/sample@2.0.0" }, HTTP_USER_AGENT = "VCIO_API_AGENT"
193+ )
194+
195+ self .assertEqual (response .status_code , status .HTTP_200_OK )
196+
197+ results = response .data ["results" ]
198+ self .assertEqual (len (results ), 1 )
199+ self .assertEqual (results [0 ]["advisory_id" ], "GHSA-1234" )
200+ self .assertEqual (results [0 ]["datasource_id" ], "ghsa" )
201+
158202 def test_packages_pagination (self ):
159203 url = reverse ("package-v3-list" )
160204
@@ -314,6 +358,7 @@ def test_get_all_vulnerable_purls(self):
314358
315359class PackageCommitPatchTests (APITestCase ):
316360 def setUp (self ):
361+ self .logger = TestLogger ()
317362 self .advisory = AdvisoryDataV2 (
318363 advisory_id = "AVID-123" ,
319364 aliases = [],
@@ -352,7 +397,12 @@ def setUp(self):
352397 self .anon_patcher .start ()
353398 self .addCleanup (self .anon_patcher .stop )
354399
355- self .advisory = insert_advisory_v2 (self .advisory , "importer_1" , print , 100 )
400+ self .advisory = insert_advisory_v2 (
401+ advisory = self .advisory ,
402+ pipeline_id = "importer_1" ,
403+ logger = self .logger .write ,
404+ datasource_id = "test_source" ,
405+ )
356406 self .advisory .is_latest = True
357407 self .advisory ._all_impacts_unfurled_at = timezone .now ()
358408 self .advisory .save ()
@@ -393,6 +443,7 @@ def test_packages_commit_patch(self):
393443 advisory_data = vulns [0 ]
394444
395445 assert advisory_data ["advisory_id" ] == "AVID-123"
446+ assert advisory_data ["datasource_id" ] == "test_source"
396447 assert advisory_data ["introduced_in_patches" ] == [
397448 {
398449 "commit_hash" : "06580c7f99c6fde7bcf18e30bdcc61f081430957" ,
0 commit comments