77# See https://aboutcode.org for more information about nexB OSS projects.
88#
99
10- import uuid
11- from datetime import timedelta
12-
1310import pytest
14- from django .utils .timezone import now
1511
12+ from vulnerabilities .importer import AdvisoryDataV2
1613from vulnerabilities .models import AdvisoryV2
14+ from vulnerabilities .pipes .advisory import insert_advisory_v2
15+ from vulnerabilities .tests .pipelines import TestLogger
16+
17+ logger = TestLogger ()
1718
1819
1920@pytest .fixture
@@ -22,45 +23,29 @@ def advisory_factory(db):
2223 Factory to create AdvisoryV2 objects with minimal required fields.
2324 """
2425
25- def _create (* , avid , advisory_id , collected_at ):
26- return AdvisoryV2 .objects .create (
27- datasource_id = "test_source" ,
28- advisory_id = advisory_id ,
29- avid = avid ,
30- unique_content_id = str (uuid .uuid4 ()),
31- url = "https://example.com/advisory" ,
32- date_collected = collected_at ,
26+ def _create (* , advisory_id , summary ):
27+
28+ return insert_advisory_v2 (
29+ advisory = AdvisoryDataV2 (
30+ summary = summary ,
31+ advisory_id = advisory_id ,
32+ url = "https://example.com/advisory" ,
33+ ),
34+ pipeline_id = "source" ,
35+ logger = logger .write ,
3336 )
3437
3538 return _create
3639
3740
38- @pytest .fixture
39- def timestamps ():
40- now_ts = now ()
41- return {
42- "old" : now_ts - timedelta (days = 3 ),
43- "mid" : now_ts - timedelta (days = 1 ),
44- "new" : now_ts ,
45- }
46-
47-
4841@pytest .mark .django_db
4942def test_latest_for_avid_returns_latest_by_date_collected (
50- advisory_factory , timestamps , django_assert_num_queries
43+ advisory_factory , django_assert_num_queries
5144):
5245 avid = "source/ADV-1"
5346
54- older = advisory_factory (
55- avid = avid ,
56- advisory_id = "ADV-1" ,
57- collected_at = timestamps ["old" ],
58- )
59- newer = advisory_factory (
60- avid = avid ,
61- advisory_id = "ADV-1" ,
62- collected_at = timestamps ["new" ],
63- )
47+ older = advisory_factory (advisory_id = "ADV-1" , summary = "old advisory" )
48+ newer = advisory_factory (advisory_id = "ADV-1" , summary = "new advisory" )
6449
6550 with django_assert_num_queries (1 ):
6651 result = AdvisoryV2 .objects .latest_for_avid (avid )
@@ -70,20 +55,11 @@ def test_latest_for_avid_returns_latest_by_date_collected(
7055
7156
7257@pytest .mark .django_db
73- def test_latest_for_avid_tie_breaks_by_id (advisory_factory , timestamps , django_assert_num_queries ):
58+ def test_latest_for_avid_tie_breaks_by_id (advisory_factory , django_assert_num_queries ):
7459 avid = "source/ADV-2"
75- ts = timestamps ["mid" ]
76-
77- first = advisory_factory (
78- avid = avid ,
79- advisory_id = "ADV-2" ,
80- collected_at = ts ,
81- )
82- second = advisory_factory (
83- avid = avid ,
84- advisory_id = "ADV-2" ,
85- collected_at = ts ,
86- )
60+
61+ first = advisory_factory (advisory_id = "ADV-2" , summary = "old advisory" )
62+ second = advisory_factory (advisory_id = "ADV-2" , summary = "new advisory" )
8763
8864 with django_assert_num_queries (1 ):
8965 result = AdvisoryV2 .objects .latest_for_avid (avid )
@@ -92,25 +68,11 @@ def test_latest_for_avid_tie_breaks_by_id(advisory_factory, timestamps, django_a
9268
9369
9470@pytest .mark .django_db
95- def test_latest_per_avid_returns_one_row_per_avid (
96- advisory_factory , timestamps , django_assert_num_queries
97- ):
98- advisory_factory (
99- avid = "source/A" ,
100- advisory_id = "A" ,
101- collected_at = timestamps ["old" ],
102- )
103- latest_a = advisory_factory (
104- avid = "source/A" ,
105- advisory_id = "A" ,
106- collected_at = timestamps ["new" ],
107- )
108-
109- latest_b = advisory_factory (
110- avid = "source/B" ,
111- advisory_id = "B" ,
112- collected_at = timestamps ["mid" ],
113- )
71+ def test_latest_per_avid_returns_one_row_per_avid (advisory_factory , django_assert_num_queries ):
72+ advisory_factory (advisory_id = "A" , summary = "old advisory" )
73+ latest_a = advisory_factory (advisory_id = "A" , summary = "new advisory" )
74+
75+ latest_b = advisory_factory (advisory_id = "B" , summary = "new advisory" )
11476
11577 with django_assert_num_queries (1 ):
11678 qs = AdvisoryV2 .objects .latest_per_avid ()
@@ -122,19 +84,11 @@ def test_latest_per_avid_returns_one_row_per_avid(
12284
12385
12486@pytest .mark .django_db
125- def test_latest_per_avid_excludes_older_versions (advisory_factory , timestamps ):
87+ def test_latest_per_avid_excludes_older_versions (advisory_factory ):
12688 avid = "source/C"
12789
128- older = advisory_factory (
129- avid = avid ,
130- advisory_id = "C" ,
131- collected_at = timestamps ["old" ],
132- )
133- latest = advisory_factory (
134- avid = avid ,
135- advisory_id = "C" ,
136- collected_at = timestamps ["new" ],
137- )
90+ older = advisory_factory (advisory_id = "C" , summary = "old advisory" )
91+ latest = advisory_factory (advisory_id = "C" , summary = "new advisory" )
13892
13993 results = list (AdvisoryV2 .objects .latest_per_avid ())
14094
@@ -144,30 +98,14 @@ def test_latest_per_avid_excludes_older_versions(advisory_factory, timestamps):
14498
14599@pytest .mark .django_db
146100def test_latest_for_avids_filters_and_collapses_correctly (
147- advisory_factory , timestamps , django_assert_num_queries
101+ advisory_factory , django_assert_num_queries
148102):
149- advisory_factory (
150- avid = "source/A" ,
151- advisory_id = "A" ,
152- collected_at = timestamps ["old" ],
153- )
154- latest_a = advisory_factory (
155- avid = "source/A" ,
156- advisory_id = "A" ,
157- collected_at = timestamps ["new" ],
158- )
159-
160- latest_b = advisory_factory (
161- avid = "source/B" ,
162- advisory_id = "B" ,
163- collected_at = timestamps ["mid" ],
164- )
165-
166- advisory_factory (
167- avid = "source/C" ,
168- advisory_id = "C" ,
169- collected_at = timestamps ["new" ],
170- )
103+
104+ advisory_factory (advisory_id = "A" , summary = "old advisory" )
105+ latest_a = advisory_factory (advisory_id = "A" , summary = "new advisory" )
106+
107+ advisory_factory (advisory_id = "B" , summary = "old advisory" )
108+ latest_b = advisory_factory (advisory_id = "B" , summary = "new advisory" )
171109
172110 with django_assert_num_queries (1 ):
173111 qs = AdvisoryV2 .objects .latest_for_avids ({"source/A" , "source/B" })
0 commit comments