o
    ĢÉhŃ  ć                   @   sĪ   d dl mZmZmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZmZ d dlmZ G dd	 d	ZG d
d deeeZG dd deZG dd deZG dd deZG dd deZdS )é    )ŚAnonymousUserŚGroupŚ
Permission)ŚContentType)ŚTestCase)ŚImage)Śget_test_image_file)Ś"AuthenticationOnlyPermissionPolicyŚBlanketPermissionPolicyŚModelPermissionPolicyŚOwnershipPermissionPolicy)ŚWagtailTestUtilsc                   @   s(   e Zd Zdd Zd	ddZd	ddZdS )
ŚPermissionPolicyTestUtilsc                 C   s   |   t|t|” d S ©N)ŚassertEqualŚset)ŚselfŚactualŚexpected© r   śf/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/tests/test_permission_policies.pyŚassertResultSetEqual   s   z.PermissionPolicyTestUtils.assertResultSetEqualr   c                 C   s   |sg d¢}|D ]9}|d }t ||dd }|D ]'\}}|r0| j| j ||”d ||”d q| j| j ||”d||f d qqdS )a*  
        Given a list of (user, can_add, can_change, can_delete, can_frobnicate) tuples
        (where 'frobnicate' is an unrecognised action not defined on the model),
        confirm that all tuples correctly represent permissions for that user as
        returned by user_has_permission
        )ŚaddŚchangeŚdeleteŚ
frobnicater   é   Nz'User {} should be able to {}, but can't©Śmsgz)User %s should not be able to %s, but can)ŚzipŚ
assertTrueŚpolicyŚuser_has_permissionŚformatŚassertFalse)r   Ś
test_casesŚactionsŚ	test_caseŚuserŚexpected_resultsŚactionŚexpected_resultr   r   r   ŚassertUserPermissionMatrix   s*   ’ž’ž÷üz4PermissionPolicyTestUtils.assertUserPermissionMatrixc           	      C   s   |sg d¢}|D ]=}|d }t ||dd }|D ]+\}}|r2| j| j |||”d|||f d q| j| j |||”d|||f d qqdS )aE  
        Given a list of (user, can_change, can_delete, can_frobnicate) tuples
        (where 'frobnicate' is an unrecognised action not defined on the model),
        confirm that all tuples correctly represent permissions for that user on
        the given instance, as returned by user_has_permission_for_instance
        )r   r   r   r   r   Nz3User %s should be able to %s instance %s, but can'tr   z5User %s should not be able to %s instance %s, but can)r   r    r!   Ś user_has_permission_for_instancer$   )	r   Śinstancer%   r&   r'   r(   r)   r*   r+   r   r   r   Ś"assertUserInstancePermissionMatrix0   s2   ’’ü’’üöüz<PermissionPolicyTestUtils.assertUserInstancePermissionMatrixN)r   )Ś__name__Ś
