Skip to content

Commit aaf794a

Browse files
committed
Add unit tests and changelog #286
Signed-off-by: tdruez <[email protected]>
1 parent 5b84b61 commit aaf794a

File tree

6 files changed

+87
-28
lines changed

6 files changed

+87
-28
lines changed

CHANGELOG.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,9 @@ Release notes
120120
simplicity, and readability.
121121
https://github.com/aboutcode-org/dejacode/issues/241
122122

123+
- Refine the way the PURL fragments are handled in searches.
124+
https://github.com/aboutcode-org/dejacode/issues/286
125+
123126
### Version 5.2.1
124127

125128
- Fix the models documentation navigation.

component_catalog/tests/test_admin.py

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1676,11 +1676,6 @@ def test_package_changelist_advanced_search_on_protocol(self):
16761676
self.assertEqual(1, response.context_data["cl"].result_count)
16771677
self.assertIn(package3, response.context_data["cl"].result_list)
16781678

1679-
response = self.client.get(changelist_url + "[email protected]")
1680-
self.assertEqual(200, response.status_code)
1681-
self.assertEqual(1, response.context_data["cl"].result_count)
1682-
self.assertIn(package3, response.context_data["cl"].result_list)
1683-
16841679
def test_package_changelist_set_policy_action_proper(self):
16851680
self.client.login(username=self.user.username, password="secret")
16861681
p1 = Package.objects.create(filename="p1.zip", dataspace=self.dataspace1)

product_portfolio/tests/__init__.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,16 @@
66
# See https://aboutcode.org for more information about AboutCode FOSS projects.
77
#
88

9+
import uuid
10+
911
from component_catalog.models import Component
1012
from component_catalog.models import Package
1113
from component_catalog.tests import make_component
1214
from component_catalog.tests import make_package
1315
from dje.tests import make_string
1416
from product_portfolio.models import Product
1517
from product_portfolio.models import ProductComponent
18+
from product_portfolio.models import ProductDependency
1619
from product_portfolio.models import ProductItemPurpose
1720
from product_portfolio.models import ProductPackage
1821

@@ -74,3 +77,14 @@ def make_product_item_purpose(dataspace, **data):
7477
dataspace=dataspace,
7578
**data,
7679
)
80+
81+
82+
def make_product_dependency(product, **data):
83+
if "dependency_uid" not in data:
84+
data["dependency_uid"] = str(uuid.uuid4())
85+
86+
return ProductDependency.objects.create(
87+
product=product,
88+
dataspace=product.dataspace,
89+
**data,
90+
)

product_portfolio/tests/test_admin.py

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from component_catalog.models import Component
1515
from component_catalog.models import Package
16+
from component_catalog.tests import make_package
1617
from dje.filters import DataspaceFilter
1718
from dje.models import Dataspace
1819
from dje.tests import create_superuser
@@ -21,6 +22,7 @@
2122
from product_portfolio.models import Product
2223
from product_portfolio.models import ProductComponent
2324
from product_portfolio.models import ProductPackage
25+
from product_portfolio.tests import make_product_dependency
2426

2527

2628
class ProductPortfolioAdminsTestCase(TestCase):
@@ -482,3 +484,58 @@ def test_codebaseresource_admin_changeform_lookup_autocomplete(self):
482484
response = self.client.get(url)
483485
self.assertEqual(200, response.status_code)
484486
self.assertEqual(expected, response.content)
487+
488+
def test_product_dependencies_changelist_search(self):
489+
self.client.login(username=self.user.username, password="secret")
490+
changelist_url = reverse("admin:product_portfolio_productdependency_changelist")
491+
492+
package1 = make_package(self.dataspace, "pkg:pypi/[email protected]")
493+
package2 = make_package(self.dataspace, "pkg:pypi/[email protected]")
494+
495+
dependency1 = make_product_dependency(self.product1, for_package=package1)
496+
dependency2 = make_product_dependency(
497+
self.product1, for_package=package1, resolved_to_package=package2
498+
)
499+
500+
response = self.client.get(changelist_url)
501+
self.assertEqual(2, response.context_data["cl"].result_count)
502+
503+
response = self.client.get(changelist_url + "?q=django")
504+
self.assertEqual(2, response.context_data["cl"].result_count)
505+
506+
response = self.client.get(changelist_url + "?q=pkg:pypi/[email protected]")
507+
self.assertEqual(2, response.context_data["cl"].result_count)
508+
self.assertIn(dependency1, response.context_data["cl"].result_list)
509+
self.assertIn(dependency2, response.context_data["cl"].result_list)
510+
511+
response = self.client.get(changelist_url + "?q=dep")
512+
self.assertEqual(1, response.context_data["cl"].result_count)
513+
self.assertIn(dependency2, response.context_data["cl"].result_list)
514+
515+
response = self.client.get(changelist_url + "?q=pkg:pypi/[email protected]")
516+
self.assertEqual(1, response.context_data["cl"].result_count)
517+
self.assertIn(dependency2, response.context_data["cl"].result_list)
518+
519+
response = self.client.get(changelist_url + "?q=pypi/dep")
520+
self.assertEqual(1, response.context_data["cl"].result_count)
521+
self.assertIn(dependency2, response.context_data["cl"].result_list)
522+
523+
def test_product_dependencies_add_view(self):
524+
self.client.login(username=self.user.username, password="secret")
525+
url = reverse("admin:product_portfolio_productdependency_add")
526+
package2 = make_package(self.dataspace, "pkg:pypi/[email protected]")
527+
data = {
528+
"product": self.product1.pk,
529+
"dependency_uid": "a7e28b42-2212-456e-9215-9b3760db32c3",
530+
"for_package": self.package1.pk,
531+
"resolved_to_package": package2.pk,
532+
"is_runtime": "on",
533+
"is_pinned": "on",
534+
"is_direct": "on",
535+
}
536+
537+
response = self.client.post(url, data, follow=True)
538+
self.assertContains(response, "was added successfully")
539+
dependency = self.product1.dependencies.get()
540+
self.assertEqual(self.package1, dependency.for_package)
541+
self.assertEqual(package2, dependency.resolved_to_package)

