|
6 | 6 | # See https://aboutcode.org for more information about AboutCode FOSS projects. |
7 | 7 | # |
8 | 8 |
|
| 9 | +from django.contrib.contenttypes.models import ContentType |
9 | 10 | from django.test import TestCase |
10 | 11 |
|
11 | 12 | from dje.models import Dataspace |
| 13 | +from dje.tests import create_user |
| 14 | +from product_portfolio.models import Product |
12 | 15 | from vulnerabilities.triage.forms import AnalysisPresetForm |
13 | 16 | from vulnerabilities.triage.forms import TriageRulesetForm |
14 | 17 | from vulnerabilities.triage.models import AnalysisPreset |
15 | 18 | from vulnerabilities.triage.models import TriageRuleset |
| 19 | +from workflow.models import RequestTemplate |
16 | 20 |
|
17 | 21 |
|
18 | 22 | class AnalysisPresetFormTestCase(TestCase): |
@@ -84,3 +88,35 @@ def test_save_keeps_an_inactive_rule_that_has_parameters_with_their_defaults(sel |
84 | 88 | self.assertEqual( |
85 | 89 | {"is_active": False, "min_risk_score": 8.0}, ruleset.rules_config["risk_score"] |
86 | 90 | ) |
| 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