__module__Ś__qualname__r   r,   r/   r   r   r   r   r      s    
r   c                   @   s   e Zd Zdd ZdS )ŚPermissionPolicyTestCasec                 C   sų  t j t”}tjj|dd}tjj|dd}tjj|dd}tjjdd}|j 	|” tjjdd}|j 	|” |  
dd	d
”| _|  
ddd
”| _d| j_| j ”  |  ddd
”| _| jj 	|” |  ddd
”| _| jj 	|” |  ddd
”| _| jj 	|” d| j_| j ”  |  ddd
”| _| jj 	|” |  ddd
”| _| jj 	|” |  ddd
”| _| jj 	|” d| j_| j ”  |  ddd
”| _| jj 	|” |  ddd
”| _t | _tjjdt | jd| _tjjd t | jd| _tjjd!t d"| _d S )#NŚ	add_image)Ścontent_typeŚcodenameŚchange_imageŚdelete_imagezImage adders)ŚnamezImage changersŚ	superuserzsuperuser@example.comŚpasswordŚinactivesuperuserzinactivesuperuser@example.comFŚ
imageadderzimageadder@example.comŚoneoffimageadderzoneoffimageadder@example.comŚinactiveimageadderzinactiveimageadder@example.comŚimagechangerzimagechanger@example.comŚoneoffimagechangerzoneoffimagechanger@example.comŚinactiveimagechangerz inactiveimagechanger@example.comŚoneoffimagedeleterzoneoffimagedeleter@example.comŚuselessuserzuselessuser@example.comzimageadder's image)ŚtitleŚfileŚuploaded_by_userzuselessuser's imagezanonymous image)rE   rF   ) r   ŚobjectsŚget_for_modelr   r   Śgetr   ŚcreateŚpermissionsr   Ścreate_superuserr:   Śinactive_superuserŚ	is_activeŚsaveŚcreate_userŚimage_adderŚgroupsŚoneoff_image_adderŚuser_permissionsŚinactive_image_adderŚimage_changerŚoneoff_image_changerŚinactive_image_changerŚoneoff_image_deleterŚuseless_userr   Śanonymous_userr   Śadder_imageŚuseless_imageŚanonymous_image)r   Śimage_content_typeŚadd_image_permissionŚchange_image_permissionŚdelete_image_permissionŚimage_adders_groupŚimage_changers_groupr   r   r   ŚsetUpQ   s   ’’’’’
’’’
’’’
’’żżžzPermissionPolicyTestCase.setUpN)r0   r1   r2   rf   r   r   r   r   r3   P   s    r3   c                       ól   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Z  ZS )ŚTestBlanketPermissionPolicyc                    sV   t   ”  tt| _| j| j| j| j| j	| j
| jg| _| j| j| j| j| jg | _d S r   )Śsuperrf   r
   r   r!   r:   rR   rT   rW   rX   rZ   r[   Śactive_usersrN   rV   rY   r\   Ś	all_users©r   ©Ś	__class__r   r   rf   ¼   s    

ł	üz!TestBlanketPermissionPolicy.setUpc                 C   s   |   dd | jD ” d S )Nc                 S   s   g | ]	}|d d d d fqS ©Tr   ©Ś.0r(   r   r   r   Ś
<listcomp>Ó   s    zHTestBlanketPermissionPolicy.test_user_has_permission.<locals>.<listcomp>)r,   rk   rl   r   r   r   Śtest_user_has_permissionŠ   s   ’z4TestBlanketPermissionPolicy.test_user_has_permissionc                 C   s(   | j D ]}|  | j |ddg”” qd S ©Nr   r   )rk   r    r!   Śuser_has_any_permission©r   r(   r   r   r   Śtest_user_has_any_permissionÖ   s
   
’’z8TestBlanketPermissionPolicy.test_user_has_any_permissionc                 C   s   | j  d”}|  || j” d S ©Nr   )r!   Śusers_with_permissionr   rj   ©r   Śusers_with_add_permissionr   r   r   Śtest_users_with_permissionÜ   s   z6TestBlanketPermissionPolicy.test_users_with_permissionc                 C   s"   | j  ddg”}|  || j” d S rt   )r!   Śusers_with_any_permissionr   rj   ©r   Ś#users_with_add_or_change_permissionr   r   r   Śtest_users_with_any_permissionā   s   ’’z:TestBlanketPermissionPolicy.test_users_with_any_permissionc                 C   s   |   | jdd | jD ” d S )Nc                 S   s   g | ]}|d d d fqS ro   r   rp   r   r   r   rr   ļ   s    zUTestBlanketPermissionPolicy.test_user_has_permission_for_instance.<locals>.<listcomp>)r/   r]   rk   rl   r   r   r   Ś%test_user_has_permission_for_instanceģ   s   ’zATestBlanketPermissionPolicy.test_user_has_permission_for_instancec                 C   s,   | j D ]}|  | j |ddg| j”” qd S ©Nr   r   )rk   r    r!   Ś$user_has_any_permission_for_instancer]   rv   r   r   r   Ś)test_user_has_any_permission_for_instanceņ   s   
’’’zETestBlanketPermissionPolicy.test_user_has_any_permission_for_instancec                 C   s6   | j | j| jg}| jD ]}|  | j |d”|” qd S ©Nr   )r]   r^   r_   rk   r   r!   Ś!instances_user_has_permission_for©r   Ś
all_imagesr(   r   r   r   Ś&test_instances_user_has_permission_forś   s   
ž’zBTestBlanketPermissionPolicy.test_instances_user_has_permission_forc                 C   s:   | j | j| jg}| jD ]}|  | j |ddg”|” qd S r   )r]   r^   r_   rk   r   r!   Ś%instances_user_has_any_permission_forr   r   r   r   Ś*test_instances_user_has_any_permission_for  s   
’ü’zFTestBlanketPermissionPolicy.test_instances_user_has_any_permission_forc                 C   s"   | j  d| j”}|  || j” d S r   )r!   Ś"users_with_permission_for_instancer^   r   rj   ©r   Śusers_with_change_permissionr   r   r   Ś'test_users_with_permission_for_instance  s   ’zCTestBlanketPermissionPolicy.test_users_with_permission_for_instancec                 C   s&   | j  ddg| j”}|  || j” d S r   )r!   Ś&users_with_any_permission_for_instancer^   r   rj   ©r   Ś#users_with_change_or_del_permissionr   r   r   Ś+test_users_with_any_permission_for_instance  s   
’’’zGTestBlanketPermissionPolicy.test_users_with_any_permission_for_instance©r0   r1   r2   rf   rs   rw   r|   r   r   r   r   r   r   r   Ś__classcell__r   r   rm   r   rh   »   s    

