U
    {®ÞhC  ã                   @   s
  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	 d dl
mZ d dlmZmZmZ d dlmZ d d	lmZ d d
lmZmZmZmZmZmZ d dlmZ G dd„ deeƒZG dd„ deeƒZG dd„ deƒZG dd„ deƒZ G dd„ deeƒZ!G dd„ deƒZ"dS )é    )Ú
Permission)ÚTestCase)Úreverse)Úcapfirst)Úhooks)ÚAdminURLFinder)Ú
FieldPanelÚ
ObjectListÚTabbedInterface)ÚSettingMenuItem)Úget_setting_edit_handler)ÚFileGenericSettingÚIconGenericSettingÚPanelGenericSettingsÚTabbedGenericSettingsÚTestGenericSettingÚTestPermissionedGenericSetting)ÚWagtailTestUtilsc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestGenericSettingMenuc                 C   s:   | j ddd}|j tjjdddd¡ | jddd |S )z?Log in with a user that only has permission to access the adminÚtestÚpassword)Úusernamer   Úaccess_adminÚwagtailadminZadmin)ÚcodenameÚ	app_labelÚmodel)Zcreate_userÚuser_permissionsÚaddr   ÚobjectsÚget_by_natural_keyÚlogin)ÚselfÚuser© r$   úy/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/contrib/settings/tests/generic/test_admin.pyÚlogin_only_admin   s      ÿÿz'TestGenericSettingMenu.login_only_adminc                 C   sD   |   ¡  | j tdƒ¡}|  |ttjjƒ¡ |  |tddd¡ d S ©NZwagtailadmin_homeúwagtailsettings:edit©ÚtestsÚtestgenericsetting©Úargs)	r!   ÚclientÚgetr   ÚassertContainsr   r   Ú_metaÚverbose_name©r"   Úresponser$   r$   r%   Útest_menu_item_in_admin"   s    
þz.TestGenericSettingMenu.test_menu_item_in_adminc                 C   s@   |   ¡  | j tdƒ¡}|  |tjj¡ |  |tddd¡ d S r'   )r&   r.   r/   r   ZassertNotContainsr   r1   r2   r3   r$   r$   r%   Útest_menu_item_no_permissions,   s    
þz4TestGenericSettingMenu.test_menu_item_no_permissionsc                 C   s.   t tddd}|  |jd¡ |  |jd¡ d S )NÚtagz
test-class)ÚiconÚ	classname)r   r   ÚassertEqualZ	icon_namer9   )r"   Z	menu_itemr$   r$   r%   Útest_menu_item_icon6   s      ÿz*TestGenericSettingMenu.test_menu_item_iconN)Ú__name__Ú
__module__Ú__qualname__r&   r5   r6   r;   r$   r$   r$   r%   r      s   

