@@ -780,6 +780,19 @@ def test_productcomponent_model_is_custom_component(self):
780780 pc1 .save ()
781781 self .assertFalse (pc1 .is_custom_component )
782782
783+ def test_productpackage_model_update_license_unknown (self ):
784+ package1 = make_package (self .dataspace , declared_license_expression = "mit" )
785+ pp1 = make_product_package (self .product1 , package = package1 )
786+
787+ pp1 .update_license_unknown ()
788+ pp1 .refresh_from_db ()
789+ self .assertEqual ("" , pp1 .license_expression )
790+
791+ pp1 .update (license_expression = "unknown" )
792+ pp1 .update_license_unknown ()
793+ pp1 .refresh_from_db ()
794+ self .assertEqual ("mit" , pp1 .license_expression )
795+
783796 def test_product_relationship_queryset_vulnerable (self ):
784797 pp1 = make_product_package (self .product1 )
785798 product_package_qs = ProductPackage .objects .vulnerable ()
@@ -833,6 +846,70 @@ def test_product_relationship_queryset_update_weighted_risk_score(self):
833846 pp1 .refresh_from_db ()
834847 self .assertIsNone (pp1 .weighted_risk_score )
835848
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+
863+ def test_productpackage_queryset_license_unknown (self ):
864+ package1 = make_package (self .dataspace , declared_license_expression = "unknown" )
865+ package2 = make_package (self .dataspace , declared_license_expression = "mit" )
866+ pp1 = make_product_package (self .product1 , package = package1 )
867+ pp2 = make_product_package (self .product1 , package = package2 )
868+
869+ qs = ProductPackage .objects .license_unknown ()
870+ self .assertQuerySetEqual ([], qs )
871+
872+ pp1 .update (license_expression = "unknown" )
873+ pp2 .update (license_expression = "mit" )
874+ qs = ProductPackage .objects .license_unknown ()
875+ self .assertQuerySetEqual (qs , [pp1 ])
876+
877+ def test_productpackage_queryset_update_license_unknown (self ):
878+ package1 = make_package (self .dataspace , declared_license_expression = "mit" )
879+ package2 = make_package (self .dataspace , declared_license_expression = "mit" )
880+ pp1 = make_product_package (self .product1 , package = package1 )
881+ pp2 = make_product_package (self .product1 , package = package2 )
882+
883+ ProductPackage .objects .update_license_unknown ()
884+ pp1 .refresh_from_db ()
885+ pp2 .refresh_from_db ()
886+ self .assertEqual ("" , pp1 .license_expression )
887+ self .assertEqual ("" , pp2 .license_expression )
888+
889+ pp1 .update (license_expression = "unknown" )
890+ ProductPackage .objects .update_license_unknown ()
891+ pp1 .refresh_from_db ()
892+ pp2 .refresh_from_db ()
893+ self .assertEqual ("mit" , pp1 .license_expression )
894+ self .assertEqual ("" , pp2 .license_expression )
895+
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+
836913 def test_productrelation_model_compute_weighted_risk_score (self ):
837914 purpose1 = make_product_item_purpose (self .dataspace )
838915
0 commit comments