U
    {®ÞhJ<  ã                   @   s  d dl mZ d dl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 d dlmZmZmZmZ d d	lmZ d d
lmZmZmZmZ d dl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eƒZ"G dd„ deeƒZ#G dd„ deeƒZ$dS )é    )Úget_user_model)ÚGroupÚ
Permission)ÚContentType)ÚTestCase)Úreverse)Útimezone)Úfreeze_time)ÚLockedPagesPanelÚRecentEditsPanelÚ$UserObjectsInWorkflowModerationPanelÚWorkflowObjectsToModeratePanel)Úget_dummy_request)ÚGroupPagePermissionÚPageÚWorkflowÚWorkflowContentType)ÚFullFeaturedSnippetÚ
SimplePage)ÚWagtailTestUtilsc                   @   sD   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S )ÚTestRecentEditsPanelc                 C   st   t jjdd| _tdddd}| jj|d | ¡ | _| j ¡  tjj|j	d| _
| jdd	d
| _| jdd	d
 d S )Né   ©ÚidzHello world!úhello-worldzSome content here)ÚtitleÚslugÚcontent)ÚinstanceÚaliceÚpassword©Úusernamer    Úbob)r   ÚobjectsÚgetÚ	root_pager   Z	add_childÚsave_revisionÚrevisionÚpublishr   Ú
child_pageÚcreate_superuserZ
user_alice)Úselfr*   © r-   új/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/test_dashboard.pyÚsetUp   s    ý

zTestRecentEditsPanel.setUpc                 C   sd   |dddœ}| j  td| jjfd|¡}|  |td| jjfd¡ tjj| jjd}|  	|j
¡ d S )NzSome contentr   )r   r   r   zwagtailadmin_pages:edit©Úargsr   )ÚclientÚpostr   r*   r   ZassertRedirectsr   r$   r%   Ú
assertTrueZhas_unpublished_changes)r,   r   Ú	post_dataÚresponseZchild_page_newr-   r-   r.   Úchange_something(   s     ÿ ÿz%TestRecentEditsPanel.change_somethingc                 C   s"   | j  tdƒ¡}|  |jd¡ |S )NÚwagtailadmin_homeéÈ   )r2   r%   r   ÚassertEqualÚstatus_code©r,   r6   r-   r-   r.   Úgo_to_dashboard_response7   s    z-TestRecentEditsPanel.go_to_dashboard_responsec                 C   sÜ   | j ddd | j tdƒ¡}|  d|j d¡¡ | j ¡  | j ddd |  d¡ |  	¡ }|  
d|j d¡¡ | j ddd |  d	¡ |  	¡ }|  
d|j d¡¡ | j ¡  | j ddd |  	¡ }|  
d|j d¡¡ d S )
Nr#   r    r!   r8   úYour most recent editszutf-8r   úAlice's editú
Bob's edit)Úloginr2   r%   r   ZassertNotInr   ÚdecodeZlogoutr7   r=   ÚassertInr<   r-   r-   r.   Útest_your_recent_edits<   s     



z+TestRecentEditsPanel.test_your_recent_editsc                 C   sD   | j ddd |  d¡ | j ¡  | j tdƒ¡}|  |jd¡ d S )Nr   r    r!   r?   r8   r9   )	rA   r7   r*   Údeleter2   r%   r   r:   r;   r<   r-   r-   r.   Útest_missing_page_record_   s
    

z-TestRecentEditsPanel.test_missing_page_recordc              	   C   s¦   | j ddd t ¡ }t|ƒ |  d¡ W 5 Q R X tƒ jjdd| j_	t
ƒ }| d| ji¡}tjj| jjdj}|  |d	 d
 d
 |¡ |  |d	 d
 d |¡ dS )z1Test if the panel actually returns expected pagesr#   r    r!   r@   zbob@example.com)ÚemailÚrequest)ÚpkZ
last_editsr   é   N)rA   r   Únowr	   r7   r   r$   r%   r2   Úuserr   Zget_context_datar   r*   r   Úspecificr:   )r,   Zedit_timestampÚpanelÚctxÚpager-   r-   r.   Ú
test_panelj   s    
zTestRecentEditsPanel.test_panelc                 C   s¦   | j ddd |  d¡ ddt| jjƒdddœ}| j td	| jjfd
|¡ |  	t
jjdd¡ | j tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr#   r    r!   zBob was erezGoodbye world!zgoodbye-worldF)Z	new_titleZnew_slugZnew_parent_pageZcopy_subpagesÚaliaszwagtailadmin_pages:copyr0   )r   r8   r9   r>   )rA   r7   Ústrr&   r   r2   r3   r   r*   r4   r   r$   r%   r:   r;   ZassertContainsZassertNotContains)r,   r5   r6   r-   r-   r.   Ú&test_copying_does_not_count_as_an_edit€   s$    