r   c                   @   s0   e Zd Zi efdd„Zi efdd„Zdd„ ZdS )ÚBaseTestGenericSettingViewc                 C   s   | j |d}| j ||¡S ©N©Úsetting)Úedit_urlr.   r/   )r"   ÚparamsrB   Úurlr$   r$   r%   r/   ?   s    zBaseTestGenericSettingView.getc                 C   s   | j |d}| j ||¡S r@   )rC   r.   Úpost)r"   Ú	post_datarB   rE   r$   r$   r%   rF   C   s    zBaseTestGenericSettingView.postc                 C   s(   |  ¡ j}|jj|jj|g}td|dS )Nr(   r,   )Z_get_or_createÚpkr1   r   Z
model_namer   )r"   rB   rH   r-   r$   r$   r%   rC   G   s    
z#BaseTestGenericSettingView.edit_urlN)r<   r=   r>   r   r/   rF   rC   r$   r$   r$   r%   r?   >   s   r?   c                   @   sL   e Z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S )ÚTestGenericSettingCreateViewc                 C   s   |   ¡ | _d S ©N)r!   r#   ©r"   r$   r$   r%   ÚsetUpN   s    z"TestGenericSettingCreateView.setUpc                 C   s   |   ¡ }|  |jd¡ d S ©NéÈ   ©r/   r:   Ústatus_coder3   r$   r$   r%   Útest_get_editQ   s    z*TestGenericSettingCreateView.test_get_editc                 C   s0   | j ddid}|  |d¡ | j|ddd d S ©NÚfooÚbar©rG   z-The setting could not be saved due to errors.zThis field is requiredé   )Úcount©rF   r0   r3   r$   r$   r%   Útest_edit_invalidU   s    z.TestGenericSettingCreateView.test_edit_invalidc                 C   sb   | j dddœd}|  |jd¡ tj ¡ }|  |jd¡ t| jƒ}d|j	 }|  | 
|¡|¡ d S )NúEdited setting titlezedited.email@example.com©ÚtitleÚemailrU   é.  z,/admin/settings/tests/testgenericsetting/%d/)rF   r:   rP   r   r   Úfirstr\   r   r#   rH   Zget_edit_url)r"   r4   rB   Z
url_finderÚexpected_urlr$   r$   r%   Ú	test_editZ   s    þÿ


