U
    {®ÞhÎÞ  ã                   @   sP  d dl 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 d dlmZ 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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(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 G dd„ de3e1eƒZ6G dd„ de6ƒZ7G dd„ de6ƒZ8G dd„ de8ƒZ9G dd „ d e6ƒZ:G d!d"„ d"e:ƒZ;ed#d$G d%d&„ d&eƒƒZ<G d'd(„ d(e6ƒZ=G d)d*„ d*e6ƒZ>G d+d,„ d,e6ƒZ?G d-d.„ d.e?ƒZ@G d/d0„ d0e6ƒZAG d1d2„ d2e1eƒZBed3d#d4G d5d6„ d6e6ƒƒZCG d7d8„ d8eCƒZDG d9d:„ d:e6ƒZEdS );é    N)ÚBytesIO)Úmock)Úsettings)Ú	LANG_INFO)ÚGroupÚ
Permission)ÚContentType)ÚF)ÚRequestFactoryÚTestCase)Úoverride_settings)Úreverse)ÚtimezoneÚtranslation)Úfreeze_time)Úload_workbook)ÚExcelDateFormatter)Úpage_types_usage)ÚLogEntriesView)ÚGroupPagePermissionÚLocaleÚModelLogEntryÚPageÚPageLogEntryÚSite)ÚAdvertÚ	EventPageÚEventPageSpeakerÚ
SimplePage)ÚWagtailTestUtils)ÚAdminTemplateTestUtils)ÚRemovedInWagtail70Warningc                       sh   e Zd ZdZdZdZdZdZe‡ fdd„ƒZ	dd	„ Z
i fd
d„Zdd„ Zdd„ Zdd„ Zdd„ Z‡  ZS )ÚBaseReportViewTestCaseNz#w-slim-header-buttonsz.w-drilldownÚ Fc                    s2   t ƒ  ¡  t| jƒ| _| jr.d| _d| _d| _d S )NzU[data-controller="w-teleport"][data-w-teleport-target-value="#w-slim-header-buttons"]zQ[data-controller="w-teleport"][data-w-teleport-target-value="#filters-drilldown"]z&_w_filter_fragment=true)	ÚsuperÚ
setUpClassr   Úurl_nameÚurlÚresults_onlyÚheader_buttons_parent_selectorÚdrilldown_selectorÚextra_params)Úcls©Ú	__class__© ún/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/test_reports_views.pyr%   .   s    
ÿÿz!BaseReportViewTestCase.setUpClassc                 C   s   |   ¡ | _d S ©N©ÚloginÚuser©Úselfr/   r/   r0   ÚsetUp=   s    zBaseReportViewTestCase.setUpc                 C   s   | j rd|d< | j | j|¡S )NÚtrueZ_w_filter_fragment)r(   ÚclientÚgetr'   )r6   Úparamsr/   r/   r0   r:   @   s    zBaseReportViewTestCase.getc           
      C   sÎ   |  | j¡}|  |¡ | d¡}t| jƒ}|› d|› d|› | j› }|  t|ƒd¡ |  dd„ |D ƒ|› d|› dg¡ |  d	¡}|  d
¡}	|  |¡ |  |	¡ |  	||	j
 d¡¡ |  |	j
 d¡d¡ d S )Nz.w-dropdown aú?ú=é   c                 S   s   g | ]}|  d ¡‘qS )Úhref©r:   )Ú.0Úlinkr/   r/   r0   Ú
<listcomp>P   s     z=BaseReportViewTestCase.assertActiveFilter.<locals>.<listcomp>z&export=xlsxz&export=csvz".w-active-filters .w-pill__contentz!.w-active-filters .w-pill__removezdata-w-swap-src-valuezdata-w-swap-reflect-valuer8   )Ú
select_oner)   ÚassertIsNotNoneÚselectr   r&   r+   ÚassertEqualÚlenÚassertNotInÚattrsr:   )
r6   ÚsoupÚnameÚvalueZlinks_parentÚlinksZunfiltered_urlZfiltered_urlZactive_filterZclear_buttonr/   r/   r0   ÚassertActiveFilterE   s     


þ



z)BaseReportViewTestCase.assertActiveFilterc                 C   s   |   | d¡¡ d S )Nz.w-active-filters)ÚassertIsNonerD   )r6   rK   r/   r/   r0   ÚassertActiveFilterNotRendered\   s    z4BaseReportViewTestCase.assertActiveFilterNotRenderedc                 C   s"   | j r|  |¡ n|  ||¡ d S r1   )r(   ZassertBreadcrumbsNotRenderedZassertBreadcrumbsItemsRendered)r6   ZbreadcrumbsÚhtmlr/   r/   r0   ÚassertBreadcrumbs_   s    z(BaseReportViewTestCase.assertBreadcrumbsc                 C   s<   |  d¡}| jr|  |¡ n|  |¡ |  |j ¡ |¡ d S )NÚtitle)rD   r(   rP   rE   rG   ÚtextÚstrip)r6   rK   rT   Ú
page_titler/   r/   r0   ÚassertPageTitlee   s
    