rh   c                       rg   )Ś&TestAuthenticationOnlyPermissionPolicyc                    ó   t   ”  tt| _d S r   )ri   rf   r	   r   r!   rl   rm   r   r   rf   %  ó   
z,TestAuthenticationOnlyPermissionPolicy.setUpc                 C   sØ   |   | jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| j	ddddf| j
ddddf| jddddfg” d S ©NTF©r,   r:   rN   rR   rT   rV   rW   rX   rY   rZ   r[   r\   rl   r   r   r   rs   )  s   õ’z?TestAuthenticationOnlyPermissionPolicy.test_user_has_permissionc                 C   sl   |   | j | jddg”” |  | j | jddg”” |   | j | jddg”” |  | j | jddg”” d S rt   )r    r!   ru   r:   r$   rN   r[   r\   rl   r   r   r   rw   <  s   ’
’’’’zCTestAuthenticationOnlyPermissionPolicy.test_user_has_any_permissionc              
   C   s8   | j  d”}|  || j| j| j| j| j| j| j	g” d S rx   )
r!   ry   r   r:   rR   rT   rW   rX   rZ   r[   rz   r   r   r   r|   O  s   łžzATestAuthenticationOnlyPermissionPolicy.test_users_with_permissionc              
   C   s<   | j  ddg”}|  || j| j| j| j| j| j| j	g” d S rt   )
