@@ -593,6 +593,58 @@ def test_models_documents_get_abilities_preset_role(django_assert_num_queries):
593
593
}
594
594
595
595
596
+ @pytest .mark .parametrize (
597
+ "is_authenticated,role,link_reach,link_role,can_destroy" ,
598
+ [
599
+ (True , "owner" , "restricted" , "editor" , True ),
600
+ (True , "owner" , "restricted" , "reader" , True ),
601
+ (True , "owner" , "authenticated" , "editor" , True ),
602
+ (True , "owner" , "authenticated" , "reader" , True ),
603
+ (True , "owner" , "public" , "editor" , True ),
604
+ (True , "owner" , "public" , "reader" , True ),
605
+ (True , "administrator" , "restricted" , "editor" , True ),
606
+ (True , "administrator" , "restricted" , "reader" , True ),
607
+ (True , "administrator" , "authenticated" , "editor" , True ),
608
+ (True , "administrator" , "authenticated" , "reader" , True ),
609
+ (True , "administrator" , "public" , "editor" , True ),
610
+ (True , "administrator" , "public" , "reader" , True ),
611
+ (True , "editor" , "restricted" , "editor" , True ),
612
+ (True , "editor" , "restricted" , "reader" , True ),
613
+ (True , "editor" , "authenticated" , "editor" , True ),
614
+ (True , "editor" , "authenticated" , "reader" , True ),
615
+ (True , "editor" , "public" , "editor" , True ),
616
+ (True , "editor" , "public" , "reader" , True ),
617
+ (True , "reader" , "restricted" , "editor" , False ),
618
+ (True , "reader" , "restricted" , "reader" , False ),
619
+ (True , "reader" , "authenticated" , "editor" , True ),
620
+ (True , "reader" , "authenticated" , "reader" , False ),
621
+ (True , "reader" , "public" , "editor" , True ),
622
+ (True , "reader" , "public" , "reader" , False ),
623
+ (False , None , "restricted" , "editor" , False ),
624
+ (False , None , "restricted" , "reader" , False ),
625
+ (False , None , "authenticated" , "editor" , False ),
626
+ (False , None , "authenticated" , "reader" , False ),
627
+ (False , None , "public" , "editor" , False ),
628
+ (False , None , "public" , "reader" , False ),
629
+ ],
630
+ )
631
+ def test_models_documents_get_abilities_children_destroy (
632
+ is_authenticated , role , link_reach , link_role , can_destroy
633
+ ):
634
+ """For a sub document, if a user can create children, he can destroy it."""
635
+ user = factories .UserFactory () if is_authenticated else AnonymousUser ()
636
+ parent = factories .DocumentFactory (link_reach = link_reach , link_role = link_role )
637
+ document = factories .DocumentFactory (
638
+ link_reach = link_reach , link_role = link_role , parent = parent
639
+ )
640
+ if is_authenticated :
641
+ factories .UserDocumentAccessFactory (document = parent , user = user , role = role )
642
+
643
+ abilities = document .get_abilities (user )
644
+ assert abilities ["children_create" ] is can_destroy
645
+ assert abilities ["destroy" ] is can_destroy
646
+
647
+
596
648
@override_settings (AI_ALLOW_REACH_FROM = "public" )
597
649
@pytest .mark .parametrize (
598
650
"is_authenticated,reach" ,
0 commit comments