Skip to content

Commit c2577d8

Browse files
committed
fix: add pipeline tests for collabora importer
1 parent cc58a31 commit c2577d8

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

vulnerabilities/tests/test_collabora_importer.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010
import json
1111
import os
1212
from unittest import TestCase
13+
from unittest.mock import MagicMock
14+
from unittest.mock import patch
1315

16+
from vulnerabilities.pipelines.v2_importers.collabora_importer import CollaboraImporterPipeline
1417
from vulnerabilities.pipelines.v2_importers.collabora_importer import parse_advisory
1518

1619
TEST_DATA = os.path.join(os.path.dirname(__file__), "test_data", "collabora")
@@ -109,3 +112,42 @@ def test_parse_advisory_original_text_is_json(self):
109112
self.assertIsNotNone(advisory)
110113
parsed = json.loads(advisory.original_advisory_text)
111114
self.assertEqual(parsed["ghsa_id"], data["ghsa_id"])
115+
116+
117+
class TestCollaboraImporterPipeline(TestCase):
118+
def _mock_response(self, data, next_url=None):
119+
resp = MagicMock()
120+
resp.json.return_value = data
121+
resp.raise_for_status.return_value = None
122+
resp.links = {"next": {"url": next_url}} if next_url else {}
123+
return resp
124+
125+
@patch("vulnerabilities.pipelines.v2_importers.collabora_importer.requests.get")
126+
def test_collect_advisories_single_page(self, mock_get):
127+
data = load_json("collabora_mock1.json")
128+
mock_get.return_value = self._mock_response([data])
129+
advisories = list(CollaboraImporterPipeline().collect_advisories())
130+
self.assertEqual(len(advisories), 1)
131+
self.assertEqual(advisories[0].advisory_id, data["ghsa_id"])
132+
133+
@patch("vulnerabilities.pipelines.v2_importers.collabora_importer.requests.get")
134+
def test_collect_advisories_pagination(self, mock_get):
135+
data1 = load_json("collabora_mock1.json")
136+
data2 = load_json("collabora_mock2.json")
137+
mock_get.side_effect = [
138+
self._mock_response([data1], next_url="https://api.github.com/page2"),
139+
self._mock_response([data2]),
140+
]
141+
advisories = list(CollaboraImporterPipeline().collect_advisories())
142+
self.assertEqual(len(advisories), 2)
143+
self.assertEqual(advisories[0].advisory_id, data1["ghsa_id"])
144+
self.assertEqual(advisories[1].advisory_id, data2["ghsa_id"])
145+
146+
@patch("vulnerabilities.pipelines.v2_importers.collabora_importer.requests.get")
147+
def test_collect_advisories_http_error_logs_and_stops(self, mock_get):
148+
mock_get.side_effect = Exception("connection refused")
149+
logger_name = "vulnerabilities.pipelines.v2_importers.collabora_importer"
150+
with self.assertLogs(logger_name, level="ERROR") as cm:
151+
advisories = list(CollaboraImporterPipeline().collect_advisories())
152+
self.assertEqual(advisories, [])
153+
self.assertTrue(any("connection refused" in msg for msg in cm.output))

0 commit comments

Comments
 (0)