r!   r}   r   r:   rR   rT   rW   rX   rZ   r[   r~   r   r   r   r   `  ó   ’łžzETestAuthenticationOnlyPermissionPolicy.test_users_with_any_permissionc                 C   s   |   | j| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| j	dddf| j
dddf| jdddf| jdddfg” d S r   ©r/   r]   r:   rN   rR   rT   rV   rW   rX   rY   rZ   r[   r\   rl   r   r   r   r   s  ó   õžzLTestAuthenticationOnlyPermissionPolicy.test_user_has_permission_for_instancec                 C   s|   |   | j | jddg| j”” |  | j | jddg| j”” |   | j | jddg| j”” |  | j | jddg| j”” d S r   )	r    r!   r   r:   r]   r$   rN   r[   r\   rl   r   r   r   r     s(   ’’’’’’’’zPTestAuthenticationOnlyPermissionPolicy.test_user_has_any_permission_for_instancec                 C   sx   | j | j| jg}g }|  | j | jd”|” |  | j | jd”|” |  | j | jd”|” |  | j | j	d”|” d S r   )
r]   r^   r_   r   r!   r   r:   rN   r[   r\   ©r   r   Ś	no_imagesr   r   r   r   „  s,   ž’üž’üzMTestAuthenticationOnlyPermissionPolicy.test_instances_user_has_permission_forc                 C   s   | j | j| jg}g }|  | j | jddg”|” |  | j | jddg”|” |  | j | jddg”|” |  | j | j	ddg”|” d S r   )
r]   r^   r_   r   r!   r   r:   rN   r[   r\   r   r   r   r   r   Å  s4   
’ü
’ü
’ü
’üzQTestAuthenticationOnlyPermissionPolicy.test_instances_user_has_any_permission_forc              
   C   s<   | j  d| j”}|  || j| j| j| j| j| j	| j
g” d S r   )r!   r   r^   r   r:   rR   rT   rW   rX   rZ   r[   r   r   r   r   r   é  r   zNTestAuthenticationOnlyPermissionPolicy.test_users_with_permission_for_instancec              
   C   s@   | j  ddg| j”}|  || j| j| j| j| j| j	| j
g” d S r   )r!   r   r^   r   r:   rR   rT   rW   rX   rZ   r[   r   r   r   r   r   ü  s   
’’łžzRTestAuthenticationOnlyPermissionPolicy.test_users_with_any_permission_for_instancer   r   r   rm   r   r   $  s     $r   c                       rg   )ŚTestModelPermissionPolicyc                    r   r   )ri   rf   r   r   r!   rl   rm   r   r   rf     r   zTestModelPermissionPolicy.setUpc                 C   sØ   |   | jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| j	ddddf| j
ddddf| jddddfg” d S r   r   rl   r   r   r   rs     s   ź’z2TestModelPermissionPolicy.test_user_has_permissionc                 C   sī   |   | j | jddg”” |  | j | jddg”” |   | j | jddg”” |   | j | jddg”” |   | j | jddg”” |  | j | jddg”” |  | j | j	ddg”” |  | j | j
ddg”” |  | j | jddg”” d S ©Nr   r   r   )r    r!   ru   r:   r$   rN   rR   rT   rW   rV   r[   r\   rl   r   r   r   rw   3  sB   ’
’’’
’’’’
’’’’z6TestModelPermissionPolicy.test_user_has_any_permissionc                 C   sL   | j  d”}|  || j| j| jg” | j  d”}|  || j| j| jg” d S rt   ©r!   ry   r   r:   rR   rT   rW   rX   )r   r{   r   r   r   r   r|   e  s    żž	żžz4TestModelPermissionPolicy.test_users_with_permissionc                 C   s`   | j  ddg”}|  || j| j| j| j| jg” | j  ddg”}|  || j| j| j| jg” d S r”   )	r!   r}   r   r:   rR   rT   rW   rX   rZ   )r   r   Ś&users_with_change_or_delete_permissionr   r   r   r   |  s.   ’ūž’üžz8TestModelPermissionPolicy.test_users_with_any_permissionc                 C   s   |   | j| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| j	dddf| j
dddf| jdddf| jdddfg” d S r   r   rl   r   r   r   r     r   z?TestModelPermissionPolicy.test_user_has_permission_for_instancec                 C   sō   |   | j | jddg| j”” |  | j | jddg| j”” |   | j | jddg| j”” |   | j | jddg| j”” |  | j | j	ddg| j”” |  | j | j
ddg| j”” |  | j | jddg| j”” |  | j | jddg| j”” d S r   )r    r!   r   r:   r]   r$   rN   rW   rX   rR   rY   r[   r\   rl   r   r   r   r   Æ  óP   ’’’’’’’’’’’’’’’’zCTestModelPermissionPolicy.test_user_has_any_permission_for_instancec                 C   sŲ   | j | j| jg}g }|  | j | jd”|” |  | j | jd”|” |  | j | jd”|” |  | j | j	d”|” |  | j | j
d”|” |  | j | jd”|” |  | j | jd”|” |  | j | jd”|” d S r   )r]   r^   r_   r   r!   r   r:   rN   rW   rX   r[   rY   r\   r   r   r   r   r   č  sT   ž’üž’üž’üž’üz@TestModelPermissionPolicy.test_instances_user_has_permission_forc                 C   sų   | j | j| jg}g }|  | j | jddg”|” |  | j | jddg”|” |  | j | jddg”|” |  | j | j	ddg”|” |  | j | j
ddg”|” |  | j | jddg”|” |  | j | jddg”|” |  | j | jddg”|” d S r   )r]   r^   r_   r   r!   r   r:   rN   rW   rX   r[   rY   rR   r\   r   r   r   r   r   $  sd   
’ü
’ü
’ü
’ü
’ü
’ü
’ü
’üzDTestModelPermissionPolicy.test_instances_user_has_any_permission_forc                 C   sP   | j  d| j”}|  || j| j| jg” | j  d| j”}|  || j| jg” d S r   )r!   r   r^   r   r:   rW   rX   rZ   ©r   r   Śusers_with_delete_permissionr   r   r   r   h  s&   ’żž	’žžzATestModelPermissionPolicy.test_users_with_permission_for_instancec                 C   ó4   | j  ddg| j”}|  || j| j| j| jg” d S r   )r!   r   r^   r   r:   rW   rX   rZ   r   r   r   r   r     ó   
’’üžzETestModelPermissionPolicy.test_users_with_any_permission_for_instancer   r   r   rm   r   r      s    29<Dr    c                       rg   )ŚTestOwnershipPermissionPolicyc                    s   t   ”  ttdd| _d S )NrG   )Śowner_field_name)ri   rf   r   r   r!   rl   rm   r   r   rf     s   
’z#TestOwnershipPermissionPolicy.setUpc                 C   sØ   |   | jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| jddddf| j	ddddf| j
ddddf| jddddfg” d S r   r   rl   r   r   r   rs     s   č’z6TestOwnershipPermissionPolicy.test_user_has_permissionc                 C   sŌ   |   | j | jddg”” |  | j | jddg”” |   | j | jddg”” |   | j | jddg”” |  | j | jddg”” |  | j | j	ddg”” |  | j | j
ddg”” |  | j | jddg”” d S r”   )r    r!   ru   r:   r$   rN   rW   rX   rZ   rY   r[   r\   rl   r   r   r   rw   ¹  s@   ’
’’’
’’
’’
’’’’z:TestOwnershipPermissionPolicy.test_user_has_any_permissionc                 C   s   | j  d”}|  || j| j| jg” | j  d”}|  || j| j| j| j| jg” | j  d”}|  || j| j| j| j| jg” | j  d”}|  || jg” d S )Nr   r   r   r   r¢   )r   r{   r   r¦   Ś users_with_frobnicate_permissionr   r   r   r|   ź  sH   żž
ūžūž’’žz8TestOwnershipPermissionPolicy.test_users_with_permissionc                 C   s\   | j  ddg”}|  || j| j| j| j| jg” | j  ddg”}|  || j| j| jg” d S )Nr   r   r   )r!   r}   r   r:   rR   rT   rW   rX   )r   r   Ś'users_with_add_or_frobnicate_permissionr   r   r   r     s,   ’ūž’żžz<TestOwnershipPermissionPolicy.test_users_with_any_permissionc                 C   sŗ  |   | j| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| j	dddf| j
dddf| jdddf| jdddfg” |   | j| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| j	dddf| j
dddf| jdddf| jdddfg” |   | j| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| jdddf| j	dddf| j
dddf| jdddf| jdddfg” d S r   )r/   r]   r:   rN   rR   rT   rV   rW   rX   rY   rZ   r[   r\   r^   r_   rl   r   r   r   r   <  sZ   éžķžõžzCTestOwnershipPermissionPolicy.test_user_has_permission_for_instancec                 C   sō   |   | j | jddg| j”” |  | j | jddg| j”” |   | j | jddg| j”” |   | j | jddg| j”” |  | j | j	ddg| j”” |  | j | j
ddg| j”” |  | j | jddg| j”” |  | j | jddg| j”” d S ©Nr   r   r   )r    r!   r   r:   r]   r$   rN   rW   rX   rZ   rY   r[   r\   rl   r   r   r   r     r¤   zGTestOwnershipPermissionPolicy.test_user_has_any_permission_for_instancec                 C   sų   | j | j| jg}g }|  | j | jd”|” |  | j | jd”|” |  | j | jd”| j g” |  | j | jd”| j g” |  | j | j	d”|” |  | j | j
d”|” |  | j | jd”|” |  | j | jd”|” |  | j | jd”|” d S r   )r]   r^   r_   r   r!   r   r:   rN   rR   rW   rX   rY   r[   r\   r   r   r   r   r   Į  s\   ž’üžžž’ü’üž’üzDTestOwnershipPermissionPolicy.test_instances_user_has_permission_forc                 C   sü   | j | j| jg}g }|  | j | jddg”|” |  | j | jddg”|” |  | j | jddg”| j g” |  | j | j	ddg”|” |  | j | j
ddg”|” |  | j | jddg”|” |  | j | jddg”|” |  | j | jddg”|” d S r­   )r]   r^   r_   r   r!   r   r:   rN   rR   rX   r[   rY   rZ   r\   r   r   r   r   r     sd   
’ü
’ü
’ü
’ü
’ü
’ü
’ü
’üzHTestOwnershipPermissionPolicy.test_instances_user_has_any_permission_forc                 C   sĢ   | j  d| j”}|  || j| j| j| jg” | j  d| j”}|  || j| j| j| jg” | j  d| j”}|  || jg” | j  d| j”}|  || j| j| jg” | j  d| j	”}|  || j| j| jg” d S r­   )
r!   r   r]   r   r:   rR   rW   rX   r^   r_   r„   r   r   r   r   F  sd   ’üž’üž’’ž	’żž’żžzETestOwnershipPermissionPolicy.test_users_with_permission_for_instancec                 C   r§   )Nr   r   )r!   r   r]   r   r:   rR   rW   rX   )r   Ś$users_with_change_or_frob_permissionr   r   r   r     rØ   zITestOwnershipPermissionPolicy.test_users_with_any_permission_for_instancer   r   r   rm   r   r©     s    15L9ADJr©   N)Śdjango.contrib.auth.modelsr   r   r   Ś"django.contrib.contenttypes.modelsr   Śdjango.testr   Śwagtail.images.modelsr   Śwagtail.images.tests.utilsr   Śwagtail.permission_policiesr	   r
   r   r   Śwagtail.test.utilsr   r   r3   rh   r   r    r©   r   r   r   r   Ś<module>   s"    @ki o   