product_portfolio/tests/test_models.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,14 @@
3333
from product_portfolio.models import Product
3434
from product_portfolio.models import ProductComponent
3535
from product_portfolio.models import ProductComponentAssignedLicense
36-
from product_portfolio.models import ProductDependency
3736
from product_portfolio.models import ProductInventoryItem
3837
from product_portfolio.models import ProductPackage
3938
from product_portfolio.models import ProductRelationStatus
4039
from product_portfolio.models import ProductSecuredManager
4140
from product_portfolio.models import ProductStatus
4241
from product_portfolio.models import ScanCodeProject
42+
from product_portfolio.tests import make_product
43+
from product_portfolio.tests import make_product_dependency
4344
from product_portfolio.tests import make_product_item_purpose
4445
from product_portfolio.tests import make_product_package
4546
from vulnerabilities.tests import make_vulnerability
@@ -1118,32 +1119,29 @@ def test_product_portfolio_scancode_project_model_can_start_import(self):
11181119
def test_product_dependency_model_save_validation(self):
11191120
package1 = Package.objects.create(filename="package1", dataspace=self.dataspace)
11201121
with self.assertRaises(ValidationError) as cm:
1121-
ProductDependency.objects.create(
1122+
make_product_dependency(
11221123
product=self.product1,
11231124
for_package=package1,
11241125
resolved_to_package=package1,
1125-
dataspace=self.dataspace,
11261126
)
11271127
self.assertEqual(
11281128
["The 'for_package' cannot be the same as 'resolved_to_package'."],
11291129
cm.exception.messages,
11301130
)
11311131

11321132
def test_product_dependency_prackage_queryset_declared_dependencies_count(self):
1133-
package1 = Package.objects.create(filename="package1", dataspace=self.dataspace)
1134-
package2 = Package.objects.create(filename="package2", dataspace=self.dataspace)
1135-
ProductDependency.objects.create(
1133+
package1 = make_package(filename="package1", dataspace=self.dataspace)
1134+
package2 = make_package(filename="package2", dataspace=self.dataspace)
1135+
make_product_dependency(
11361136
product=self.product1,
11371137
for_package=package1,
11381138
resolved_to_package=package2,
1139-
dataspace=self.dataspace,
11401139
)
1141-
product2 = Product.objects.create(name="Product2", dataspace=self.dataspace)
1142-
ProductDependency.objects.create(
1140+
product2 = make_product(name="Product2", dataspace=self.dataspace)
1141+
make_product_dependency(
11431142
product=product2,
11441143
for_package=package1,
11451144
resolved_to_package=package2,
1146-
dataspace=self.dataspace,
11471145
)
11481146

11491147
self.assertEqual(2, package1.declared_dependencies.count())

product_portfolio/tests/test_views.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,13 @@
5050
from product_portfolio.models import CodebaseResource
5151
from product_portfolio.models import Product
5252
from product_portfolio.models import ProductComponent
53-
from product_portfolio.models import ProductDependency
5453
from product_portfolio.models import ProductItemPurpose
5554
from product_portfolio.models import ProductPackage
5655
from product_portfolio.models import ProductRelationStatus
5756
from product_portfolio.models import ProductStatus
5857
from product_portfolio.models import ScanCodeProject
5958
from product_portfolio.tests import make_product
59+
from product_portfolio.tests import make_product_dependency
6060
from product_portfolio.tests import make_product_package
6161
from product_portfolio.views import ManageComponentGridView
6262
from vulnerabilities.models import VulnerabilityAnalysis
@@ -243,33 +243,25 @@ def test_product_portfolio_detail_view_tab_dependency_view(self):
243243

244244
package2 = Package.objects.create(filename="package2", dataspace=self.dataspace)
245245
# Unresolved package dependency
246-
ProductDependency.objects.create(
247-
dependency_uid=str(uuid.uuid4()),
246+
make_product_dependency(
248247
product=self.product1,
249248
for_package=self.package1,
250-
dataspace=self.dataspace,
251249
)
252250
# Resolved package dependency
253-
ProductDependency.objects.create(
254-
dependency_uid=str(uuid.uuid4()),
251+
make_product_dependency(
255252
product=self.product1,
256253
for_package=self.package1,
257254
resolved_to_package=package2,
258-
dataspace=self.dataspace,
259255
)
260256
# Unresolved Product dependency
261-
ProductDependency.objects.create(
262-
dependency_uid=str(uuid.uuid4()),
257+
make_product_dependency(
263258
product=self.product1,
264259
declared_dependency="pkg:type/name",
265-
dataspace=self.dataspace,
266260
)
267261
# Unresolved Product dependency
268-
ProductDependency.objects.create(
269-
dependency_uid=str(uuid.uuid4()),
262+
make_product_dependency(
270263
product=self.product1,
271264
resolved_to_package=package2,
272-
dataspace=self.dataspace,
273265
)
274266

275267
with self.assertMaxQueries(9):

0 commit comments

Comments
 (0)