z&BaseReportViewTestCase.assertPageTitle)Ú__name__Ú
__module__Ú__qualname__r&   r)   r*   r+   r(   Úclassmethodr%   r7   r:   rO   rQ   rS   rX   Ú__classcell__r/   r/   r-   r0   r"   '   s   r"   c                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestLockedPagesViewú!wagtailadmin_reports:locked_pagesc                 C   s.  |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  dddœg|j¡ |  |d¡ |  |j¡}| 	| j
› d	¡}|  t|ƒd
¡ |  |d jd¡ |  |d   d¡d¡ |  |¡ |  |d¡ tj ¡ }|jtdd| jt ¡ dd |jtdd| jt ¡ dd |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  dddœg|j¡ |  |d¡ |  |d¡ |  |d¡ |  |j¡}| 	| j
› d	¡}|  t|ƒd¡ |  |d jd¡ |  |d j¡ |  |d
 jt| jƒ¡ |  |d
   d¡t| jjƒ¡ |  |¡ |  |d¡ |  |d¡ d S )NéÈ   ú*wagtailadmin/reports/base_page_report.htmlú%wagtailadmin/reports/base_report.htmlú.wagtailadmin/reports/locked_pages_results.htmlr#   zLocked pages©r'   ÚlabelúNo locked pages found.z  select[name='locked_by'] optioné   r   z	---------rM   zLocked pages - WagtailzFirst locked pageT)rT   ÚlockedÚ	locked_byÚ	locked_at©ÚinstancezSecond locked pager>   z&locked-indicator indicator--is-inversez7title="This page is locked, by you, to further editing")r:   rG   Ústatus_codeÚassertTemplateNotUsedÚassertTemplateUsedrS   ÚcontentÚassertContainsÚget_souprF   r*   rH   rU   rQ   rX   r   ÚobjectsÚfirstÚ	add_childr4   r   ÚnowÚassertNotContainsrP   rM   ÚstrÚpk)r6   ÚresponserK   Zlocked_by_optionsZparent_pager/   r/   r0   Útest_simpleq   s–    þþ
þ
ÿ

üÿüÿ
þþ
þ
ÿ
 ÿzTestLockedPagesView.test_simplec                 C   sª   t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ tjj|tj ¡ dd |  
¡ }|  |jd	¡ |  |d
¡ |  |d¡ |  |d¡ |  |d¡ d S )Nú
test group©rL   FÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenameÚunlock©ÚgroupÚpageZpermission_typer`   ra   rb   rc   rf   )r   rs   Úcreater4   Úis_superuserÚsaveÚgroupsÚaddÚuser_permissionsr   r:   r   r   rt   rG   rm   rn   ro   rq   ©r6   r„   rz   r/   r/   r0   Ú!test_get_with_minimal_permissionsÊ   s6    
 ÿÿýþþz5TestLockedPagesView.test_get_with_minimal_permissionsc                 C   sH   d| j _| j  ¡  | j j tjjddd¡ |  ¡ }|  |t	dƒ¡ d S )NFr~   r   r€   Úwagtailadmin_home)
r4   r‡   rˆ   r‹   rŠ   r   rs   r:   ÚassertRedirectsr   ©r6   rz   r/   r/   r0   Útest_get_with_no_permissionsè   s    
 ÿÿz0TestLockedPagesView.test_get_with_no_permissionsc                 C   s¼   t j ¡ | _d| j_| j| j_tjr6d| j_	d| j_
nd| j_	d| j_
| j ¡  | jddid}|  |jd	¡ | ¡  ¡  d
¡}|  |d d¡ tjr¨|  |d d¡ n|  |d d¡ d S )NTú2013-02-01T12:00:00.000Zú2013-01-01T12:00:00.000Zú2013-02-01T12:00:00ú2013-01-01T12:00:00ÚexportÚcsv©r;   r`   Ú
r   z.Title,Updated,Status,Type,Locked at,Locked byrg   zRRoot,2013-01-01 12:00:00+00:00,live,Page,2013-02-01 12:00:00+00:00,test@email.comzFRoot,2013-01-01 12:00:00,live,Page,2013-02-01 12:00:00,test@email.com)r   rs   rt   r…   rh   r4   ri   r   ÚUSE_TZrj   Úlatest_revision_created_atrˆ   r:   rG   rm   ÚgetvalueÚdecodeÚsplit©r6   rz   Z
data_linesr/   r/   r0   Útest_csv_exportõ   s2    


 ÿþþz#TestLockedPagesView.test_csv_exportc                 C   s0  t j ¡ | _d| j_| j| j_tjr6d| j_	d| j_
