|
10 | 10 | from django.test import TestCase |
11 | 11 |
|
12 | 12 | from component_catalog.models import Package |
| 13 | +from component_catalog.tests import make_component |
13 | 14 | from component_catalog.tests import make_package |
14 | 15 | from dje.models import Dataspace |
15 | 16 | from license_library.models import License |
16 | 17 | from organization.models import Owner |
17 | 18 | from policy.models import UsagePolicy |
| 19 | +from product_portfolio.filters import ProductComponentFilterSet |
18 | 20 | from product_portfolio.filters import ProductFilterSet |
19 | 21 | from product_portfolio.filters import ProductPackageFilterSet |
20 | 22 | from product_portfolio.models import Product |
21 | 23 | from product_portfolio.models import ProductPackage |
22 | 24 | from product_portfolio.models import ProductPolicyViolation |
23 | 25 | from product_portfolio.tests import make_product |
| 26 | +from product_portfolio.tests import make_product_component |
24 | 27 | from product_portfolio.tests import make_product_package |
| 28 | +from vulnerabilities.tests import make_vulnerability |
25 | 29 |
|
26 | 30 |
|
27 | 31 | class ProductPackageFilterSetTestCase(TestCase): |
@@ -164,3 +168,35 @@ def test_filter_by_unknown_rule_returns_all(self): |
164 | 168 | ) |
165 | 169 | self.assertIn(self.pp_with_policy, filterset.qs) |
166 | 170 | self.assertIn(self.pp_without_policy, filterset.qs) |
| 171 | + |
| 172 | + |
| 173 | +class ProductPackageFilterByRuleDistinctTestCase(TestCase): |
| 174 | + def setUp(self): |
| 175 | + self.dataspace = Dataspace.objects.create(name="nexB") |
| 176 | + self.product = make_product(self.dataspace) |
| 177 | + |
| 178 | + def test_filter_by_vulnerability_rule_returns_distinct_results(self): |
| 179 | + package = make_package(self.dataspace) |
| 180 | + make_vulnerability(self.dataspace, affecting=package) |
| 181 | + make_vulnerability(self.dataspace, affecting=package) |
| 182 | + make_product_package(self.product, package=package) |
| 183 | + filterset = ProductPackageFilterSet( |
| 184 | + dataspace=self.dataspace, |
| 185 | + data={"policy_rule": "vulnerability_detected"}, |
| 186 | + ) |
| 187 | + self.assertEqual(1, filterset.qs.count()) |
| 188 | + |
| 189 | + |
| 190 | +class ProductComponentFilterByRuleTestCase(TestCase): |
| 191 | + def setUp(self): |
| 192 | + self.dataspace = Dataspace.objects.create(name="nexB") |
| 193 | + self.product = make_product(self.dataspace) |
| 194 | + |
| 195 | + def test_filter_by_policy_rule_returns_empty_for_components(self): |
| 196 | + component = make_component(self.dataspace) |
| 197 | + make_product_component(self.product, component=component) |
| 198 | + filterset = ProductComponentFilterSet( |
| 199 | + dataspace=self.dataspace, |
| 200 | + data={"policy_rule": "usage_policy_error"}, |
| 201 | + ) |
| 202 | + self.assertEqual(0, filterset.qs.count()) |
0 commit comments