@@ -716,3 +716,59 @@ def has_object_permission(self, request, view, obj):
716716 composed_perm = (IsAuthenticatedUserOwner | permissions .IsAdminUser )
717717 hasperm = composed_perm ().has_object_permission (request , None , None )
718718 assert hasperm is False
719+
720+ def test_operand_holder_is_hashable (self ):
721+ assert hash ((permissions .IsAuthenticated & permissions .IsAdminUser ))
722+
723+ def test_operand_holder_hash_same_for_same_operands_and_operator (self ):
724+ first_operand_holder = (
725+ permissions .IsAuthenticated & permissions .IsAdminUser
726+ )
727+ second_operand_holder = (
728+ permissions .IsAuthenticated & permissions .IsAdminUser
729+ )
730+
731+ assert hash (first_operand_holder ) == hash (second_operand_holder )
732+
733+ def test_operand_holder_hash_differs_for_different_operands (self ):
734+ first_operand_holder = (
735+ permissions .IsAuthenticated & permissions .IsAdminUser
736+ )
737+ second_operand_holder = (
738+ permissions .AllowAny & permissions .IsAdminUser
739+ )
740+ third_operand_holder = (
741+ permissions .IsAuthenticated & permissions .AllowAny
742+ )
743+
744+ assert hash (first_operand_holder ) != hash (second_operand_holder )
745+ assert hash (first_operand_holder ) != hash (third_operand_holder )
746+ assert hash (second_operand_holder ) != hash (third_operand_holder )
747+
748+ def test_operand_holder_hash_differs_for_different_operators (self ):
749+ first_operand_holder = (
750+ permissions .IsAuthenticated & permissions .IsAdminUser
751+ )
752+ second_operand_holder = (
753+ permissions .IsAuthenticated | permissions .IsAdminUser
754+ )
755+
756+ assert hash (first_operand_holder ) != hash (second_operand_holder )
757+
758+ def test_filtering_permissions (self ):
759+ unfiltered_permissions = [
760+ permissions .IsAuthenticated & permissions .IsAdminUser ,
761+ permissions .IsAuthenticated & permissions .IsAdminUser ,
762+ permissions .AllowAny ,
763+ ]
764+ expected_permissions = [
765+ permissions .IsAuthenticated & permissions .IsAdminUser ,
766+ permissions .AllowAny ,
767+ ]
768+
769+ filtered_permissions = [
770+ perm for perm
771+ in dict .fromkeys (unfiltered_permissions )
772+ ]
773+
774+ assert filtered_permissions == expected_permissions
0 commit comments