nd| j_	d| j_
| j ¡  | jddid}|  |jd	¡ | ¡ }tt|ƒd
d }dd„ |jD ƒ}|  |d ddddddg¡ |  |d dt ddddd¡ddt ddddd¡dg¡ |  t|ƒd¡ |  |d jtƒ  ¡ ¡ |  |d jtƒ  ¡ ¡ d S )NTr’   r“   r”   r•   r–   Úxlsxr˜   r`   ©ÚfilenameÚSheet1c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r/   ©rM   ©rA   Úcellr/   r/   r0   rC   *  s     zCTestLockedPagesView.test_xlsx_export.<locals>.<listcomp>.<listcomp>r/   ©rA   Úrowr/   r/   r0   rC   *  s     z8TestLockedPagesView.test_xlsx_export.<locals>.<listcomp>r   ÚTitleZUpdatedÚStatusÚTypez	Locked atz	Locked byrg   ZRootéÝ  é   Úliver   r>   útest@email.comZB2ZE2)r   rs   rt   r…   rh   r4   ri   r   rš   rj   r›   rˆ   r:   rG   rm   rœ   r   r   ÚrowsÚdatetimerH   Únumber_formatr   ©r6   rz   Zworkbook_dataZ	worksheetZ
cell_arrayr/   r/   r0   Útest_xlsx_export  s>    


þúþz$TestLockedPagesView.test_xlsx_exportN)	rY   rZ   r[   r&   r{   r   r‘   r    rµ   r/   r/   r/   r0   r^   n   s   Y!r^   c                   @   s.   e Zd ZdgZdZdd„ Zdd„ Zdd„ Zd	S )
ÚTestFilteredLockedPagesViewú	test.jsonr_   c                 C   s~   |   ¡ | _tjjdd| _d| j_| j| j_t 	¡ | j_
| j ¡  tjjdd| _d| j_| j| j_t 	¡ | j_
| j ¡  d S )Nz)/home/events/tentative-unpublished-event/©Zurl_pathTz/home/events/christmas/)r3   r4   r   rs   r:   Zunpublished_pagerh   ri   r   rv   rj   rˆ   Zchristmas_pager5   r/   r/   r0   r7   D  s    
ÿ


z!TestFilteredLockedPagesView.setUpc                 C   s¢   | j ddid}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ | j ddid}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |j¡}|  |dd¡ d S )	Nr¯   r8   r˜   r`   úTentative Unpublished EventúMy locked pageÚ	ChristmasÚfalse)r:   rG   rm   rw   rq   rr   rp   rO   ©r6   rz   rK   r/   r/   r0   Útest_filter_by_liveT  s    z/TestFilteredLockedPagesView.test_filter_by_livec                 C   sJ   | j d| jjid}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )Nri   r˜   r`   r¹   r»   rº   )r:   r4   ry   rG   rm   rq   rw   r   r/   r/   r0   Útest_filter_by_userd  s
    z/TestFilteredLockedPagesView.test_filter_by_userN)rY   rZ   r[   Úfixturesr&   r7   r¾   r¿   r/   r/   r/   r0   r¶   @  s
   r¶   c                   @   s   e Zd ZdZdZdS )Ú"TestFilteredLockedPagesResultsViewz)wagtailadmin_reports:locked_pages_resultsTN©rY   rZ   r[   r&   r(   r/   r/   r/   r0   rÁ   l  s   rÁ   c                   @   sŽ   e Zd Zdg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d„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!S )"ÚTestFilteredLogEntriesViewr·   z!wagtailadmin_reports:site_historyc              	   C   sê  |   ¡ | _tjjdd| _tjjdd| _| jdddd| _	t
jjd	d
}|j tjjddd¡ tjj|| jdd |j | j	¡ tdƒ t ¡ | _W 5 Q R X tjj| jd| jtjdd | jd| _tjj| jd| jtjdd d| _tjj| jd| jtjdd | j	d| _tjj| jd| jtjdd dd| _tjj| jdddddœid | _tjj| jd!ddd"dœid | _tjj| jd#ddddœid | _tjj| jd| jtjdd d| _ tjj| jd| jtjdd d$d| _!d S )%Nz/home/r¸   rg   )ry   Z
the_editorzthe_editor@example.comÚpassword)ÚusernameÚemailrÄ   ZEditorsr}   r~   r   r€   Úchangerƒ   z2024-05-06 12:00:00+09:00úwagtail.createé   ©Údays)Ú	timestampr4   úwagtail.edité   )rÌ   r>   zThe FINAL cut)rÌ   rT   úwagtail.comments.createÚcommentrT   ZFoo)ZcontentpathrU   )Údataúwagtail.comments.editZEditedúwagtail.comments.create_replyzthe final CUT)"r3   r4   r   rs   r:   Ú	home_pager   Zcustom_modelZcreate_userÚeditorr   ZpermissionsrŠ   r   r   r†   Zuser_setr   r   rv   Útodayr   Z
log_actionÚ	timedeltaÚ
create_logÚ
edit_log_1Ú
edit_log_2Ú
edit_log_3Úcreate_comment_logÚedit_comment_logÚcreate_reply_logr   Úcreate_custom_logÚedit_custom_log)r6   Zeditorsr/   r/   r0   r7   u  s¨    
  ÿ ÿÿ  ÿ
üýüüþÿý
þÿý
þÿýýüz TestFilteredLogEntriesView.setUpc                 C   s"   t |jd ƒ}|  |t |ƒ¡ d S )NÚobject_list)ÚsetÚcontextÚassertSetEqual)r6   rz   ÚexpectedÚactualr/   r/   r0   Úassert_log_entriesÐ  s    z-TestFilteredLogEntriesView.assert_log_entriesc                 C   s<   |   |j¡}dd„ | | j› d¡D ƒ}|  |t|ƒ¡ d S )Nc                 S   s   h | ]}|  d ¡’qS r¥   r@   )rA   Úchoicer/   r/   r0   Ú	<setcomp>Ö  s   ÿzCTestFilteredLogEntriesView.assert_filter_actions.<locals>.<setcomp>z& input[name='action'][type='checkbox'])rr   rp   rF   r*   rä   râ   )r6   rz   rå   rK   ræ   r/   r/   r0   Úassert_filter_actionsÔ  s    
ÿþz0TestFilteredLogEntriesView.assert_filter_actionsc                 C   s  |   ¡ }|  |jd¡ |  dddœg|j¡ |  || j| j| j| j	| j
| j| j| j| jg	¡ |  |ddddd	g¡ |  |j¡}|  |¡ |  |d
¡ | j| jd |   ¡ }|  |jd¡ |  || j| j| j| j	| j
| j| jg¡ |  |ddddd	g¡ |  |j¡}|  |¡ d S )Nr`   r#   zSite historyrd   rÈ   rÍ   rÏ   rÒ   rÓ   zSite history - Wagtail©r4   )r:   rG   rm   rS   rp   rç   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rê   rr   rQ   rX   r3   rÕ   r½   r/   r/   r0   Útest_unfilteredÞ  sp    
þ÷þûþ
ùþûþz*TestFilteredLogEntriesView.test_unfilteredc                 C   sœ   | j ddid}|  |jd¡ |  || j| j| j| jg¡ | j| j	d | j ddid}|  |jd¡ |  || j| j| jg¡ |  
|j¡}|  |dd¡ d S )NÚactionrÍ   r˜   r`   rë   )r:   rG   rm   rç   rÙ   rÚ   rÛ   rà   r3   rÕ   rr   rp   rO   r½   r/   r/   r0   Útest_filter_by_action"  s,    üþ
ýþ	z0TestFilteredLogEntriesView.test_filter_by_actionc              	   C   s–   | j dddgid}|  |jd¡ |  || j| j| j| j| j| j	g¡ | j
| jd | j dddgid}|  |jd¡ |  || j| j| j| jg¡ d S )Nrí   rÍ   rÈ   r˜   r`   rë   )r:   rG   rm   rç   rØ   rß   rÙ   rÚ   rÛ   rà   r3   rÕ   r   r/   r/   r0   Útest_filter_by_action_multiple>  s.    úþüþz9TestFilteredLogEntriesView.test_filter_by_action_multiplec                 C   s  | j  ¡ }| jd|tjdd id}|  |jd¡ |  || j| j	| j
| j| j| j| j| jg¡ | jd|tjdd id}|  |jd¡ |  || j| j| j	| j| jg¡ | j|tjdd |tjdd dœd}|  |jd¡ |  || j| j	| j| jg¡ d S )	NÚtimestamp_fromrÎ   rÊ   r˜   r`   Útimestamp_tor>   )rð   rñ   )rÖ   Údater:   r   r×   rG   rm   rç   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   rß   rà   rØ   )r6   rÖ   rz   r/   r/   r0   Útest_filter_by_timestampZ  sT    
ÿ÷þ÷þþÿöþz3TestFilteredLogEntriesView.test_filter_by_timestampc                 C   st   | j d| jjid}|  |jd¡ |  || jg¡ | j d| jj| jjgid}|  |jd¡ |  || j| jg¡ d S )Nr4   r˜   r`   )	r:   rÕ   ry   rG   rm   rç   rÚ   r4   rØ   r   r/   r/   r0   r¿   —  s    z.TestFilteredLogEntriesView.test_filter_by_userc                 C   s6   | j ddid}|  |jd¡ |  || j| jg¡ d S )Nre   z	final cutr˜   r`   )r:   rG   rm   rç   rÛ   rà   r   r/   r/   r0   Útest_filter_by_label   s    z/TestFilteredLogEntriesView.test_filter_by_labelc              
   C   s   | j dtj t¡jid}|  |jd¡ |  || j	| j
| j| j| j| j| jg¡ | j dtj t¡jid}|  |jd¡ |  || j| jg¡ d S )NZobject_typer˜   r`   )r:   r   rs   Úget_for_modelr   ry   rG   rm   rç   rØ   rÙ   rÚ   rÛ   rÜ   rÝ   rÞ   r   rß   rà   r   r/   r/   r0   Útest_filter_by_object_type¥  s2    ÿùþÿþþz5TestFilteredLogEntriesView.test_filter_by_object_typec              	   C   sb  | j ddid}|  |jd¡ |  || j| j| j| j| j| j	g¡ |  
|j¡}|  |dd¡ | j ddid}|  |jd¡ |  || j| j| jg¡ |  
|j¡}|  |dd¡ | j| jd | j ddid}|  |jd¡ |  || j| j| j| jg¡ |  
|j¡}|  |dd¡ | j ddid}|  |jd¡ |  || j| j| jg¡ |  
|j¡}|  |dd¡ d S )NZis_commenting_actionr¼   r˜   r`   r8   rë   )r:   rG   rm   rç   rØ   rÙ   rÚ   rÛ   rß   rà   rr   rp   rO   rÜ   rÝ   rÞ   r3   rÕ   r½   r/   r/   r0   Útest_is_commenting_actionÃ  sb    úþýþüþ	ýþz4TestFilteredLogEntriesView.test_is_commenting_actionc                 C   sB   t jjddd}tjjd|ddt ¡ d |  ¡ }|  |d¡ d S )	NZfake_appzdeleted model©Z	app_labelÚmodelé{   z?This instance's model was deleted, but its content type was notrÈ   ©Z	object_idÚcontent_typere   rí   rÌ   zDeleted model)r   rs   r†   r   r   rv   r:   rq   )r6   Zstale_content_typerz   r/   r/   r0   Ú&test_log_entry_with_stale_content_typeý  s     ÿûzATestFilteredLogEntriesView.test_log_entry_with_stale_content_typec                 C   s2   t jjdd ddt ¡ d |  ¡ }|  |d¡ d S )Nrú   z>This instance's model was deleted, and so was its content typerÈ   rû   zUnknown content type)r   rs   r†   r   rv   r:   rq   r   r/   r/   r0   Ú%test_log_entry_with_null_content_type  s    ûz@TestFilteredLogEntriesView.test_log_entry_with_null_content_typec              
   C   s~   t jjtdtjddP}t jjtddd2 |  ¡ }| ¡  |jjd }|  	| 
¡ d¡ W 5 Q R X W 5 Q R X |  	|jd¡ d S )NÚdecorate_paginated_querysetT)Zside_effectZautospecZpaginate_byrg   )Úreturn_valuer`   )r   ÚpatchÚobjectr   rÿ   r:   Zassert_called_onceZ	call_argsÚargsrG   Úcountrm   )r6   rÿ   rz   Úquerysetr/   r/   r0   Útest_decorated_queryset  s$    ü   ÿû$z2TestFilteredLogEntriesView.test_decorated_querysetc                 C   sÈ   t jjtdd t jd¨ t jjtddt jd† |  td¡n |  tjd¡ |  	tj
¡ |  ¡ }|  |jd¡ |  |  |j¡d¡ |  |jd d¡ |  |jd d¡ W 5 Q R X W 5 Q R X W 5 Q R X d S )NrW   )r   Znew_callablerT   zDeprecated page titlezlThe `title` attribute in `LogEntriesView` (a `ReportView` subclass) is deprecated. Use `page_title` instead.r`   zDeprecated page title - Wagtail)r   r  r  r   ZPropertyMockZassertWarnsMessager!   rG   rT   rP   rW   r:   rm   rX   rr   rp   rã   r   r/   r/   r0   Útest_deprecated_title_attribute+  sB    üüûþ
þþþz:TestFilteredLogEntriesView.test_deprecated_title_attributeN)rY   rZ   r[   rÀ   r&   r7   rç   rê   rì   rî   rï   ró   r¿   rô   rö   r÷   rý   rþ   r  r  r/   r/   r/   r0   rÃ   q  s"   [
D=	:rÃ   c                   @   s   e Zd ZdZdZdS )Ú!TestFilteredLogEntriesResultsViewz)wagtailadmin_reports:site_history_resultsTNrÂ   r/   r/   r/   r0   r  O  s   r  T)ZUSE_L10Nc                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestExcelDateFormatterc                 C   sT   t ƒ }t ¡ D ]@}|  |¡, t |¡ |  | ¡ d¡ W 5 Q R X W 5 Q R X qd S )Nr#   )r   r   ÚkeysÚsubTestr   ÚoverrideZassertNotEqualr:   )r6   Ú	formatterÚlangr/   r/   r0   Útest_all_localesX  s    z'TestExcelDateFormatter.test_all_localesc              	   C   s^   t ƒ }| jdd |  | d¡d¡ W 5 Q R X | jdd |  | d¡d¡ W 5 Q R X d S )NÚr)Úformatzddd, d mmm yyyy hh:mm:sszm/d/Y g:i Azmm/dd/yyyy h:mm AM/PM)r   r  rG   r  )r6   r  r/   r/   r0   Útest_format_  s
    z"TestExcelDateFormatter.test_formatN)rY   rZ   r[   r  r  r/   r/   r/   r0   r	  T  s   r	  c                   @   sX   e Zd 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S )ÚTestAgingPagesViewú wagtailadmin_reports:aging_pagesc                 C   s*   |   ¡ | _tj ¡ | _tjjdd| _d S )NÚhome©Zslug)r3   r4   r   rs   rt   Úrootr:   r  r5   r/   r/   r0   r7   n  s    
zTestAgingPagesView.setUpc                 C   s   | j  ¡ j| jd d S )Nrë   )r  Úsave_revisionÚpublishr4   r5   r/   r/   r0   Úpublish_home_pages  s    z$TestAgingPagesView.publish_home_pagec                 C   sv   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  dddœg|j¡ |  |j¡}|  |¡ |  	|d¡ d S )	Nr`   ra   rb   z-wagtailadmin/reports/aging_pages_results.htmlr#   zAging pagesrd   zAging pages - Wagtail)
r:   rG   rm   rn   ro   rS   rp   rr   rQ   rX   r½   r/   r/   r0   r{   v  s$    þþ
þ
zTestAgingPagesView.test_simplec                 C   sf   |   ¡ }|  |d¡ |  ¡  |   ¡ }|  || jj¡ |  || j ¡ ¡ |  || jj¡ |  |d¡ d S )NzNo pages found.)	r:   rq   r  r  rT   r4   Zget_usernamerw   r  r   r/   r/   r0   Ú"test_displays_only_published_pagesŠ  s    z5TestAgingPagesView.test_displays_only_published_pagesc                 C   sN   |   ¡  d| j_| jj tjjddd¡ | j ¡  |  ¡ }|  	|j
d¡ d S )NFr~   r   r€   é.  )r  r4   r‡   r‹   rŠ   r   rs   r:   rˆ   rG   rm   r   r/   r/   r0   Útest_permissions™  s     ÿÿ
z#TestAgingPagesView.test_permissionsc                 C   s–   |   ¡  tjrd| j_nd| j_| j ¡  | jddid}|  |jd¡ | 	¡  
¡  d¡}|  |d d	¡ tjr‚|  |d
 d¡ n|  |d
 d¡ d S )Nr“   r•   r–   r—   r˜   r`   r™   r   z6Title,Status,Last published at,Last published by,Typerg   z]Welcome to your new Wagtail site!,live + draft,2013-01-01 12:00:00+00:00,test@email.com,PagezWWelcome to your new Wagtail site!,live + draft,2013-01-01 12:00:00,test@email.com,Page)r  r   rš   r  Úlast_published_atrˆ   r:   rG   rm   rœ   r   rž   rŸ   r/   r/   r0   r    ©  s*    

 ÿþþz"TestAgingPagesView.test_csv_exportc                 C   sà   |   ¡  tjrd| j_nd| j_| j ¡  | jddid}|  |jd¡ | 	¡ }t
t|ƒdd }d	d
„ |jD ƒ}|  |d dddddg¡ |  |d ddt ddddd¡ddg¡ |  t|ƒd¡ |  |d jtƒ  ¡ ¡ d S )Nr“   r•   r–   r¡   r˜   r`   r¢   r¤   c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r/   r¥   r¦   r/   r/   r0   rC   Ñ  s     zBTestAgingPagesView.test_xlsx_export.<locals>.<listcomp>.<listcomp>r/   r¨   r/   r/   r0   rC   Ñ  s     z7TestAgingPagesView.test_xlsx_export.<locals>.<listcomp>r   rª   r«   úLast published atúLast published byr¬   rg   ú!Welcome to your new Wagtail site!úlive + draftr­   r®   r°   r   r>   ÚC2)r  r   rš   r  r  rˆ   r:   rG   rm   rœ   r   r   r±   r²   rH   r³   r   r´   r/   r/   r0   rµ   Ã  s2    

