U
    |®Ž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)ZassertEqualŚset)ŚselfŚactualŚexpected© r   śn/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/test_permission_policies.pyŚassertResultSetEqual   s    z.PermissionPolicyTestUtils.assertResultSetEqualr   c                 C   s   |sddddg}|D ]r}|d }t ||dd }|D ]N\}}|rd| j| j ||”d ||”d	 q6| j| j ||”d
||f d	 q6q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dddg}|D ]z}|d }t ||dd }|D ]V\}}|rf| j| j |||”d|||f d q4| j| j |||”d	|||f d q4q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   s6    
  ’’ü  ’’ü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)r6   r7   ) r   ŚobjectsZget_for_modelr   r   Śgetr   ŚcreateZpermissionsr   Zcreate_superuserr4   Ś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.   r/   rK   r   r   r   r   r0   P   s   r0   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    r4   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>Ó   s     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 rX   )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   ļ   s     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   rZ   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 rf   )rH   rI   rJ   rO   r   r    Ś%instances_user_has_any_permission_forrk   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 ri   )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 rf   )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.   r/   rK   rW   r[   r`   rd   re   rh   rm   ro   rs   rv   Ś__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*   r4   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rP   r   r   r   rW   )  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 rX   )r   r    rY   r4   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   r4   r>   r@   rB   rC   rE   rF   r^   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 rX   )
r    ra   r   r4   r>   r@   rB   rC   rE   rF   rb   r   r   r   rd   `  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 rz   ©r,   rH   r4   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rP   r   r   r   re   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 rf   )	r   r    rg   r4   rH   r"   r<   rF   rG   rP   r   r   r   rh     s8      ’’  ’’  ’’  ’’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 ri   )
rH   rI   rJ   r   r    rj   r4   r<   rF   rG   ©r   rl   Z	no_imagesr   r   r   rm   „  s0    ž ’üž ’ü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 rf   )
rH   rI   rJ   r   r    rn   r4   r<   rF   rG   r}   r   r   r   ro   Å  s<     ’ü ’ü ’ü ’üzQTestAuthenticationOnlyPermissionPolicy.test_instances_user_has_any_permission_forc              
   C   s<   | j  d| j”}|  || j| j| j| j| j| j	| j
g” d S ri   )r    rp   rI   r   r4   r>   r@   rB   rC   rE   rF   rq   r   r   r   rs   é  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 rf   )r    rt   rI   r   r4   r>   r@   rB   rC   rE   rF   ru   r   r   r   rv   ü  s      ’’łžzRTestAuthenticationOnlyPermissionPolicy.test_users_with_any_permission_for_instancerw   r   r   rQ   r   ry   $  s    $ry   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 rz   r{   rP   r   r   r   rW     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    rY   r4   r"   r<   r>   r@   rB   rA   rF   rG   rP   r   r   r   r[   3  sH    ’ ’’’ ’’’’ ’’’’z6TestModelPermissionPolicy.test_user_has_any_permissionc                 C   sL   | j  d”}|  || j| j| jg” | j  d”}|  || j| j| jg” d S rX   ©r    r]   r   r4   r>   r@   rB   rC   )r   r_   rr   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    ra   r   r4   r>   r@   rB   rC   rE   )r   rc   Z&users_with_change_or_delete_permissionr   r   r   rd   |  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 rz   r|   rP   r   r   r   re     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 rf   )r   r    rg   r4   rH   r"   r<   rB   rC   r>   rD   rF   rG   rP   r   r   r   rh   Æ  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 rf   )rH   rI   rJ   r   r    rj   r4   r<   rB   rC   rF   rD   rG   r}   r   r   r   rm   č  s\    ž ’üž ’üž ’üž ’ü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 rf   )rH   rI   rJ   r   r    rn   r4   r<   rB   rC   rF   rD   r>   rG   r}   r   r   r   ro   $  st     ’ü ’ü ’ü ’ü ’ü ’ü ’ü ’ü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 rf   )r    rp   rI   r   r4   rB   rC   rE   ©r   rr   Śusers_with_delete_permissionr   r   r   rs   h  s*     ’żž	 ’žžzATestModelPermissionPolicy.test_users_with_permission_for_instancec                 C   s4   | j  ddg| j”}|  || j| j| j| jg” d S rf   )r    rt   rI   r   r4   rB   rC   rE   ru   r   r   r   rv     s     ’’üžzETestModelPermissionPolicy.test_users_with_any_permission_for_instancerw   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 )Nr8   )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 rz   r{   rP   r   r   r   rW     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    rY   r4   r"   r<   rB   rC   rE   rD   rF   rG   rP   r   r   r   r[   ¹  sH    ’ ’’’ ’’ ’’ ’’’’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_   rr   r   Z 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    ra   r   r4   r>   r@   rB   rC   )r   rc   Z'users_with_add_or_frobnicate_permissionr   r   r   rd     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 rz   )r,   rH   r4   r<   r>   r@   rA   rB   rC   rD   rE   rF   rG   rI   rJ   rP   r   r   r   re   <  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    rg   r4   rH   r"   r<   rB   rC   rE   rD   rF   rG   rP   r   r   r   rh     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 rf   )rH   rI   rJ   r   r    rj   r4   r<   r>   rB   rC   rD   rF   rG   r}   r   r   r   rm   Į  sd    ž ’üžžž ’ü ’üž ’ü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    rn   r4   r<   r>   rC   rF   rD   rE   rG   r}   r   r   r   ro     st     ’ü ’ü ’ü ’ü ’ü ’ü ’ü ’ü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    rp   rH   r   r4   r>   rB   rC   rI   rJ   r   r   r   r   rs   F  sn     ’üž ’üž ’’ž	 ’żž ’żžzETestOwnershipPermissionPolicy.test_users_with_permission_for_instancec                 C   s4   | j  ddg| j”}|  || j| j| j| jg” d S )Nr   r   )r    rt   rH   r   r4   r>   rB   rC   )r   Z$users_with_change_or_frob_permissionr   r   r   rv     s     ’’üžzITestOwnershipPermissionPolicy.test_users_with_any_permission_for_instancerw   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   r0   rL   ry   r~   r   r   r   r   r   Ś<module>   s    @ki o   