Skip to content

Commit 7d657fe

Browse files
committed
add test for integration of scorecard-compliance
Signed-off-by: NucleonGodX <racerpro41@gmail.com>
1 parent 7d7323f commit 7d657fe

1 file changed

Lines changed: 102 additions & 0 deletions

File tree

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
from unittest.mock import patch
2+
3+
from django.test import TestCase
4+
from django.utils import timezone
5+
6+
from scanpipe.models import DiscoveredPackage
7+
from scanpipe.models import DiscoveredPackageScore
8+
from scanpipe.models import Project
9+
from scanpipe.pipes.compliance_thresholds import ScorecardThresholdsPolicy
10+
from scanpipe.pipes.scorecard_compliance import evaluate_scorecard_compliance
11+
12+
13+
class EvaluateScorecardComplianceTest(TestCase):
14+
"""Test evaluate_scorecard_compliance pipe function."""
15+
16+
def setUp(self):
17+
self.project = Project.objects.create(name="test_project")
18+
19+
def create_package_with_score(self, package_name, score_value):
20+
"""Create a package with a scorecard score."""
21+
package = DiscoveredPackage.objects.create(
22+
project=self.project,
23+
name=package_name,
24+
type="pypi",
25+
vcs_url="https://github.com/numpy/numpy",
26+
)
27+
28+
DiscoveredPackageScore.objects.create(
29+
discovered_package=package,
30+
scoring_tool="ossf-scorecard",
31+
score=str(score_value),
32+
scoring_tool_version="v4.10.2",
33+
score_date=timezone.now(),
34+
)
35+
36+
return package
37+
38+
def test_no_scorecard_policy_configured(self):
39+
"""Test that function returns early when no scorecard policy is configured."""
40+
with patch(
41+
"scanpipe.pipes.scorecard_compliance.get_project_scorecard_thresholds"
42+
) as mock_get_policy:
43+
mock_get_policy.return_value = None
44+
45+
evaluate_scorecard_compliance(self.project)
46+
47+
self.project.refresh_from_db()
48+
self.assertNotIn("scorecard_compliance_alert", self.project.extra_data)
49+
50+
def test_sets_compliance_alert_correctly(self):
51+
"""Test that compliance alert is set correctly based on scores."""
52+
thresholds = {9.0: "ok", 7.0: "warning", 0: "error"}
53+
policy = ScorecardThresholdsPolicy(thresholds)
54+
55+
self.create_package_with_score("good_package", 9.5)
56+
57+
with patch(
58+
"scanpipe.pipes.scorecard_compliance.get_project_scorecard_thresholds"
59+
) as mock_get_policy:
60+
mock_get_policy.return_value = policy
61+
62+
evaluate_scorecard_compliance(self.project)
63+
64+
self.project.refresh_from_db()
65+
self.assertEqual(
66+
self.project.extra_data["scorecard_compliance_alert"], "ok"
67+
)
68+
69+
def test_worst_alert_selected_for_multiple_packages(self):
70+
"""Test that worst alert level is selected across multiple packages."""
71+
thresholds = {9.0: "ok", 7.0: "warning", 0: "error"}
72+
policy = ScorecardThresholdsPolicy(thresholds)
73+
74+
self.create_package_with_score("good_package", 9.5)
75+
self.create_package_with_score("bad_package", 5.0)
76+
77+
with patch(
78+
"scanpipe.pipes.scorecard_compliance.get_project_scorecard_thresholds"
79+
) as mock_get_policy:
80+
mock_get_policy.return_value = policy
81+
82+
evaluate_scorecard_compliance(self.project)
83+
84+
self.project.refresh_from_db()
85+
self.assertEqual(
86+
self.project.extra_data["scorecard_compliance_alert"], "error"
87+
)
88+
89+
def test_no_packages_with_scores(self):
90+
"""Test behavior when no packages have scorecard scores."""
91+
thresholds = {9.0: "ok", 7.0: "warning", 0: "error"}
92+
policy = ScorecardThresholdsPolicy(thresholds)
93+
94+
with patch(
95+
"scanpipe.pipes.scorecard_compliance.get_project_scorecard_thresholds"
96+
) as mock_get_policy:
97+
mock_get_policy.return_value = policy
98+
99+
evaluate_scorecard_compliance(self.project)
100+
101+
self.project.refresh_from_db()
102+
self.assertNotIn("scorecard_compliance_alert", self.project.extra_data)

0 commit comments

Comments
 (0)