þûþ
z#TestAgingPagesView.test_xlsx_exportc                 C   sî   | j  ¡  ¡  tjrd| j _nd| j _d| j _| j  ¡  | jddid}|  	|j
d¡ | ¡ }tt|ƒdd	 }d
d„ |jD ƒ}|  	|d dddddg¡ |  	|d ddt ddddd¡ddg¡ |  	t|ƒd¡ |  	|d jtƒ  ¡ ¡ dS )z”
        Test that the xlsx export works when a page has no 'published_by' set.
        See https://github.com/wagtail/wagtail/issues/10821
        r“   r•   Nr–   r¡   r˜   r`   r¢   r¤   c                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r/   r¥   r¦   r/   r/   r0   rC   û  s     zWTestAgingPagesView.test_xlsx_export_without_published_by.<locals>.<listcomp>.<listcomp>r/   r¨   r/   r/   r0   rC   û  s     zLTestAgingPagesView.test_xlsx_export_without_published_by.<locals>.<listcomp>r   rª   r«   r  r   r¬   rg   r!  r"  r­   r®   r   r>   r#  )r  r  r  r   rš   r  Zlast_published_byrˆ   r:   rG   rm   rœ   r   r   r±   r²   rH   r³   r   r´   r/   r/   r0   Ú%test_xlsx_export_without_published_byå  s4    

þûþ
z8TestAgingPagesView.test_xlsx_export_without_published_byc                 C   sP   | j dddd}d|j› d}| j ¡ j|d | ¡  |  ¡ }|  ||¡ d S )NÚtempztemp@user.comZtempuser)rÆ   rÄ   zuser z
 (deleted)rë   )Zcreate_superuserry   r  r  r  Údeleter:   rq   )r6   Z	temp_userZexpected_deleted_stringrz   r/   r/   r0   Ú/test_report_renders_when_page_publisher_deleted  s      ÿzBTestAgingPagesView.test_report_renders_when_page_publisher_deletedN)rY   rZ   r[   r&   r7   r  r{   r  r  r    rµ   r$  r'  r/   r/   r/   r0   r  k  s   "*r  c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚTestAgingPagesViewPermissionsr  c                 C   s   |   ¡ | _d S r1   r2   r5   r/   r/   r0   r7     s    z#TestAgingPagesViewPermissions.setUpc                 C   s   |   ¡ }|  |jd¡ d S ©Nr`   ©r:   rG   rm   r   r/   r/   r0   r{   "  s    z)TestAgingPagesViewPermissions.test_simplec                 C   sr   t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ |  
¡ }|  |jd¡ |  |tdƒ¡ d S ©	Nr|   r}   Fr~   r   r€   r  rŽ   ©r   rs   r†   r4   r‡   rˆ   r‰   rŠ   r‹   r   r:   rG   rm   r   r   rŒ   r/   r/   r0   Útest_get_with_no_permission&  s    
 ÿÿz9TestAgingPagesViewPermissions.test_get_with_no_permissionc                 C   sz   t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ tjj|tj ¡ dd |  
