a
    DøgJ<  ã                   @   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-   úa/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/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 d  ƒ n1 s>0    Y  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@   Nzbob@example.com)ÚemailÚrequest)ÚpkZ
last_editsr   é   )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
g d¢d	 d
¡ ¡ ƒ}|D ]r}|j| jdd}|j|v r”| || j¡ |j|v r¾d|_| j|_t ¡ |_| ¡  |j|v rht ¡ |_| ¡  qhd S )Nr#   r    r!   é   é   é	   é   )é   rZ   r[   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 d   ƒ n1 sD0    Y  |  d|¡ |  |¡}|  t| d¡ƒd¡ g d¢}dd„ | d	¡D ƒ}|  ||¡ d S )
NrH   rZ   úAmeristralia Dayúsvg use[href="#icon-lock"]r   )zlive + draftúlive + scheduledrn   úin moderationro   c                 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g d¢d d¡}t	|ƒD ]4\}}d|_
| j|_t ¡ tj|d |_| ¡  qBd 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   s†   t ƒ }| jddœ}| |¡}|  d¡ | |¡}W d   ƒ n1 sF0    Y  |  |¡}g d¢}dd„ | d¡D ƒ}|  ||¡ d S )NÚdummy©rH   Z
csrf_tokené   )úSaint Patrick (single event)úSteal underpantsrl   c                 S   s   g | ]}|j d d‘qS ©T)rt   ©Zget_textru   r-   r-   r.   rx   ñ   ó    zDTestLockedPagesQueryCount.test_panel_query_count.<locals>.<listcomp>ú.title-wrapper a)r
   ra   ry   rz   r{   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/   ø   sF    ÿ

þ
ÿÿ

z/UserObjectsInWorkflowModerationQueryCount.setUpc                 C   sš   t ƒ }d| ji}| |¡}|  d¡ | |¡}W d   ƒ n1 sD0    Y  |  |¡}|  t| d¡ƒd¡ g d¢}dd„ | d¡D ƒ}|  ||¡ d S )	NrH   r^   rm   r   ©z
Some obj 2z
Some obj 1r‹   Z	ChristmasrŒ   rl   c                 S   s   g | ]}|j d d‘qS r   rŽ   ru   r-   r-   r.   rx   9  r   zTUserObjectsInWorkflowModerationQueryCount.test_panel_query_count.<locals>.<listcomp>r   )r   ra   ry   rz   r{   r:   r|   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/   @  s`    ÿÿÿÿþÿÿ	

þ
z)WorkflowObjectsToModerateQueryCount.setUpc                 C   sœ   t ƒ }| jddœ}| |¡}|  d¡ | |¡}W d   ƒ n1 sF0    Y  |  |¡}|  t| d¡ƒd¡ g d¢}dd„ | d	¡D ƒ}|  ||¡ d S )
Nrˆ   r‰   r_   rm   r   r±   c                 S   s   g | ]}|j d d‘qS r   rŽ   ru   r-   r-   r.   rx   “  r   zNWorkflowObjectsToModerateQueryCount.test_panel_query_count.<locals>.<listcomp>r   )r   ra   ry   rz   r{   r:   r|   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