Skip to content

Commit 0ce2512

Browse files
committed
Include Package URL in API response
Signed-off-by: Haiko Schol <hs@haikoschol.com>
1 parent b018e5a commit 0ce2512

2 files changed

Lines changed: 29 additions & 8 deletions

File tree

vulnerabilities/api.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ class Meta:
7272
fields = [
7373
'name',
7474
'version',
75+
'package_url',
7576
'vulnerabilities',
7677
'references',
7778
]

vulnerabilities/tests/test_api.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@
2626

2727
from django.test import TestCase
2828

29-
from vulnerabilities.models import Package
3029
from vulnerabilities.api import PackageSerializer
3130
from vulnerabilities.data_dump import debian_dump
3231
from vulnerabilities.data_dump import ubuntu_dump
32+
from vulnerabilities.models import Package
3333
from vulnerabilities.scraper import debian
3434
from vulnerabilities.scraper import ubuntu
3535

@@ -38,24 +38,37 @@
3838
TEST_DATA = os.path.join(BASE_DIR, 'test_data/')
3939

4040

41-
class TestResponse(TestCase):
42-
def test_debian_response(self):
41+
class TestDebianResponse(TestCase):
42+
@classmethod
43+
def setUpTestData(cls):
4344
with open(os.path.join(TEST_DATA, 'debian.json')) as f:
4445
test_data = json.load(f)
4546

4647
extract_data = debian.extract_vulnerabilities(test_data)
4748
debian_dump(extract_data)
48-
response = self.client.get('/api/packages/?name=mimetex', format='json').data
4949

50-
self.assertEqual(4, response['count'])
50+
def setUp(self):
51+
self.response = self.client.get('/api/packages/?name=mimetex', format='json').data
5152

52-
first_result = response['results'][0]
53+
def test_count(self):
54+
self.assertEqual(4, self.response['count'])
55+
56+
def test_name(self):
57+
first_result = self.response['results'][0]
5358
self.assertEqual('mimetex', first_result['name'])
5459

55-
versions = {r['version'] for r in response['results']}
60+
def test_version(self):
61+
versions = {r['version'] for r in self.response['results']}
5662
self.assertIn('1.50-1.1', versions)
5763
self.assertIn('1.74-1', versions)
5864

65+
def test_packageurl(self):
66+
purls = {r['package_url'] for r in self.response['results']}
67+
self.assertIn('pkg:deb/debian/mimetex@1.50-1.1?distro=jessie', purls)
68+
self.assertIn('pkg:deb/debian/mimetex@1.74-1?distro=jessie', purls)
69+
70+
71+
class TestUbuntuResponse(TestCase):
5972
def test_ubuntu_response(self):
6073
with open(os.path.join(TEST_DATA, 'ubuntu_main.html')) as f:
6174
test_data = f.read()
@@ -75,12 +88,15 @@ def test_ubuntu_response(self):
7588

7689

7790
class TestSerializers(TestCase):
78-
def test_serializers(self):
91+
@classmethod
92+
def setUpTestData(cls):
7993
with open(os.path.join(TEST_DATA, 'debian.json')) as f:
8094
test_data = json.load(f)
95+
8196
extract_data = debian.extract_vulnerabilities(test_data)
8297
debian_dump(extract_data)
8398

99+
def test_package_serializer(self):
84100
pk = Package.objects.filter(name="mimetex")
85101
response = PackageSerializer(pk, many=True).data
86102

@@ -92,3 +108,7 @@ def test_serializers(self):
92108
versions = {r['version'] for r in response}
93109
self.assertIn('1.50-1.1', versions)
94110
self.assertIn('1.74-1', versions)
111+
112+
purls = {r['package_url'] for r in response}
113+
self.assertIn('pkg:deb/debian/mimetex@1.50-1.1?distro=jessie', purls)
114+
self.assertIn('pkg:deb/debian/mimetex@1.74-1?distro=jessie', purls)

0 commit comments

Comments
 (0)