¡ }|  |jd	¡ d S ©
Nr|   r}   Fr~   r   r€   rŠ   rƒ   r`   ©r   rs   r†   r4   r‡   rˆ   r‰   rŠ   r‹   r   r:   r   r   rt   rG   rm   rŒ   r/   r/   r0   r   6  s"    
 ÿÿýz?TestAgingPagesViewPermissions.test_get_with_minimal_permissionsN)rY   rZ   r[   r&   r7   r{   r-  r   r/   r/   r/   r0   r(    s
   r(  c                   @   s6   e Zd ZdgZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )ÚTestFilteredAgingPagesViewr·   r  c                 C   s.   |   ¡ | _tjjdd| _tjjdd| _d S )Nr  r  zabout-us)r3   r4   r   rs   r:   rÔ   Úaboutus_pager5   r/   r/   r0   r7   O  s    
z TestFilteredAgingPagesView.setUpc                 C   s€   | j ddid}|  |jd¡ |  || jj¡ |  || jj¡ | j ddid}|  |jd¡ |  || jj¡ |  || jj¡ d S )Nr¯   r8   r˜   r`   r¼   )r:   rG   rm   rq   rÔ   rT   r1  rw   r   r/   r/   r0   r¾   T  s    z.TestFilteredAgingPagesView.test_filter_by_livec                 C   s®   | j jjj}| jd|id}|  |jd¡ |  || j j¡ |  	|| j
j¡ |  |j¡}|  |d|¡ | | j› d¡}|  |¡ | d¡}|  |¡ |  | d¡t|ƒ¡ d S )Nrü   r˜   r`   z select[name='content_type']úoption[selected]rM   )r1  Úspecificrü   ry   r:   rG   rm   rq   rT   rw   rÔ   rr   rp   rO   rD   r*   rE   rx   )r6   Zct_pkrz   rK   Z	ct_selectÚselected_optionr/   r/   r0   Útest_filter_by_content_type`  s    
ÿ