û ÿz;TestRecentEditsPanel.test_copying_does_not_count_as_an_editN)
Ú__name__Ú
__module__Ú__qualname__r/   r7   r=   rD   rF   rQ   rT   r-   r-   r-   r.   r      s   #r   c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )ÚTestRecentEditsQueryCountú	test.jsonc                 C   sè   | j ddd| _tƒ | _| j| j_tj ¡ }ddh}ddh}ddh}tt	jj
dddddd	gd
 d¡ ¡ ƒ}|D ]r}|j| jdd}|j|krœ| || j¡ |j|krÆd|_| j|_t ¡ |_| ¡  |j|krpt ¡ |_| ¡  qpd S )Nr#   r    r!   é   é   é	   é   é   é   ©Zid__inrI   T)rL   Z
log_action)r+   r#   r   Údummy_requestrL   r   r$   ÚfirstÚlistr   ÚfilterÚorder_byrM   r'   rI   ÚstartÚlockedÚ	locked_byr   rK   Ú	locked_atÚsaveZapproved_go_live_at)r,   ÚworkflowZworkflow_pagesZlocked_pagesZscheduled_pagesZpages_to_editrP   r(   r-   r-   r.   r/      s,    

"ÿ




zTestRecentEditsQueryCount.setUpc              	   C   s˜   t ƒ }d| ji}| |¡}|  d¡ | |¡}W 5 Q R X |  d|¡ |  |¡}|  t| d¡ƒd¡ dddddg}d	d
„ | d¡D ƒ}|  ||¡ d S )NrH   rZ   úAmeristralia Dayúsvg use[href="#icon-lock"]r   zlive + draftzlive + scheduledzin moderationc                 S   s$   g | ]}d   |jddd¡ ¡ ‘qS )Ú TF)ÚstringÚ	recursive)ÚjoinZfind_allÚstrip©Ú.0Úer-   r-   r.   Ú
<listcomp>Ì   s   ÿzDTestRecentEditsQueryCount.test_panel_query_count.<locals>.<listcomp>z	.w-status)	r   ra   Úrender_htmlÚassertNumQueriesrC   Úget_soupr:   ÚlenÚselect)r,   rN   Úparent_contextÚhtmlÚsoupZexpected_statusesZstatusesr-   r-   r.   Útest_panel_query_count·   s$    


ûþz0TestRecentEditsQueryCount.test_panel_query_countN©rU   rV   rW   Zfixturesr/   r   r-   r-   r-   r.   rX   š   s   rX   c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )ÚTestLockedPagesQueryCountrY   c                 C   s~   | j ddd| _tƒ | _| j| j_tjjdddgd d¡}t	|ƒD ]4\}}d	|_
| j|_t ¡ tj|d
 |_| ¡  qDd S )Nr#   r    r!   r\   r]   r_   )Zpk__inrI   T)Úhours)r+   r#   r   ra   rL   r   r$   rd   re   Ú	enumeraterg   rh   r   rK   Ú	timedeltari   rj   )r,   ZpagesÚirP   r-   r-   r.   r/   Ö   s    
zTestLockedPagesQueryCount.setUpc              	   C   st   t ƒ }| jddœ}| |¡}|  d¡ | |¡}W 5 Q R X |  |¡}dddg}dd„ | d	¡D ƒ}|  ||¡ d S )
NÚdummy©rH   Z
csrf_tokenrJ   úSaint Patrick (single event)úSteal underpantsrl   c                 S   s   g | ]}|j d d‘qS ©T)rr   ©Zget_textrs   r-   r-   r.   rv   ñ   s     zDTestLockedPagesQueryCount.test_panel_query_count.<locals>.<listcomp>ú.title-wrapper a)r
   ra   rw   rx   ry   r{   r:   ©r,   rN   r|   r}   r~   Zexpected_titlesÚtitlesr-   r-   r.   r   â   s    

