Coverage for product_risk_suite / product / tests.py: 100%
106 statements
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-13 23:42 +0000
« prev ^ index » next coverage.py v7.14.0, created at 2026-05-13 23:42 +0000
1from django.test import TestCase
2from collections import OrderedDict
4from .models import *
5from risk_assessment.models import *
7# Create your tests here.
8class ProductRiskEntryTest(TestCase):
9 custom_id = "pre-test-001"
10 risk_title = "PRE test risk"
11 def setUp(self):
12 os = Asset.objects.create(name="OS")
13 Stride.objects.create(id=1, name="S")
14 usb = Origin.objects.create(name="USB")
15 lc = LiveCycle.objects.create(name="in use")
16 risk = Risk(id=0, custom_id=self.custom_id, asset=os, origin=usb, live_cycle=lc, title=self.risk_title, description="more info")
17 risk.save()
18 s = Stride.objects.get(id=1)
19 risk.stride.set([s])
20 risk.save()
22 self.risk_rating_init = RiskRating.objects.create(likelihood_of_occurrence=2, severity_of_impact=5)
23 self.init_risk = 10
24 self.risk_rating_miti = RiskRating.objects.create(likelihood_of_occurrence=1, severity_of_impact=5)
25 self.mit_risk = 5
27 self.secReq1 = SecurityRequirement.objects.create(norm_short="CRA", norm_long="CRA long", description_short="Part 1.1", description_long="details 1.1", slug="cra-1.1")
28 self.secReq2 = SecurityRequirement.objects.create(norm_short="CRA", norm_long="CRA long", description_short="Part 1.2", description_long="details 1.2", slug="cra-1.2")
29 rm = RiskMitigation(id=0, mitigation="We fixed it", rational="We fixed it good")
30 rm.save()
31 rm.security_requirements.set([self.secReq1])
32 rm.save()
33 self.rm = rm
35 self.u = User.objects.create(username="testuser")
36 self.s1 = Status.objects.create(id=1, status="On going")
37 self.ev = Evidence.objects.create(id=1, due_date="2026-04-23", responsible=self.u, status=self.s1, evidence="[REQ-001] the evidence req", evidence_link="https://example.com/requirement-001")
39 def test_product_risk_entry_str(self):
40 risk = Risk.objects.get(id=0)
41 acc = ProductRiskEntry.objects.create(id=0, risk=risk, risk_accepted = True, risk_rating_initial=self.risk_rating_init)
42 mit_evidence = ProductRiskEntry.objects.create(id=1, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init, risk_mitigation=self.rm, risk_rating_after_mitigation=self.risk_rating_miti)
43 mit_evidence.evidences.set([self.ev])
44 mit_no_evidence = ProductRiskEntry.objects.create(id=2, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init, risk_mitigation=self.rm, risk_rating_after_mitigation=self.risk_rating_miti)
45 unmit = ProductRiskEntry.objects.create(id=3, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init)
47 self.assertEqual(str(acc), f"Accepted Risk: {self.custom_id} - {self.risk_title}")
48 self.assertEqual(str(mit_evidence), f"Mitigated Risk: {self.custom_id} - {self.risk_title} Risk: {self.mit_risk}")
49 self.assertEqual(str(mit_no_evidence), f"Mitigated Risk: {self.custom_id} - {self.risk_title} Risk: {self.mit_risk}")
50 self.assertEqual(str(unmit), f"*Un*mitigated Risk: {self.custom_id} - {self.risk_title} Open risk: {self.init_risk}")
52class ProductRiskAnalysisTest(TestCase):
53 custom_id = "pra-test-002"
54 risk_title = "PRA test risk"
56 def setUp(self):
57 os = Asset.objects.create(name="OS")
58 Stride.objects.create(id=1, name="S")
59 usb = Origin.objects.create(name="USB")
60 lc = LiveCycle.objects.create(name="in use")
61 risk = Risk(id=0, custom_id=self.custom_id, asset=os, origin=usb, live_cycle=lc, title=self.risk_title, description="more info")
62 risk.save()
63 s = Stride.objects.get(id=1)
64 risk.stride.set([s])
65 risk.save()
67 self.risk_rating_init = RiskRating.objects.create(likelihood_of_occurrence=2, severity_of_impact=5)
68 self.init_risk = 10
69 self.risk_rating_miti = RiskRating.objects.create(likelihood_of_occurrence=1, severity_of_impact=5)
70 self.mit_risk = 5
72 self.secReq1 = SecurityRequirement.objects.create(norm_short="CRA", norm_long="CRA long", description_short="Part 1.1", description_long="details 1.1", slug="cra-1.1")
73 self.secReq2 = SecurityRequirement.objects.create(norm_short="CRA", norm_long="CRA long", description_short="Part 1.2", description_long="details 1.2", slug="cra-1.2")
74 rm = RiskMitigation(id=0, mitigation="We fixed it", rational="We fixed it good")
75 rm.save()
76 rm.security_requirements.set([self.secReq1])
77 rm.save()
78 self.rm = rm
80 self.u = User.objects.create(username="testuser")
81 self.s1 = Status.objects.create(id=1, status="On going")
82 self.ev = Evidence.objects.create(id=1, due_date="2026-04-23", responsible=self.u, status=self.s1, evidence="[REQ-001] the evidence req", evidence_link="https://example.com/requirement-001")
84 acc = ProductRiskEntry.objects.create(id=0, risk=risk, risk_accepted = True, risk_rating_initial=self.risk_rating_init)
85 mit_evidence = ProductRiskEntry.objects.create(id=1, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init, risk_mitigation=self.rm, risk_rating_after_mitigation=self.risk_rating_miti)
86 mit_evidence.evidences.set([self.ev])
87 mit_evidence.save()
88 mit_no_evidence = ProductRiskEntry.objects.create(id=2, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init, risk_mitigation=self.rm, risk_rating_after_mitigation=self.risk_rating_miti)
89 unmit = ProductRiskEntry.objects.create(id=3, risk=risk, risk_accepted = False, risk_rating_initial=self.risk_rating_init)
91 def test_str(self):
92 pra = ProductRiskAnalysis.objects.create(id=0, name="Our first analysis", slug="our-first-analysis")
93 pra.risk_entries.set([ProductRiskEntry.objects.get(id=0), ProductRiskEntry.objects.get(id=1), ProductRiskEntry.objects.get(id=2), ProductRiskEntry.objects.get(id=3)])
94 pra.save()
96 self.assertEqual(str(ProductRiskAnalysis.objects.get(id=0)), "Our first analysis")
98 def test_get_risk_summary(self):
99 pra = ProductRiskAnalysis.objects.create(id=0, name="Our first analysis", slug="our-first-analysis")
100 pra.risk_entries.set([ProductRiskEntry.objects.get(id=0), ProductRiskEntry.objects.get(id=1), ProductRiskEntry.objects.get(id=2), ProductRiskEntry.objects.get(id=3)])
101 pra.save()
103 risk_summary = ProductRiskAnalysis.get_risk_summary(pra.risk_entries)
104 self.assertEqual(risk_summary["risk_severities_before_mitigation"][Risk5x5.LOW.name], 0)
105 self.assertEqual(risk_summary["risk_severities_before_mitigation"][Risk5x5.MID.name], 4)
106 self.assertEqual(risk_summary["risk_severities_before_mitigation"][Risk5x5.HIGH.name], 0)
108 self.assertEqual(risk_summary["risk_severities_after_mitigation"][Risk5x5.LOW.name], 2)
109 self.assertEqual(risk_summary["risk_severities_after_mitigation"][Risk5x5.MID.name], 2)
110 self.assertEqual(risk_summary["risk_severities_after_mitigation"][Risk5x5.HIGH.name], 0)
112 self.assertEqual(risk_summary["risk_severity_colors"][Risk5x5.LOW.name], "#d0e6dc")
113 self.assertEqual(risk_summary["risk_severity_colors"][Risk5x5.MID.name], "#fff3cc")
114 self.assertEqual(risk_summary["risk_severity_colors"][Risk5x5.HIGH.name], "#f8d6d9")
116 self.assertEqual(risk_summary["n_risks"], 4)
117 self.assertEqual(len(risk_summary["unmitigated_risks"]), 2)
118 self.assertEqual(risk_summary["unmitigated_risks"][0], "pra-test-002")
119 self.assertEqual(risk_summary["unmitigated_risks"][1], "pra-test-002")
120 self.assertEqual(risk_summary["mitigation_stati"], {
121 "open": 0,
122 "on_going": 1,
123 "finished": 0,
124 "rejected": 0,
125 })
127 self.assertEqual(risk_summary["covered_sec_reqs"], OrderedDict(
128 {"CRA: Part 1.1": "cra-1.1"},
129 ))
131class ProductTest(TestCase):
132 def setUp(self):
133 Product.objects.create(id=0, title="My test project", description="A real cool test project")
135 def test_str(self):
136 p = Product.objects.get(id=0)
137 self.assertEqual(str(p), "My test project")