z6TestFilteredAgingPagesView.test_filter_by_content_typec                 C   sX   t  ¡ | j_| j ¡  | jddid}|  |jd¡ |  || j	j
¡ |  || jj
¡ d S )Nr  z
2015-01-01r˜   r`   )r   rv   rÔ   r  rˆ   r:   rG   rm   rq   r1  rT   rw   r   r/   r/   r0   Ú test_filter_by_last_published_att  s    
z;TestFilteredAgingPagesView.test_filter_by_last_published_atN)	rY   rZ   r[   rÀ   r&   r7   r¾   r5  r6  r/   r/   r/   r0   r0  K  s   r0  c                   @   s   e Zd ZdZdZdS )Ú!TestFilteredAgingPagesResultsViewz(wagtailadmin_reports:aging_pages_resultsTNrÂ   r/   r/   r/   r0   r7  ~  s   r7  c                   @   sB   e Zd ZdgZdZdd„ Zedd„ ƒZdd„ Zd	d
„ Z	dd„ Z
dS )ÚPageTypesUsageReportViewTestr·   ú%wagtailadmin_reports:page_types_usagec                 C   s   |   ¡ | _d S r1   r2   r5   r/   r/   r0   r7   ‡  s    z"PageTypesUsageReportViewTest.setUpc                 C   s   | j › d| j› S )NÚ.rø   )rü   r/   r/   r0   Údisplay_nameŠ  s    z)PageTypesUsageReportViewTest.display_namec                 C   sj   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  dddœg|j¡ |  |j¡}|  |¡ |  |d¡ d S )Nr`   rb   z2wagtailadmin/reports/page_types_usage_results.htmlr#   zPage types usagerd   zPage types usage - Wagtail)	r:   rG   rm   ro   rS   rp   rr   rQ   rX   r½   r/   r/   r0   r{   Ž  s    þ
þ
z(PageTypesUsageReportViewTest.test_simplec                 C   sr   |   ¡ }tj t¡}|  |¡}|  ||¡ tj t¡}|  |¡}|  ||¡ tj t¡}|  |¡}|  	||¡ dS )z=Asserts that the correct models are included in the queryset.N)
r:   r   rs   rõ   r   r;  rq   r   r   rw   )r6   rz   Úevent_page_content_typeZ!event_page_content_type_full_nameÚsimple_page_content_typeZ"simple_page_content_type_full_nameZevent_page_speaker_content_typeZ)event_page_speaker_content_type_full_namer/   r/   r0   Útest_displays_only_page_typesž  s    

