|
8 | 8 | # |
9 | 9 |
|
10 | 10 | import datetime |
11 | | -import json |
12 | 11 | from pathlib import Path |
13 | 12 | from unittest import TestCase |
14 | 13 | from unittest.mock import MagicMock |
|
22 | 21 | from vulnerabilities.pipelines.v2_importers.checkpoint_importer import get_total_pages |
23 | 22 | from vulnerabilities.pipelines.v2_importers.checkpoint_importer import parse_advisory |
24 | 23 | from vulnerabilities.pipelines.v2_importers.checkpoint_importer import parse_table_rows |
| 24 | +from vulnerabilities.tests import util_tests |
25 | 25 |
|
26 | 26 | TEST_DATA = Path(__file__).parent.parent.parent / "test_data" / "checkpoint" |
27 | 27 |
|
@@ -85,72 +85,20 @@ def test_returns_empty_list_for_missing_table(self): |
85 | 85 | assert parse_table_rows("<html></html>") == [] |
86 | 86 |
|
87 | 87 |
|
88 | | -class TestParseAdvisory(TestCase): |
89 | | - def setUp(self): |
90 | | - self.row = SAMPLE_ROWS[0] |
91 | | - |
92 | | - def test_advisory_id(self): |
93 | | - advisory = parse_advisory(self.row) |
94 | | - assert advisory.advisory_id == "CPAI-2026-1780" |
95 | | - |
96 | | - def test_cve_in_aliases(self): |
97 | | - advisory = parse_advisory(self.row) |
98 | | - assert "CVE-2026-20122" in advisory.aliases |
99 | | - |
100 | | - def test_date_parsed(self): |
101 | | - advisory = parse_advisory(self.row) |
102 | | - assert advisory.date_published is not None |
103 | | - assert advisory.date_published.year == 2026 |
104 | | - |
105 | | - def test_severity_stored(self): |
106 | | - advisory = parse_advisory(self.row) |
107 | | - assert len(advisory.severities) == 1 |
108 | | - assert advisory.severities[0].value == "Medium" |
109 | | - |
110 | | - def test_references_include_advisory_url(self): |
111 | | - advisory = parse_advisory(self.row) |
112 | | - urls = [r.url for r in advisory.references] |
113 | | - assert any("cpai-2026-1780.html" in u for u in urls) |
114 | | - |
115 | | - def test_references_include_nvd_url(self): |
116 | | - advisory = parse_advisory(self.row) |
117 | | - urls = [r.url for r in advisory.references] |
118 | | - assert any("nvd.nist.gov" in u for u in urls) |
119 | | - |
120 | | - def test_reference_ids_set(self): |
121 | | - advisory = parse_advisory(self.row) |
122 | | - ref_ids = [r.reference_id for r in advisory.references] |
123 | | - assert "CPAI-2026-1780" in ref_ids |
124 | | - assert "CVE-2026-20122" in ref_ids |
125 | | - |
126 | | - def test_affected_packages_empty(self): |
127 | | - advisory = parse_advisory(self.row) |
128 | | - assert advisory.affected_packages == [] |
129 | | - |
130 | | - def test_weaknesses_empty(self): |
131 | | - advisory = parse_advisory(self.row) |
132 | | - assert advisory.weaknesses == [] |
133 | | - |
134 | | - def test_original_advisory_text_is_pretty_json(self): |
135 | | - advisory = parse_advisory(self.row) |
136 | | - parsed = json.loads(advisory.original_advisory_text) |
137 | | - assert parsed["advisory_id"] == "CPAI-2026-1780" |
138 | | - assert "\n" in advisory.original_advisory_text |
139 | | - |
140 | | - def test_missing_id_returns_none(self): |
141 | | - assert parse_advisory({}) is None |
142 | | - assert parse_advisory({"advisory_id": ""}) is None |
143 | | - assert parse_advisory({"advisory_id": "INVALID-123"}) is None |
144 | | - |
145 | | - def test_no_cve_yields_empty_aliases(self): |
146 | | - row = dict(self.row) |
147 | | - row["cve_id"] = "" |
| 88 | +def test_parse_advisories(): |
| 89 | + results = [] |
| 90 | + for row in SAMPLE_ROWS: |
148 | 91 | advisory = parse_advisory(row) |
149 | | - assert advisory.aliases == [] |
| 92 | + if advisory: |
| 93 | + results.append(advisory.to_dict()) |
| 94 | + expected_file = TEST_DATA / "advisories_2026-expected.json" |
| 95 | + util_tests.check_results_against_json(results, expected_file) |
| 96 | + |
150 | 97 |
|
151 | | - def test_critical_severity(self): |
152 | | - advisory = parse_advisory(SAMPLE_ROWS[1]) |
153 | | - assert advisory.severities[0].value == "Critical" |
| 98 | +def test_missing_id_returns_none(): |
| 99 | + assert parse_advisory({}) is None |
| 100 | + assert parse_advisory({"advisory_id": ""}) is None |
| 101 | + assert parse_advisory({"advisory_id": "INVALID-123"}) is None |
154 | 102 |
|
155 | 103 |
|
156 | 104 | class TestCheckPointImporterPipeline(TestCase): |
|
0 commit comments