Skip to content

Commit 034b5ad

Browse files
committed
fix underlying bugs
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent f91d72c commit 034b5ad

4 files changed

Lines changed: 44 additions & 8 deletions

File tree

vulnerabilities/triage/forms.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ class Meta:
6262
"request_template",
6363
]
6464

65+
def clean_request_template(self):
66+
request_template = self.cleaned_data.get("request_template")
67+
if request_template and not request_template.created_by_id:
68+
raise ValidationError(
69+
"This request template has no creator and cannot be used to open requests."
70+
)
71+
return request_template
72+
6573
def __init__(self, *args, **kwargs):
6674
super().__init__(*args, **kwargs)
6775
self.add_rule_fields()

vulnerabilities/triage/management/commands/create_triage_rulesets.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
from vulnerabilities.triage.models import TriageAction
1515
from vulnerabilities.triage.models import TriageRuleset
1616

17-
"""
18-
docker compose -f compose.dev.yml exec web ./manage.py create_triage_rulesets nexB
19-
"""
20-
2117
REFERENCE_PRESETS = [
2218
{
2319
"name": "Auto-Close - Dev Only",

vulnerabilities/triage/management/commands/evaluate_triage.py

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@
1414
from vulnerabilities.triage.models import ProductTriageRuleset
1515
from vulnerabilities.triage.models import TriageRecord
1616

17-
"""
18-
docker compose -f compose.dev.yml exec web ./manage.py evaluate_triage nexB
19-
"""
20-
2117

2218
class Command(BaseCommand):
2319
help = "Evaluate all enabled triage rulesets against all products in the given dataspace."

vulnerabilities/triage/tests/test_forms.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@
66
# See https://aboutcode.org for more information about AboutCode FOSS projects.
77
#
88

9+
from django.contrib.contenttypes.models import ContentType
910
from django.test import TestCase
1011

1112
from dje.models import Dataspace
13+
from dje.tests import create_user
14+
from product_portfolio.models import Product
1215
from vulnerabilities.triage.forms import AnalysisPresetForm
1316
from vulnerabilities.triage.forms import TriageRulesetForm
1417
from vulnerabilities.triage.models import AnalysisPreset
1518
from vulnerabilities.triage.models import TriageRuleset
19+
from workflow.models import RequestTemplate
1620

1721

1822
class AnalysisPresetFormTestCase(TestCase):
@@ -84,3 +88,35 @@ def test_save_keeps_an_inactive_rule_that_has_parameters_with_their_defaults(sel
8488
self.assertEqual(
8589
{"is_active": False, "min_risk_score": 8.0}, ruleset.rules_config["risk_score"]
8690
)
91+
92+
def test_rejects_a_request_template_with_no_creator(self):
93+
# A RequestTemplate normally always has a creator (the admin form sets it on
94+
# addition), but nothing at the DB level guarantees it -- reject it here rather
95+
# than let create_triage_requests crash later with an IntegrityError.
96+
request_template = RequestTemplate.objects.create(
97+
name="Broken Template",
98+
description="Header",
99+
dataspace=self.dataspace,
100+
content_type=ContentType.objects.get_for_model(Product),
101+
)
102+
data = {"name": "My Ruleset", "precedence": 100, "request_template": request_template.pk}
103+
form = TriageRulesetForm(data=data, instance=TriageRuleset(dataspace=self.dataspace))
104+
105+
self.assertFalse(form.is_valid())
106+
107+
msg = "This request template has no creator and cannot be used to open requests."
108+
self.assertEqual({"request_template": [msg]}, form.errors)
109+
110+
def test_accepts_a_request_template_with_a_creator(self):
111+
requester = create_user("requester", self.dataspace)
112+
request_template = RequestTemplate.objects.create(
113+
name="Valid Template",
114+
description="Header",
115+
dataspace=self.dataspace,
116+
content_type=ContentType.objects.get_for_model(Product),
117+
created_by=requester,
118+
)
119+
data = {"name": "My Ruleset", "precedence": 100, "request_template": request_template.pk}
120+
form = TriageRulesetForm(data=data, instance=TriageRuleset(dataspace=self.dataspace))
121+
122+
self.assertTrue(form.is_valid(), form.errors)

0 commit comments

Comments
 (0)