ÿÿz:PageTypesUsageReportViewTest.test_displays_only_page_typesc                 C   sp   t j t¡}|  |¡}tjjd|d ¡  |  ¡ }|  ||¡ tdd}t 	¡ j
|d |  ¡ }|  ||¡ dS )zXAsserts that the wagtailcore.Page model is included in the queryset if it has instances.rg   )Z	depth__gtrü   r   )rT   rk   N)r   rs   rõ   r   r;  Úfilterr&  r:   rw   Úget_first_root_noderu   rq   )r6   Zpage_content_typeZpage_content_type_full_namerz   r…   r/   r/   r0   Ú/test_displays_wagtailcore_page_if_has_instances±  s    

zLPageTypesUsageReportViewTest.test_displays_wagtailcore_page_if_has_instancesN)rY   rZ   r[   rÀ   r&   r7   Ústaticmethodr;  r{   r>  rA  r/   r/   r/   r0   r8  ƒ  s   
r8  c                       s,   e Zd Z‡ fdd„Zdd„ Zdd„ Z‡  ZS )Ú%PageTypesUsageReportViewQuerysetTestsc                    sþ   t ƒ  ¡  t ¡ | _tƒ  tdƒ¡| j_t	j
 ¡ | _t	j
jdd| _tddd| _tddd| _tddd| _t	 ¡ j| jd	 t	 ¡ j| jd	 t	 ¡ j| jd	 | j ¡  ¡  | j ¡  ¡  | j ¡  ¡  td
dddtj ¡ d| _t	 ¡ j| jd	 d S )Nr9  r  r  zSimple page AÚhello©rT   rp   zSimple page BzSimple page Crk   ú
Event PageÚpublicÚfooÚbar©rT   ZaudienceÚlocationZcostZ	date_from)r$   r7   r   ZPageTypesUsageReportViewÚviewr
   r:   r   Úrequestr   rs   rt   r  r  r   Úsimple_page_aÚsimple_page_bÚsimple_page_cr@  ru   r  r  r   r²   rò   rÖ   Ú
event_pager5   r-   r/   r0   r7   Ç  s0    

ÿûz+PageTypesUsageReportViewQuerysetTests.setUpc                 C   sŽ   | j  ¡ }t|jdddƒ}tj t¡}| |j	¡}tj t
¡}| |j	¡}|  ||k ¡ |  |j|j	djd¡ |  |j|j	djd¡ dS )z9Asserts that the queryset is ordered by page model count.ry   T)Zflat©ÚidrÎ   rg   N)rL  Úget_querysetÚlistZvalues_listr   rs   rõ   r   Úindexry   r   Z
assertTruerG   r:   r  )r6   r  Zqueryset_list_pksr=  Zsimple_page_positionr<  Zevent_page_positionr/   r/   r0   Útest_queryset_orderingä  s    
z<PageTypesUsageReportViewQuerysetTests.test_queryset_orderingc                 C   s~   | j  ¡ }| ¡  | j ¡ }| ¡  | j ¡ }| ¡  | j  ¡ }| ¡  | j | j ¡ ¡}| j  ¡  |  	|d j
j| j ¡ dS )z?Tests that the queryset correctly returns the last edited page.r   N)rN  r  r  rO  rP  rL  rÿ   rT  Zrefresh_from_dbrG   Úlast_edited_pager3  )r6   Úrevisionr  r/   r/   r0   Útest_queryset_last_edited_pageö  s    




zDPageTypesUsageReportViewQuerysetTests.test_queryset_last_edited_page)rY   rZ   r[   r7   rW  rZ  r]   r/   r/   r-   r0   rC  Æ  s   rC  Úen)ZLANGUAGE_CODEZWAGTAIL_I18N_ENABLEDc                   @   sH   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zed
ddgddd„ ƒZ	dS )ÚPageTypesReportFiltersTestsr9  c                 C   s,   |   ¡ | _t ¡ | _tjjdd\| _}d S )NÚfr)Úlanguage_code)r3   r4   r   Úget_defaultÚdefault_localers   Zget_or_createÚ	fr_locale)r6   Ú_r/   r/   r0   r7     s    

z!PageTypesReportFiltersTests.setUpc                 C   sð  t ddddtj ¡ d}tddd}t ¡ j|d	 t ¡ j|d	 | ¡  	¡  | ¡  	¡  | 
| j¡ | 
| j¡ d
|_| ¡ }| 	|¡ |  ¡ }dd„ |jd D ƒ}| tj t ¡j¡}| tj t¡j¡}|  |jd¡ |  |jd¡ |  |jj| j¡ |  |jj| j¡ |  d| jji¡}dd„ |jd D ƒ}| tj t ¡j¡}| tj t¡j¡}|  |jd¡ |  |jd¡ |  |jj| j¡ |  |jj| j¡ |  |j¡}| | j› d¡}	|  |	¡ |	 d¡}
|  |
¡ |  |
 d¡d¡ d S )NrF  rG  rH  rI  rJ  úSimple PagerD  rE  rk   z!Updated Simple Page English titlec                 S   s   i | ]}|j |“qS r/   rR  ©rA   rü   r/   r/   r0   Ú
