import json import sqlite3 import sys import tempfile import unittest from pathlib import Path sys.path.insert(0,str(Path(__file__).resolve().parents[1]/'scripts')) from build import process_cve,process_nvd,process_osv,walk_cpe class TestBuild(unittest.TestCase): def setUp(self): self.conn=sqlite3.connect(':memory:') self.conn.executescript((Path(__file__).resolve().parents[1]/'sql/schema.sql').read_text()) def tearDown(self): self.conn.close() def test_cve(self): self.assertTrue(process_cve(self.conn,{'cveMetadata':{'cveId':'CVE-2026-12345','state':'PUBLISHED'}})) self.assertEqual(self.conn.execute('select state from vulnerabilities').fetchone()[0],'PUBLISHED') def test_osv_range_preserved(self): self.assertTrue(process_osv(self.conn,{'id':'GHSA-abcd-efgh-ijkl','aliases':['CVE-2026-12345'], 'affected':[{'package':{'ecosystem':'PyPI','name':'foo'},'ranges':[{'type':'ECOSYSTEM','events':[{'introduced':'0'},{'fixed':'2.0'}]}]}]})) row=self.conn.execute('select ranges_json from affected_packages').fetchone()[0] self.assertIn('fixed',row) self.assertEqual(self.conn.execute('select count(*) from aliases').fetchone()[0],1) def test_nvd_ignores_and(self): self.assertTrue(process_nvd(self.conn,{'cve':{'id':'CVE-2026-12345','configurations':[ {'nodes':[{'operator':'AND','cpeMatch':[{'criteria':'cpe:2.3:a:foo'}]}]}]}})) self.assertEqual(self.conn.execute('select count(*) from cpe_matches').fetchone()[0],0) def test_simple_nvd(self): self.assertTrue(process_nvd(self.conn,{'cve':{'id':'CVE-2026-12345','configurations':[ {'nodes':[{'operator':'OR','cpeMatch':[{'criteria':'cpe:2.3:a:vendor:product:*:*:*:*:*:*:*:*','vulnerable':True}]}]}]}})) self.assertEqual(self.conn.execute('select count(*) from cpe_matches').fetchone()[0],1) if __name__=='__main__': unittest.main()