ýz0TestLockedPagesQueryCount.test_panel_query_countNr€   r-   r-   r-   r.   r   Ó   s   r   c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )Ú)UserObjectsInWorkflowModerationQueryCountrY   c                 C   s’  | j ddd| _| jddd| _| jddd| _tjjdd}|j 	| j| j¡ t
j ¡ }tjj|tj t¡d tjj|t ¡ d	d
 |j 	tjjdd¡ tjjddgdj| jd tjjddgd ¡ D ]:}| ¡  | || j¡ d|_| j|_t ¡ |_|  ¡  qÐtjjddgd ¡ D ]}| ¡  | || j¡ q"t!ddƒD ]0}tjjd|› d}| ¡  | || j¡ qJt"ƒ | _#| j| j#_$d S )NÚadminr    r!   r#   ZsomeoneelseÚEditors©Úname©rk   Úcontent_typeÚchange©ÚgrouprP   Zpermission_typeÚchange_fullfeaturedsnippet©Úcodenamer\   r]   r`   )ÚownerTr^   r_   rJ   é   ú	Some obj ©Útext)%r+   Ú	superuserÚcreate_userr#   Zsomeone_elser   r$   r%   Úuser_setÚaddr   rb   r   Úcreater   Úget_for_modelr   r   r   Úget_first_root_nodeÚpermissionsr   rd   ÚupdaterM   r'   rf   rg   rh   r   rK   ri   rj   Úranger   ra   rL   )r,   Úeditorsrk   rP   r…   Úobjr-   r-   r.   r/   ø   sL     ÿ

þ  ÿÿ

z/UserObjectsInWorkflowModerationQueryCount.setUpc              	   C   sŽ   t ƒ }d| ji}| |¡}|  d¡ | |¡}W 5 Q R X |  |¡}|  t| d¡ƒd¡ ddddd	d
g}dd„ | d¡D ƒ}|  ||¡ d S )NrH   r^   rm   r   ú
Some obj 2ú
Some obj 1rˆ   Ú	Christmasr‰   rl   c                 S   s   g | ]}|j d d‘qS rŠ   r‹   rs   r-   r-   r.   rv   9  s     zTUserObjectsInWorkflowModerationQueryCount.test_panel_query_count.<locals>.<listcomp>rŒ   )r   ra   rw   rx   ry   r:   rz   r{   r   r-   r-   r.   r   &  s     


úz@UserObjectsInWorkflowModerationQueryCount.test_panel_query_countNr€   r-   r-   r-   r.   r   õ   s   .r   c                   @   s"   e Zd ZdgZdd„ Zdd„ ZdS )Ú#WorkflowObjectsToModerateQueryCountrY   c                 C   sÒ  | j ddd| _| jddd| _| jddd| _tjjdd}tjjdd}|j 	| j¡ |j 	| j¡ t
 ¡ }tjj||d	d
 tjj||d	d
 tjj||dd
 |j 	tjjdd¡ |jj	tjjddgdŽ  tj ¡ }tjj|tj t¡d t
jjddgd ¡ D ]<}| ¡  | || j¡ d|_| j|_t ¡ |_| ¡  qt
jjddgd ¡ D ]}| ¡  | || j¡ qbt ddƒD ]0}tjjd|› d}| ¡  | || j¡ qŠt!ƒ | _"| j| j"_#d S )Nr   r    r!   r#   Ú	moderatorr‘   r’   Z
Moderatorsr–   r—   r)   r™   rš   Zpublish_fullfeaturedsnippet)Zcodename__inr”   r\   r]   r`   Tr^   r_   rJ   r   rž   rŸ   )$r+   r¡   r¢   r#   r±   r   r$   r%   r£   r¤   r   r§   r   r¥   r¨   r   rd   r   rb   r   r   r¦   r   rM   r'   rf   rg   rh   r   rK   ri   rj   rª   r   ra   rL   )r,   r«   Z
moderatorsÚrootrk   rP   r…   r¬   r-   r-   r.   r/   @  sl      ÿ  ÿ  ÿÿþÿÿ	

þ
z)WorkflowObjectsToModerateQueryCount.setUpc              	   C   s   t ƒ }| jddœ}| |¡}|  d¡ | |¡}W 5 Q R X |  |¡}|  t| d¡ƒd¡ dddd	d
dg}dd„ | d¡D ƒ}|  ||¡ d S )Nr†   r‡   r_   rm   r   r­   r®   rˆ   r¯   r‰   rl   c                 S   s   g | ]}|j d d‘qS rŠ   r‹   rs   r-   r-   r.   rv   “  s     zNWorkflowObjectsToModerateQueryCount.test_panel_query_count.<locals>.<listcomp>rŒ   )r   ra   rw   rx   ry   r:   rz   r{   r   r-   r-   r.   r   €  s     

úz:WorkflowObjectsToModerateQueryCount.test_panel_query_countNr€   r-   r-   r-   r.   r°   =  s   @r°   N)%Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr   Zdjango.testr   Zdjango.urlsr   Zdjango.utilsr   Z	freezegunr	   Zwagtail.admin.views.homer
   r   r   r   Zwagtail.coreutilsr   Zwagtail.modelsr   r   r   r   Zwagtail.test.testapp.modelsr   r   Zwagtail.test.utilsr   r   rX   r   r   r°   r-   r-   r-   r.   Ú<module>   s"    9"H