Skip to content

Commit ff79d75

Browse files
committed
add unit test coverage
Signed-off-by: tdruez <tdruez@aboutcode.org>
1 parent 5a2a09c commit ff79d75

8 files changed

Lines changed: 1293 additions & 1 deletion

File tree

dje/tests/test_forms.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ def test_tabs_permission_formset_load_perms(self):
110110

111111
def test_copy_defaults_form_get_all_dataspaced_models(self):
112112
dataspaced_models = CopyDefaultsForm.get_all_dataspaced_models()
113-
self.assertEqual(10, len(dataspaced_models))
113+
self.assertEqual(11, len(dataspaced_models))
114114
self.assertEqual(7, len(dataspaced_models.get("Component Catalog")))
115115
self.assertIn("Subcomponent", str(dataspaced_models.get("Component Catalog")))
116116

product_portfolio/tests/test_views.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@
6464
from vulnerabilities.models import VulnerabilityAnalysis
6565
from vulnerabilities.tests import make_vulnerability
6666
from vulnerabilities.tests import make_vulnerability_analysis
67+
from vulnerabilities.triage.models import ProductTriageRuleset
68+
from vulnerabilities.triage.models import TriageAction
69+
from vulnerabilities.triage.models import TriageRuleset
6770
from workflow.models import Request
6871
from workflow.models import RequestTemplate
6972

@@ -298,6 +301,18 @@ def test_product_portfolio_detail_view_tab_vulnerability_queryset(self):
298301

299302
def test_product_portfolio_tab_vulnerability_view_filters(self):
300303
self.client.login(username="nexb_user", password="secret")
304+
# The "Recommendation" column, and its triage_action filter, only render when the
305+
# product has at least one enabled TriageRuleset assigned to it.
306+
ruleset = TriageRuleset.objects.create(
307+
name="Upgrade Ruleset",
308+
action=TriageAction.UPGRADE,
309+
precedence=100,
310+
dataspace=self.dataspace,
311+
)
312+
ProductTriageRuleset.objects.create(
313+
product=self.product1, ruleset=ruleset, dataspace=self.dataspace
314+
)
315+
301316
url = self.product1.get_url("tab_vulnerabilities")
302317
response = self.client.get(url)
303318
self.assertContains(response, "?vulnerabilities-triage_action=#vulnerabilities")
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
#
2+
# Copyright (c) nexB Inc. and others. All rights reserved.
3+
# DejaCode is a trademark of nexB Inc.
4+
# SPDX-License-Identifier: AGPL-3.0-only
5+
# See https://github.com/aboutcode-org/dejacode for support or download.
6+
# See https://aboutcode.org for more information about AboutCode FOSS projects.
7+
#
8+
9+
import random
10+
11+
from dje.tests import make_string
12+
from vulnerabilities.triage.models import AnalysisPreset
13+
from vulnerabilities.triage.models import ProductTriageRuleset
14+
from vulnerabilities.triage.models import TriageRuleset
15+
16+
17+
def make_triage_ruleset(dataspace, **data):
18+
"""Create a TriageRuleset for test purposes."""
19+
if "name" not in data:
20+
data["name"] = f"ruleset-{make_string(10)}"
21+
22+
if "precedence" not in data:
23+
# `precedence` is unique per dataspace: randomize the default so tests creating
24+
# several rulesets without an explicit precedence do not collide with each other.
25+
data["precedence"] = random.randint(1, 1_000_000)
26+
27+
return TriageRuleset.objects.create(
28+
dataspace=dataspace,
29+
**data,
30+
)
31+
32+
33+
def make_analysis_preset(dataspace, **data):
34+
"""Create an AnalysisPreset for test purposes."""
35+
if "name" not in data:
36+
data["name"] = f"preset-{make_string(10)}"
37+
38+
if not any(data.get(field) for field in ("state", "justification", "responses", "detail")):
39+
data["state"] = AnalysisPreset.State.NOT_AFFECTED
40+
41+
return AnalysisPreset.objects.create(
42+
dataspace=dataspace,
43+
**data,
44+
)
45+
46+
47+
def make_product_triage_ruleset(product, ruleset=None, **data):
48+
"""Activate a TriageRuleset for the given product."""
49+
dataspace = product.dataspace
50+
51+
if not ruleset:
52+
ruleset = make_triage_ruleset(dataspace)
53+
54+
return ProductTriageRuleset.objects.create(
55+
product=product,
56+
ruleset=ruleset,
57+
dataspace=dataspace,
58+
**data,
59+
)

0 commit comments

Comments
 (0)