a
    DųgŃ  ć                   @   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   śe/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/tests/test_permission_policies.pyŚassertResultSetEqual   s    z.PermissionPolicyTestUtils.assertResultSetEqualr   c                 C   s   |sg d¢}|D ]r}|d }t ||dd }|D ]N\}}|r`| j| j ||”d ||”d q2| j| j ||”d||f d q2q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ŚpolicyZ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 ]z}|d }t ||dd }|D ]V\}}|rd| j| j |||”d|||f d q2| j| j |||”d|||f d q2q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!   Z user_has_permission_for_instancer#   )	r   Śinstancer$   r%   r&   r'   r(   r)   r*   r   r   r   Ś"assertUserInstancePermissionMatrix0   s.    ’’ü’’üz<PermissionPolicyTestUtils.assertUserInstancePermissionMatrixN)r   )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 )#NZ	add_image)Ścontent_typeŚcodenameZchange_imageZdelete_imagezImage adders)ŚnamezImage changersŚ	superuserzsuperuser@example.comŚpasswordZinactivesuperuserzinactivesuperuser@example.comFZ
imageadderzimageadder@example.comZoneoffimageadderzoneoffimageadder@example.comZinactiveimageadderzinactiveimageadder@example.comZimagechangerzimagechanger@example.comZoneoffimagechangerzoneoffimagechanger@example.comZinactiveimagechangerz inactiveimagechanger@example.comZoneoffimagedeleterzoneoffimagedeleter@example.comZuselessuserzuselessuser@example.comzimageadder's image)ŚtitleŚfileŚuploaded_by_userzuselessuser's imagezanonymous image)r7   r8   ) r   ZobjectsZget_for_modelr   r   Śgetr   ŚcreateZpermissionsr   Zcreate_superuserr5   Śinactive_superuserZ	is_activeŚsaveZcreate_userŚimage_adderŚgroupsŚoneoff_image_adderZ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   Zimage_content_typeZadd_image_permissionZchange_image_permissionZdelete_image_permissionZimage_adders_groupZimage_changers_groupr   r   r   ŚsetUpQ   s    ’’’’’
’’’
’’’
’’żżžzPermissionPolicyTestCase.setUpN)r.   r/   r0   rK   r   r   r   r   r1   P   s   r1   c                       sl   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   )ŚsuperrK   r
   r   r!   r5   r>   r@   rB   rC   rE   rF   Śactive_usersr<   rA   rD   rG   Ś	all_users©r   ©Ś	__class__r   r   rK   ¼   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>Ó   ó    zHTestBlanketPermissionPolicy.test_user_has_permission.<locals>.<listcomp>)r+   rO   rP   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   )rO   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   rN   ©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 rY   )r!   Śusers_with_any_permissionr   rN   ©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 rS   r   rT   r   r   r   rV   ļ   rW   zUTestBlanketPermissionPolicy.test_user_has_permission_for_instance.<locals>.<listcomp>)r-   rH   rO   rP   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   )rO   r    r!   Ś$user_has_any_permission_for_instancerH   r[   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   )rH   rI   rJ   rO   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 rg   )rH   rI   rJ   rO   r   r!   Ś%instances_user_has_any_permission_forrl   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 rj   )r!   Ś"users_with_permission_for_instancerI   r   rN   ©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 rg   )r!   Ś&users_with_any_permission_for_instancerI   r   rN   ©r   Z#users_with_change_or_del_permissionr   r   r   Ś+test_users_with_any_permission_for_instance  s    
’’’zGTestBlanketPermissionPolicy.test_users_with_any_permission_for_instance©r.   r/   r0   rK   rX   r\   ra   re   rf   ri   rn   rp   rt   rw   Ś__classcell__r   r   rQ   r   rL   »   s   

rL   c                       sl   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 )Ś&TestAuthenticationOnlyPermissionPolicyc                    s   t   ”  tt| _d S r   )rM   rK   r	   r   r!   rP   rQ   r   r   rK   %  s    
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+   r5   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rP   r   r   r   rX   )  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 rY   )r    r!   rZ   r5   r#   r<   rF   rG   rP   r   r   r   r\   <  s    ’
’’’’zCTestAuthenticationOnlyPermissionPolicy.test_user_has_any_permissionc              
   C   s8   | j  d”}|  || j| j| j| j| j| j| j	g” d S r]   )
r!   r^   r   r5   r>   r@   rB   rC   rE   rF   r_   r   r   r   ra   O  s    łžzATestAuthenticationOnlyPermissionPolicy.test_users_with_permissionc              
   C   s<   | j  ddg”}|  || j| j| j| j| j| j| j	g” d S rY   )
r!   rb   r   r5   r>   r@   rB   rC   rE   rF   rc   r   r   r   re   `  s    ’łž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-   rH   r5   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rP   r   r   r   rf   s  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 rg   )	r    r!   rh   r5   rH   r#   r<   rF   rG   rP   r   r   r   ri     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 rj   )
rH   rI   rJ   r   r!   rk   r5   r<   rF   rG   ©r   rm   Z	no_imagesr   r   r   rn   „  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 rg   )
rH   rI   rJ   r   r!   ro   r5   r<   rF   rG   r~   r   r   r   rp   Å  s4    
’ü
’ü
’ü
’üzQTestAuthenticationOnlyPermissionPolicy.test_instances_user_has_any_permission_forc              
   C   s<   | j  d| j”}|  || j| j| j| j| j| j	| j
