Skip to content

Commit cd11232

Browse files
committed
test: add coverage for datasource in API response
Signed-off-by: Keshav Priyadarshi <git@keshav.space>
1 parent 41ee340 commit cd11232

1 file changed

Lines changed: 52 additions & 1 deletion

File tree

‎vulnerabilities/tests/test_api_v3.py‎

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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

315359
class 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

Comments
 (0)