Skip to content

Commit 5475f6c

Browse files
committed
[checklists] Ensure that issue severity is not duplicated in prenotification
Former code would produce announce text like this: They will fix 5 security defects with severities: low, low, low, low, and low.
1 parent 24bbf6d commit 5475f6c

2 files changed

Lines changed: 18 additions & 1 deletion

File tree

checklists/templatetags/checklist_extras.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ def enumerate_items(items, item_formatter=None):
5353

5454
@register.filter
5555
def enumerate_cves(cves, field="cve_year_number"):
56-
return enumerate_items([getattr(cve, field) for cve in cves])
56+
# Use `dict.fromkeys()` to preserve order while removing duplicates.
57+
return enumerate_items(dict.fromkeys(getattr(cve, field) for cve in cves))
5758

5859

5960
@register.filter

checklists/tests/test_templatetags.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,22 @@ def test_enumerate_cves_with_severity(self):
7878
result = enumerate_cves([cve1, cve2, cve3], "severity")
7979
self.assertEqual(result, "high, medium, and low")
8080

81+
def test_enumerate_cves_deduplicates_severity(self):
82+
cves = [
83+
self.factory.make_security_issue(severity="low", releases=[])
84+
for _ in range(5)
85+
]
86+
result = enumerate_cves(cves, "severity")
87+
self.assertEqual(result, "low")
88+
89+
def test_enumerate_cves_deduplicates_mixed_severity(self):
90+
cves = [
91+
self.factory.make_security_issue(severity=s, releases=[])
92+
for s in ("low", "moderate", "low", "moderate", "high")
93+
]
94+
result = enumerate_cves(cves, "severity")
95+
self.assertEqual(result, "low, moderate, and high")
96+
8197
def test_enumerate_cves_single(self):
8298
cve = self.factory.make_security_issue(cve_year_number="CVE-2024-12345")
8399
result = enumerate_cves([cve])

0 commit comments

Comments
 (0)