<dictcomp>,  s   ÿ zEPageTypesReportFiltersTests.test_locale_filtering.<locals>.<dictcomp>rá   r>   Zpage_localec                 S   s   i | ]}|j |“qS r/   rR  rd  r/   r/   r0   re  ?  s   ÿ rg   z select[name='page_locale']r2  rM   r]  )r   r²   rò   rÖ   r   r   r@  ru   r  r  Zcopy_for_translationra  rT   r:   rã   r   rs   rõ   ry   rG   r  rX  Úlocaler`  r^  rr   rp   rD   r*   rE   )r6   rQ  Úsimple_pagerY  rz   Ú
page_typesÚevent_page_rowÚsimple_page_rowrK   Zlocale_selectr4  r/   r/   r0   Útest_locale_filtering  sb    û
þÿþÿ
ÿ


z1PageTypesReportFiltersTests.test_locale_filteringc                 C   s^   t j ¡ }|  | ¡ d¡ |  ¡ }|jd }|  d|jj	¡ |  d|j
 ¡ ¡ |  |j¡ dS )zJAsserts that the site filter is not displayed when there is only one site.rg   ÚfiltersÚsiteN)r   rs   ÚallrG   r  r:   rã   rI   ÚformÚfieldsrl  r
  ÚassertFalseZsites_filter_enabled)r6   Úsitesrz   Z	filtersetr/   r/   r0   Ú$test_site_filtering_with_single_siteZ  s    

z@PageTypesReportFiltersTests.test_site_filtering_with_single_sitec           	      C   s,  t  ¡ }tddddtj ¡ d}tddd}|j|d	 |j|d	 tj	j
d
|dd}|  tj	 ¡ d¡ |  ¡ }dd„ |jd D ƒ}| tj	 t¡j¡}| tj	 t¡j¡}|  |jd¡ |  |jd¡ |  d|jji¡}dd„ |jd D ƒ}| tj	 t¡j¡}|  |jd¡ |  tj	 t¡j|k¡ d S )NrF  rG  rH  rI  rJ  rc  rD  rE  rk   zexample.comF)ÚhostnameÚ	root_pageZis_default_siter>   c                 S   s   i | ]}|j |“qS r/   rR  rd  r/   r/   r0   re  |  s   ÿ zWPageTypesReportFiltersTests.test_site_filtering_with_multiple_sites.<locals>.<dictcomp>rá   rg   rm  c                 S   s   i | ]}|j |“qS r/   rR  rd  r/   r/   r0   re  ‹  s   ÿ )r   r@  r   r²   rò   rÖ   r   ru   r   rs   r†   rG   r  r:   rã   r   rõ   ry   ru  Úpathrq  )	r6   ru  rQ  rg  Zsimple_page_siterz   rh  ri  rj  r/   r/   r0   Ú'test_site_filtering_with_multiple_sitesg  sH    û  ÿþÿþÿzCPageTypesReportFiltersTests.test_site_filtering_with_multiple_sites©r[  ZEnglish©ÚdeZGerman©r]  ZFrench)ZWAGTAIL_CONTENT_LANGUAGESc                 C   s"   t  ¡ }dddg}|  ||¡ d S )Nrx  ry  r{  )r   Z_get_locale_choicesÚassertCountEqual)r6   ÚchoicesZexpected_choicesr/   r/   r0   Útest_get_locale_choices™  s    ýz3PageTypesReportFiltersTests.test_get_locale_choicesN)
rY   rZ   r[   r&   r7   rk  rs  rw  r   r~  r/   r/   r/   r0   r\    s   F2ýÿr\  c                   @   s   e Zd ZdZdZdS )Ú"PageTypesReportFiltersResultsTestsz-wagtailadmin_reports:page_types_usage_resultsTNrÂ   r/   r/   r/   r0   r  ¬  s   r  c                   @   s6   e Zd ZdgZdZdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú'TestPageTypesUsageReportViewPermissionsr·   r9  c                 C   s   |   ¡ }|  |jd¡ d S r)  r*  r   r/   r/   r0   r{   µ  s    z3TestPageTypesUsageReportViewPermissions.test_simplec                 C   sr   t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ |  
¡ }|  |jd¡ |  |tdƒ¡ d S r+  r,  rŒ   r/   r/   r0   r-  ¹  s    
 ÿÿzCTestPageTypesUsageReportViewPermissions.test_get_with_no_permissionc                 C   sz   t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ tjj|tj ¡ dd |  
¡ }|  |jd	¡ d S r.  r/  rŒ   r/   r/   r0   r   É  s"    
 ÿÿýzITestPageTypesUsageReportViewPermissions.test_get_with_minimal_permissionsc                 C   s4  t jjdd}d| j_| j ¡  | jj |¡ | jj t	jj
ddd¡ tj tdƒjdd	d
d¡ ¡ }tj tdƒjdd	d
d¡ ¡ }tjj||dd |  
¡ }|  |jd¡ td|jfd}| j|d|› d| ¡ › ddd | j|d| ¡ › ddd td|jfd}| j|d|› d| ¡ › ddd d S )Nr|   r}   Fr~   r   r€   r›   T)Z
nulls_lastrT   z-pkrÇ   rƒ   r`   zwagtailadmin_pages:edit)r  z<a href=ú>z</a>)rR   z<p>z</p>)r   rs   r†   r4   r‡   rˆ   r‰   rŠ   r‹   r   r:   r   Zorder_byr	   Údescrt   r   r   rG   rm   r   rS  rq   Zget_admin_display_titlerw   )r6   r„   Zlatest_edited_event_pageZlatest_edited_simple_pagerz   Zedit_event_page_urlZedit_simple_page_urlr/   r/   r0   Ú'test_get_with_page_specific_permissionsÝ  sd    
 ÿÿ  ÿ  ÿý ÿýý ÿýzOTestPageTypesUsageReportViewPermissions.test_get_with_page_specific_permissionsN)	rY   rZ   r[   rÀ   r&   r{   r-  r   rƒ  r/   r/   r/   r0   r€  ±  s   r€  )Fr²   Úior   Zunittestr   Zdjango.confr   Zdjango.conf.localer   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr   Zdjango.db.modelsr	   Zdjango.testr
   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utilsr   r   Z	freezegunr   Zopenpyxlr   Zwagtail.admin.views.mixinsr   Zwagtail.admin.views.reportsr   Z)wagtail.admin.views.reports.audit_loggingr   Zwagtail.modelsr   r   r   r   r   r   Zwagtail.test.testapp.modelsr   r   r   r   Zwagtail.test.utilsr   Z!wagtail.test.utils.template_testsr    Zwagtail.utils.deprecationr!   r"   r^   r¶   rÁ   rÃ   r  r	  r  r(  r0  r7  r8  rC  r\  r  r€  r/   r/   r/   r0   Ú<module>   s^    G S,   aÿ 2/3CE
 !