Skip to content

Commit eca7e6a

Browse files
committed
Exclude locked and inactive Products from update_license_unknown
Signed-off-by: tdruez <[email protected]>
1 parent abe0d52 commit eca7e6a

File tree

3 files changed

+38
-1
lines changed

3 files changed

+38
-1
lines changed

dje/models.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -749,6 +749,12 @@ def product(self, product):
749749
"""Filter based on the provided ``product`` object."""
750750
return self.filter(product=product)
751751

752+
def exclude_locked_products(self):
753+
"""Filter out the non-active and locked Products."""
754+
return self.exclude(product__configuration_status__is_locked=True).filter(
755+
product__is_active=True
756+
)
757+
752758

753759
class DataspacedModel(models.Model):
754760
"""Abstract base model for all models that are keyed by Dataspace."""

product_portfolio/models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -706,7 +706,7 @@ def license_unknown(self):
706706
return self.filter(license_expression="unknown")
707707

708708
def update_license_unknown(self):
709-
for product_package in self.license_unknown():
709+
for product_package in self.exclude_locked_products().license_unknown():
710710
product_package.update_license_unknown()
711711

712712
def annotate_weighted_risk_score(self):

product_portfolio/tests/test_models.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -846,6 +846,20 @@ def test_product_relationship_queryset_update_weighted_risk_score(self):
846846
pp1.refresh_from_db()
847847
self.assertIsNone(pp1.weighted_risk_score)
848848

849+
def test_productpackage_queryset_exclude_locked_products(self):
850+
active_product = make_product(self.dataspace)
851+
pp1 = make_product_package(active_product)
852+
inactive_product = make_product(self.dataspace, is_active=False)
853+
make_product_package(inactive_product)
854+
855+
qs = ProductPackage.objects.exclude_locked_products()
856+
self.assertQuerySetEqual(qs, [pp1])
857+
858+
locked_status = make_product_status(self.dataspace, is_locked=True)
859+
active_product.update(configuration_status=locked_status)
860+
qs = ProductPackage.objects.exclude_locked_products()
861+
self.assertQuerySetEqual(qs, [])
862+
849863
def test_productpackage_queryset_license_unknown(self):
850864
package1 = make_package(self.dataspace, declared_license_expression="unknown")
851865
package2 = make_package(self.dataspace, declared_license_expression="mit")
@@ -879,6 +893,23 @@ def test_productpackage_queryset_update_license_unknown(self):
879893
self.assertEqual("mit", pp1.license_expression)
880894
self.assertEqual("", pp2.license_expression)
881895

896+
def test_productpackage_queryset_update_license_unknown_exclude_locked_products(self):
897+
locked_status = make_product_status(self.dataspace, is_locked=True)
898+
self.product1.update(configuration_status=locked_status)
899+
900+
package1 = make_package(self.dataspace, declared_license_expression="mit")
901+
pp1 = make_product_package(self.product1, package=package1, license_expression="unknown")
902+
903+
ProductPackage.objects.update_license_unknown()
904+
pp1.refresh_from_db()
905+
# Product is locked
906+
self.assertEqual("unknown", pp1.license_expression)
907+
908+
self.product1.update(configuration_status=None)
909+
ProductPackage.objects.update_license_unknown()
910+
pp1.refresh_from_db()
911+
self.assertEqual("mit", pp1.license_expression)
912+
882913
def test_productrelation_model_compute_weighted_risk_score(self):
883914
purpose1 = make_product_item_purpose(self.dataspace)
884915

0 commit comments

Comments
 (0)