z&TestGenericSettingCreateView.test_editc                 C   s   | j td}|  |d¡ d S )NrA   zenctype="multipart/form-data")r/   r   r0   r3   r$   r$   r%   Útest_file_upload_multipartj   s    z7TestGenericSettingCreateView.test_file_upload_multipartc                 C   s²   d| j _| j  ¡  | j j tjjddd¡ |  t	j 
¡ ¡ | jt	d}| j|ddd t	j ¡  ¡  | jd	d
dœt	d}| j|ddd t	 ¡ }|  |jd¡ |  |jd¡ d S )NFr   r   ©Zcontent_type__app_labelr   rA   r^   ú/admin/©rP   r`   útest@example.comr   ©Úsensitive_emailr\   ©rG   rB   Ú )r#   Úis_superuserÚsaver   r   r   r   r/   ÚassertFalser   ÚexistsÚassertRedirectsÚallÚdeleterF   Úloadr:   r\   rh   ©r"   r4   rB   r$   r$   r%   Ú3test_create_restricted_field_without_any_permissiono   s(    
 ÿÿþzPTestGenericSettingCreateView.test_create_restricted_field_without_any_permissionc                 C   sî   d| j _| j  ¡  | j j tjjdddtjjddd¡ |  t	j 
¡ ¡ | jt	d}|  |jd¡ |  d	t|jd
 jƒ¡ |  dt|jd
 jƒ¡ t	j ¡  ¡  | jdddœt	d}|  |jd¡ t	j ¡ }|  |jd¡ |  |jd¡ d S )NFr   r   rc   r*   Ú%change_testpermissionedgenericsettingrA   rN   r\   Úformrh   rf   r   rg   ri   r^   rj   )r#   rk   rl   r   r   r   r   r/   rm   r   rn   r:   rP   ÚassertInÚlistÚcontextÚfieldsÚassertNotInrp   rq   rF   r\   rh   ©r"   r4   Úsettingsr$   r$   r%   Ú5test_create_restricted_field_without_field_permissionŽ   s4    
 ÿþü
þ
zRTestGenericSettingCreateView.test_create_restricted_field_without_field_permissionc                 C   s
  d| j _| j  ¡  | j j tjjdddtjjdddtjjdd¡ |  t	j 
¡ ¡ | jt	d	}|  |jd
¡ |  dt|jd jƒ¡ |  dt|jd jƒ¡ t	j ¡  ¡  |  t	j 
¡ ¡ | jdddœt	d}|  |jd¡ t	j ¡ }|  |jd¡ |  |jd¡ d S )NFr   r   rc   r*   ru   Ú(can_edit_sensitive_email_generic_setting©r   rA   rN   r\   rv   rh   rf   r   rg   ri   r^   )r#   rk   rl   r   r   r   r   r/   rm   r   rn   r:   rP   rw   rx   ry   rz   rp   rq   rF   r\   rh   r|   r$   r$   r%   Útest_create_restricted_field±   s8    
 ÿþøþ
z9TestGenericSettingCreateView.test_create_restricted_fieldN)r<   r=   r>   rL   rQ   rY   ra   rb   rt   r~   r   r$   r$   r$   r%   rI   M   s   #rI   c                   @   s\   e Z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dS )ÚTestGenericSettingEditViewc                 C   s(   t ƒ | _d| j_| j ¡  |  ¡ | _d S )NzSetting title)r   Útest_settingr\   rl   r!   r#   rK   r$   r$   r%   rL   Ø   s    
z TestGenericSettingEditView.setUpc                 C   s   |   ¡ }|  |jd¡ d S rM   rO   r3   r$   r$   r%   rQ   ß   s    z(TestGenericSettingEditView.test_get_editc                 C   s,   | j  tddddgd¡}|  |jd¡ d S )Nr(   r   rS   é   r,   i”  )r.   r/   r   r:   rP   r3   r$   r$   r%   Útest_non_existent_modelã   s    ÿz2TestGenericSettingEditView.test_non_existent_modelc                 C   s,   t ddd}| jj|dd}|  |d¡ d S )Nr(   )r*   r   r,   T)Úfollowzz<svg class="icon icon-icon-setting-tag w-header__glyph" aria-hidden="true"><use href="#icon-icon-setting-tag"></use></svg>)r   r.   r/   r0   )r"   rC   Zedit_responser$   r$   r%   Útest_register_with_iconé   s    þz2TestGenericSettingEditView.test_register_with_iconc                 C   s0   | j ddid}|  |d¡ | j|ddd d S rR   rX   r3   r$   r$   r%   rY   ò   s    z,TestGenericSettingEditView.test_edit_invalidc                 C   s<   | j dddœd}|  |jd¡ tj ¡ }|  |jd¡ d S )NrZ   zdifferent.email@example.comr[   rU   r^   )rF   r:   rP   r   r   r_   r\   rs   r$   r$   r%   ra   ÷   s    þÿ
z$TestGenericSettingEditView.test_editc                 C   s>   t ddd}| j |¡}| j|d|› tj ¡ j› dd d S )Nr(   r)   r,   r^   ú/re   )r   r.   r/   ro   r   r   r_   rH   )r"   rE   r4   r$   r$   r%   Útest_for_request  s    ýz+TestGenericSettingEditView.test_for_requestc                 C   sô   t ƒ }d|_d|_| ¡  d| j_| j ¡  | jj tj	j
dddtj	j
dddtj	j
d	d
¡ | j
t d}|  |jd¡ |  dt|jd jƒ¡ |  dt|jd jƒ¡ | jt dddœd}|  |jd¡ | ¡  |  |jd¡ |  |jd¡ d S )Nrf   ú	Old titleFr   r   rc   r*   ru   r   r€   rA   rN   r\   rv   rh   útest-updated@example.comú	New titlerg   ©rB   rG   r^   )r   rh   r\   rl   r#   rk   r   r   r   r   r/   r:   rP   rw   rx   ry   rz   rF   Úrefresh_from_db©r"   rƒ   r4   r$   r$   r%   Útest_edit_restricted_field  s>    
 ÿþøþþz5TestGenericSettingEditView.test_edit_restricted_fieldc                 C   sè   t ƒ }d|_d|_| ¡  d| j_| j ¡  | jj tj	j
dddtj	j
ddd¡ | j
t d	}|  |jd
¡ |  dt|jd jƒ¡ |  dt|jd jƒ¡ | jt dddœd}|  |jd¡ | ¡  |  |jd¡ |  |jd¡ d S )Nrf   rŠ   Fr   r   rc   r*   ru   rA   rN   r\   rv   rh   r‹   rŒ   rg   r   r^   )r   rh   r\   rl   r#   rk   r   r   r   r   r/   r:   rP   rw   rx   ry   rz   r{   rF   rŽ   r   r$   r$   r%   Ú3test_edit_restricted_field_without_field_permission5  s<    
 ÿþüþþzNTestGenericSettingEditView.test_edit_restricted_field_without_field_permissionc                 C   s®   t ƒ }d|_d|_| ¡  d| j_| j ¡  | jj tj	j
ddd¡ | j
t d}| j|dd	d
 | jt dddœd}| j|dd	d
 | ¡  |  |jd¡ |  |jd¡ d S )Nrf   rŠ   Fr   r   rc   rA   r^   rd   re   r‹   z	new titlerg   r   )r   rh   r\   rl   r#   rk   r   r   r   r   r/   ro   rF   rŽ   r:   r   r$   r$   r%   Ú1test_edit_restricted_field_without_any_permission[  s0    
 ÿÿþþzLTestGenericSettingEditView.test_edit_restricted_field_without_any_permissionN)r<   r=   r>   rL   rQ   r…   r‡   rY   ra   r‰   r   r‘   r’   r$   r$   r$   r%   r‚   ×   s   	
(&r‚   c                   @   s   e Zd Zdd„ ZdS )ÚTestAdminPermissionc                 C   s>   t jjdddd}t d¡D ]}||ƒ kr q:q|  d¡ d S )Nr*   r+   Zchange_testgenericsetting)r   r   r   Zregister_permissionsz=Change permission for tests.TestGenericSetting not registered)r   r   r    r   Z	get_hooksZfail)r"   Z
permissionÚfnr$   r$   r%   Útest_registered_permission~  s    ý
z.TestAdminPermission.test_registered_permissionN)r<   r=   r>   r•   r$   r$   r$   r%   r“   }  s   r“   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestEditHandlersc                 C   s   t  ¡  d S rJ   )r   Úcache_clearrK   r$   r$   r%   rL   Œ  s    zTestEditHandlers.setUpc                 C   sr   t tƒ}|  |t¡ |  t|jƒd¡ |jd }|  |t¡ |  |jd¡ |jd }|  |t¡ |  |jd¡ d S )NrV   r   r\   r„   r]   )	r   r   ÚassertIsInstancer	   r:   ÚlenÚchildrenr   Ú
field_name)r"   Úhandlerr_   Úsecondr$   r$   r%   Ú test_default_model_introspection  s    

z1TestEditHandlers.test_default_model_introspectionc                 C   sN   t tƒ}|  |t¡ |  t|jƒd¡ |jd }|  |t¡ |  |jd¡ d S )Nr„   r   r\   )	r   r   r˜   r	   r:   r™   rš   r   r›   )r"   rœ   r_   r$   r$   r%   Útest_with_custom_panelsš  s    
z(TestEditHandlers.test_with_custom_panelsc                 C   s*   t tƒ}|  |t¡ |  t|jƒd¡ d S )NrV   )r   r   r˜   r
   r:   r™   rš   )r"   rœ   r$   r$   r%   Útest_with_custom_edit_handler¢  s    z.TestEditHandlers.test_with_custom_edit_handlerN)r<   r=   r>   rL   rž   rŸ   r    r$   r$   r$   r%   r–   ‹  s   r–   N)#Zdjango.contrib.auth.modelsr   Zdjango.testr   Zdjango.urlsr   Zdjango.utils.textr   Zwagtailr   Zwagtail.admin.admin_url_finderr   Zwagtail.admin.panelsr   r	   r
   Z!wagtail.contrib.settings.registryr   Zwagtail.contrib.settings.viewsr   Zwagtail.test.testapp.modelsr   r   r   r   r   r   Zwagtail.test.utilsr   r   r?   rI   r‚   r“   r–   r$   r$   r$   r%   Ú<module>   s$    (  '