g” d S rj   )r!   rq   rI   r   r5   r>   r@   rB   rC   rE   rF   rr   r   r   r   rt   é  s    ’łžzNTestAuthenticationOnlyPermissionPolicy.test_users_with_permission_for_instancec              
   C   s@   | j  ddg| j”}|  || j| j| j| j| j| j	| j
g” d S rg   )r!   ru   rI   r   r5   r>   r@   rB   rC   rE   rF   rv   r   r   r   rw   ü  s    
’’łžzRTestAuthenticationOnlyPermissionPolicy.test_users_with_any_permission_for_instancerx   r   r   rQ   r   rz   $  s    $rz   c                       sl   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 )ŚTestModelPermissionPolicyc                    s   t   ”  tt| _d S r   )rM   rK   r   r   r!   rP   rQ   r   r   rK     s    
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|   rP   r   r   r   rX     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!   rZ   r5   r#   r<   r>   r@   rB   rA   rF   rG   rP   r   r   r   r\   3  sB    ’
’’’
’’’’
’’’’z6TestModelPermissionPolicy.test_user_has_any_permissionc                 C   sL   | j  d”}|  || j| j| jg” | j  d”}|  || j| j| jg” d S rY   ©r!   r^   r   r5   r>   r@   rB   rC   )r   r`   rs   r   r   r   ra   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!   rb   r   r5   r>   r@   rB   rC   rE   )r   rd   Z&users_with_change_or_delete_permissionr   r   r   re   |  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}   rP   r   r   r   rf     s    õž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 rg   )r    r!   rh   r5   rH   r#   r<   rB   rC   r>   rD   rF   rG   rP   r   r   r   ri   Æ  sP    ’’’’’’’’’’’’’’’’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 rg   )rH   rI   rJ   r   r!   rk   r5   r<   rB   rC   rF   rD   rG   r~   r   r   r   rn   č  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 rg   )rH   rI   rJ   r   r!   ro   r5   r<   rB   rC   rF   rD   r>   rG   r~   r   r   r   rp   $  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 rg   )r!   rq   rI   r   r5   rB   rC   rE   ©r   rs   Śusers_with_delete_permissionr   r   r   rt   h  s&    ’żž	’žžzATestModelPermissionPolicy.test_users_with_permission_for_instancec                 C   s4   | j  ddg| j”}|  || j| j| j| jg” d S rg   )r!   ru   rI   r   r5   rB   rC   rE   rv   r   r   r   rw     s    
’’üžzETestModelPermissionPolicy.test_users_with_any_permission_for_instancerx   r   r   rQ   r   r     s   29<Dr   c                       sl   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 )ŚTestOwnershipPermissionPolicyc                    s   t   ”  ttdd| _d S )Nr9   )Zowner_field_name)rM   rK   r   r   r!   rP   rQ   r   r   rK     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|   rP   r   r   r   rX     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!   rZ   r5   r#   r<   rB   rC   rE   rD   rF   rG   rP   r   r   r   r\   ¹  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`   rs   r   Z users_with_frobnicate_permissionr   r   r   ra   ź  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!   rb   r   r5   r>   r@   rB   rC   )r   rd   Z'users_with_add_or_frobnicate_permissionr   r   r   re     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-   rH   r5   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rI   rJ   rP   r   r   r   rf   <  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!   rh   r5   rH   r#   r<   rB   rC   rE   rD   rF   rG   rP   r   r   r   ri     sP    ’’’’’’’’’’’’’’’’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 rg   )rH   rI   rJ   r   r!   rk   r5   r<   r>   rB   rC   rD   rF   rG   r~   r   r   r   rn   Į  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   )rH   rI   rJ   r   r!   ro   r5   r<   r>   rC   rF   rD   rE   rG   r~   r   r   r   rp     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!   rq   rH   r   r5   r>   rB   rC   rI   rJ   r   r   r   r   rt   F  sd    ’üž’üž’’ž	’żž’żžzETestOwnershipPermissionPolicy.test_users_with_permission_for_instancec                 C   s4   | j  ddg| j”}|  || j| j| j| jg” d S )Nr   r   )r!   ru   rH   r   r5   r>   rB   rC   )r   Z$users_with_change_or_frob_permissionr   r   r   rw     s    
’’üžzITestOwnershipPermissionPolicy.test_users_with_any_permission_for_instancerx   r   r   rQ   r   r     s   15L9ADJr   N)Zdjango.contrib.auth.modelsr   r   r   Z"django.contrib.contenttypes.modelsr   Zdjango.testr   Zwagtail.images.modelsr   Zwagtail.images.tests.utilsr   Zwagtail.permission_policiesr	   r
   r   r   Zwagtail.test.utilsr   r   r1   rL   rz   r   r   r   r   r   r   Ś<module>   s    @ki o   