U
    {®Þh# ã                   @   sf  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
 d dlmZ d dlmZ d d	lmZ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  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+ 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ƒZ0G dd„ de+eƒZ1G dd„ de+eƒZ2G d d!„ d!e2ƒZ3G d"d#„ d#e+eƒZ4G d$d%„ d%e+eƒZ5G d&d'„ d'e+eƒZ6G d(d)„ d)e+eƒZ7G d*d+„ d+e)e+eƒZ8G d,d-„ d-e+eƒZ9G d.d/„ d/e+eƒZ:G d0d1„ d1e+eƒZ;G d2d3„ d3e+eƒZ<G d4d5„ d5e+eƒZ=G d6d7„ d7e+eƒZ>G d8d9„ d9e+eƒZ?G d:d;„ d;e+eƒZ@dS )<é    N)ÚBytesIO)Úsettings)Úquote)Úget_permission_codename)Ú
Permission)ÚContentType)ÚTestCase)ÚNoReverseMatchÚreverse)Údate_formatÚlocalize)Úescape)Ú
make_aware)Úload_workbook)Úhooks)ÚAdminURLFinder)Úlog)ÚModelLogEntry)ÚFeatureCompleteToyÚJSONStreamModelÚSearchTestModelÚVariousOnDeleteModel)ÚAdminTemplateTestUtils)ÚWagtailTestUtils)ÚRemovedInWagtail70Warningc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestModelViewSetGroupc                 C   s   |   ¡ | _d S ©N©ÚloginÚuser©Úself© r"   úw/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/admin/tests/viewsets/test_model_viewset.pyÚsetUp    s    zTestModelViewSetGroup.setUpc                 C   s²   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |tdƒ¡ |  tdƒd¡ |  |d¡ |  |tdƒ¡ |  tdƒd	¡ |  |d
¡ |  |tdƒ¡ |  tdƒd¡ d S )NÚwagtailadmin_homeéÈ   úE"name": "tests", "label": "Tests", "icon_name": "folder-open-inverse"úJson Stream Modelsústreammodel:indexú/admin/streammodel/úJSON MinMaxCount StreamModelúminmaxcount_streammodel:indexz/admin/minmaxcount-streammodel/úJSON BlockCounts StreamModelúblockcounts_streammodel:indexz/admin/blockcounts/streammodel/)ÚclientÚgetr
   ÚassertEqualÚstatus_codeÚassertContains©r!   Úresponser"   r"   r#   Útest_menu_items#   s*    þþþz%TestModelViewSetGroup.test_menu_itemsc                 C   sÖ   d| j _| j  ¡  tjjddd}tjjtj t¡t	dtj
ƒd}| j j ||¡ | j tdƒ¡}|  |d¡ |  |d	¡ |  |td
ƒ¡ |  td
ƒd¡ |  |d¡ |  |tdƒ¡ |  |d¡ |  |tdƒ¡ d S )NFÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenameÚview)Úcontent_typer:   r%   r'   r(   r)   r*   r+   r,   r-   r.   )r   Úis_superuserÚsaver   Úobjectsr0   r   Úget_for_modelr   r   Ú_metaÚuser_permissionsÚaddr/   r
   r3   r1   ÚassertNotContains)r!   Úadmin_permissionÚview_permissionr5   r"   r"   r#   Ú(test_menu_item_with_only_view_permission>   s.    
þ

þþz>TestModelViewSetGroup.test_menu_item_with_only_view_permissionN)Ú__name__Ú
__module__Ú__qualname__r$   r6   rG   r"   r"   r"   r#   r      s   r   c                   @   sT   e Zd Zdd„ Zedd„ ƒZddd„Zddd	„Zd
d„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestTemplateConfigurationc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   `   s    zTestTemplateConfiguration.setUpc                 C   s$   t jjdd| _tjjdd| _d S )Nú"[{"type": "text", "value": "foo"}]©ÚbodyúTest Toy©Úname)r   r?   ÚcreateÚdefaultr   Úcustom©Úclsr"   r"   r#   ÚsetUpTestDatac   s    ÿz'TestTemplateConfiguration.setUpTestDatar"   c                 C   s   t d|› |dS )Nzstreammodel:©Úargs©r
   ©r!   Ú	view_namerY   r"   r"   r#   Úget_default_urlj   s    z)TestTemplateConfiguration.get_default_urlc                 C   s   t d|› |dS )Nzfeature_complete_toy:rX   rZ   r[   r"   r"   r#   Úget_custom_urlm   s    z(TestTemplateConfiguration.get_custom_urlc              
   C   sˆ   t | jjƒ}g dfg dfg df|gdf|gdfdœ}| ¡ D ]F\}\}}| j|d( | j | j||d¡}|  ||¡ W 5 Q R X q<d S )	Nzwagtailadmin/generic/index.htmlz)wagtailadmin/generic/listing_results.htmlz wagtailadmin/generic/create.htmlzwagtailadmin/generic/edit.htmlz(wagtailadmin/generic/confirm_delete.html)ÚindexÚindex_resultsrC   ÚeditÚdelete©r\   rX   )	r   rS   ÚpkÚitemsÚsubTestr/   r0   r]   ÚassertTemplateUsed)r!   rd   Úcasesr\   rY   Útemplate_namer5   r"   r"   r#   Útest_default_templatesp   s*    þþþþþïz0TestTemplateConfiguration.test_default_templatesc              
   C   sœ   t | jjƒ}dg dfdg dfd|gdfd|gdfd	œ}| ¡ D ]X\}\}}}| j|d
8 | j | j||d¡}|  ||¡ | j	|ddd W 5 Q R X q>d S )Nr_   ztests/fctoy_index.htmlrC   z1customprefix/tests/featurecompletetoy/create.htmlra   zcustomprefix/tests/edit.htmlrb   z customprefix/confirm_delete.html)z!override with index_template_namezwith app label and model namezwith app labelz without app label and model name©ÚcaserX   z <p>Some extra custom content</p>T)Úhtml)
r   rT   rd   re   rf   r/   r0   r^   rg   r3   )r!   rd   rh   rl   r\   rY   ri   r5   r"   r"   r#   Útest_custom_template_lookups   s6    ýýýýð  ÿz6TestTemplateConfiguration.test_custom_template_lookupsc              
   C   sò   t | jjƒ}d|gdt| jƒfi}| ¡ D ]Â\}\}}}| j|d¢ | j | j||d¡}|  	|j
¡}| d¡}	|  |	¡ |  d |	jddd	¡ ¡ |¡ |	 d
¡}
|rÄ|  |
¡ |  |
j|¡ n
|  |
¡ |	 d¡}|  |¡ W 5 Q R X q*d S )Nrb   ÚDeleterc   rX   Úh1Ú TF)ÚstringÚ	recursiveÚspanúsvg use[href='#icon-media'])r   rT   rd   Ústrre   rf   r/   r0   r^   Úget_soupÚcontentÚ
select_oneÚassertIsNotNoner1   ÚjoinÚfind_allÚstriprr   ÚassertIsNone)r!   rd   rh   r\   rY   ÚtitleÚsubtitler5   Úsouprp   Zsubtitle_elÚiconr"   r"   r#   Ú>test_wagtail_admin_template_mixin_variables_with_legacy_header­   s*     ÿ

 ÿ



zXTestTemplateConfiguration.test_wagtail_admin_template_mixin_variables_with_legacy_headerc              
   C   sÚ   t | jjƒ}g dd fg ddf|gdt| jƒfdœ}| ¡ D ]š\}\}}}| j|dz | j | j||d¡}|  	|j
¡}| d¡}	|}
|r˜|› d	|› }
|  |	¡ |  |	jd
d|
¡ |	 d¡}|  |¡ W 5 Q R X q:d S )NúFeature complete toysZNewzFeature complete toyZEditing)r_   rC   ra   rc   rX   rp   z: T)r}   ru   )r   rT   rd   rv   re   rf   r/   r0   r^   rw   rx   ry   rz   r1   Zget_textr~   )r!   rd   rh   r\   rY   r   r€   r5   r   rp   Zexpected_h1r‚   r"   r"   r#   Ú+test_wagtail_admin_template_mixin_variablesÄ   s"    ý


zETestTemplateConfiguration.test_wagtail_admin_template_mixin_variablesN)r"   )r"   )rH   rI   rJ   r$   ÚclassmethodrW   r]   r^   rj   rn   rƒ   r…   r"   r"   r"   r#   rK   _   s   


 rK   c                   @   s(   e Zd Zdd„ Zedd„ ƒZdd„ ZdS )ÚTestCustomColumnsc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   Û   s    zTestCustomColumns.setUpc                 C   s.   t jjdd t jjdd t jjdd d S )NÚRacecarrP   ÚlevelÚLotso)r   r?   rR   rU   r"   r"   r#   rW   Þ   s    zTestCustomColumns.setUpTestDatac                 C   sð   t dƒ}| j |¡}|  |d¡ |  |d¡ |  |d¡ |  |j¡}| d¡}|  |¡ |  |j	 
¡ d¡ | d¡}|  |¡ |  |j	 
¡ d¡ | d	¡}|  |¡ |  |j	 
¡ d
¡ | d¡d }|  |j	 
¡ d¡ |  |d |› d¡ d S )Núfeature_complete_toy:indexrˆ   r‰   rŠ   ztd:has(svg.icon-help)ÚNonez,td:has(svg.icon-success.w-text-positive-100)ÚTruez*td:has(svg.icon-error.w-text-critical-100)ÚFalsezth aéÿÿÿÿZUpdatedÚhrefz?ordering=_updated_at)r
   r/   r0   r3   rw   rx   ry   rz   r1   Útextr}   Úselect)r!   Ú	index_urlr5   r   ÚhelpÚsuccessÚerrorZ
updated_atr"   r"   r#   Útest_list_displayä   s$    





z#TestCustomColumns.test_list_displayN)rH   rI   rJ   r$   r†   rW   r—   r"   r"   r"   r#   r‡   Ú   s   
r‡   c                   @   s^   e Zd ZddddœZdd„ Zddd	„Zed
d„ ƒZdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ ZdS )ÚTestListFilter)Úfeature_complete_toyÚrelease_dateúRelease date)Ú
fctoy_alt1Úname__icontainszName contains)ú
fctoy-alt2Úrelease_date__year__ltez*Release date year is less than or equal to)ÚlistÚdictZfilterset_classc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   
  s    zTestListFilter.setUpNc                 C   s   | j  t|› dƒ|¡S )Nz:index©r/   r0   r
   ©r!   Úurl_namespaceÚparamsr"   r"   r#   r0     s    zTestListFilter.getc                 C   s8   t jjdt ddd¡d t jjdt ddd¡d d S ©	NúBuzz LightyearéË  é   é   ©rQ   rš   ÚForkyiã  é   ©r   r?   rR   ÚdatetimeÚdaterU   r"   r"   r#   rW     s    þþzTestListFilter.setUpTestDatac           	   
   C   sÒ   t j ¡  ¡  | j ¡ D ]´\}\}}}| j|d” |  |¡}|  |d¡ |  	|d¡ |  	|d¡ |  	|d¡ |  
|j¡}| d|› d¡}|  |¡ |  |j ¡ |¡ | d|› ¡}|  |¡ W 5 Q R X qd S )	Nrk   ú-There are no feature complete toys to displayú)No feature complete toys match your queryr§   r¬   ú	label#id_ú-labelú	input#id_)r   r?   Úallrb   rh   re   rf   r0   r3   rD   rw   rx   ry   rz   r1   rr   r}   ©	r!   rl   r¤   ÚlookupÚ
label_textr5   r   ÚlabelÚinputr"   r"   r#   Útest_unfiltered_no_results  s(    
þþ
z)TestListFilter.test_unfiltered_no_resultsc           	   
   C   sÐ   | j  ¡ D ]À\}\}}}| j|d  |  |¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |j¡}| d|› d¡}|  	|¡ |  
|j ¡ |¡ | d	|› ¡}|  	|¡ W 5 Q R X q
d S )
Nrk   r§   r¬   úThere are 2 matchesr±   r²   r³   r´   rµ   )rh   re   rf   r0   r3   rD   rw   rx   ry   rz   r1   rr   r}   r·   r"   r"   r#   Útest_unfiltered_with_results2  s(    
þþ
z+TestListFilter.test_unfiltered_with_resultsc           	   
   C   sÜ   | j  ¡ D ]Ì\}\}}}| j|d¬ |  ||di¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |j¡}| d|› d¡}|  	|¡ |  
|j ¡ |¡ | d	|› ¡}|  	|¡ |  |j d
¡¡ W 5 Q R X q
d S )Nrk   rq   r§   r¬   r½   r²   r³   r´   rµ   Úvalue)rh   re   rf   r0   r3   rD   rw   rx   ry   rz   r1   rr   r}   ÚassertFalseÚattrsr·   r"   r"   r#   Útest_empty_filter_with_resultsI  s"    þ

z-TestListFilter.test_empty_filter_with_resultsc              
   C   sb  ddddœ}| j  ¡ D ]D\}\}}}| j|d" || }|  |||i¡}|  |d¡ |  |d¡ |  |d¡ |  |d	¡ |  |j¡}| d
|› d¡}	|  	|	¡ |  
|	j ¡ |¡ | d|› ¡}
|  	|
¡ |  
|
j d¡|¡ | d¡}|  	|¡ | d¡}|  	|¡ |j d¡ dd¡\}}|  
|t|› dƒ¡ |  |› d|› |¡ W 5 Q R X qd S )Nz
1999-09-09ÚWoodyZ1990©rš   r   rŸ   rk   r²   r§   r¬   r½   r³   r´   rµ   r¿   ú.w-active-filtersú.w-pill__removeúdata-w-swap-src-valueú?é   ú:index_resultsú=©rh   re   rf   r0   r3   rD   rw   rx   ry   rz   r1   rr   r}   rÁ   Úsplitr
   ZassertNotIn©r!   Úlookup_valuesrl   r¤   r¸   r¹   r¿   r5   r   rº   r»   Zactive_filtersÚclearÚurlr¥   r"   r"   r#   Útest_filtered_no_results]  s:    ýþ





z'TestListFilter.test_filtered_no_resultsc              
   C   sb  ddddœ}| j  ¡ D ]D\}\}}}| j|d" || }|  |||i¡}|  |d¡ |  |d¡ |  |d¡ |  |d	¡ |  |j¡}| d
|› d¡}	|  	|	¡ |  
|	j ¡ |¡ | d|› ¡}
|  	|
¡ |  
|
j d¡|¡ | d¡}|  	|¡ | d¡}|  	|¡ |j d¡ dd¡\}}|  
|t|› dƒ¡ |  |› d|› |¡ W 5 Q R X qd S )Nz
1995-11-19ZIghtyearZ2017rÄ   rk   r§   úThere is 1 matchr¬   r²   r³   r´   rµ   r¿   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÎ   r"   r"   r#   Útest_filtered_with_results€  s:    ýþ





z)TestListFilter.test_filtered_with_results)N)rH   rI   rJ   rh   r$   r0   r†   rW   r¼   r¾   rÂ   rÒ   rÔ   r"   r"   r"   r#   r˜   ÿ   s   ý



#r˜   c                   @   sh   e Zd ZdZdddœZdd„ Zedd„ ƒZd	d
„ Zddd„Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSearchIndexViewr_   )r™   rš   )rž   rŸ   )rS   Nc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   ­  s    zTestSearchIndexView.setUpc                 C   s8   t jjdt ddd¡d t jjdt ddd¡d d S r¦   r®   rU   r"   r"   r#   rW   °  s    þþz!TestSearchIndexView.setUpTestDatac                 C   s8   |   |j¡}| d¡}|  |¡ |  |j d¡|¡ d S )Nú
input#id_qr¿   )rw   rx   ry   rz   r1   rÁ   r0   )r!   r5   Úsearch_qr   r»   r"   r"   r#   ÚassertInputRendered»  s    

z'TestSearchIndexView.assertInputRenderedNc                 C   s   | j  t|› d| j› ƒ|¡S )Nú:)r/   r0   r
   Úurl_namer£   r"   r"   r#   r0   Á  s    zTestSearchIndexView.getc                 C   sX   |   dddi¡}|  |d¡ |  |d¡ |  |d¡ |  |j¡}| d¡}|  |¡ d S )Nrœ   ÚqÚorkr¬   r§   r½   rÖ   )r0   r3   rD   rw   rx   ry   r~   )r!   r5   r   r»   r"   r"   r#   Útest_search_disabledÄ  s    
z(TestSearchIndexView.test_search_disabledc              
   C   st   | j  ¡ D ]d\}\}}| j|dF |  |ddi¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ W 5 Q R X q
d S )N©ÚbackendrÛ   rÃ   r²   r§   r¬   ©rh   re   rf   r0   r3   rD   rØ   ©r!   rß   r¤   Ú_r5   r"   r"   r#   Útest_search_no_resultsÍ  s    þz*TestSearchIndexView.test_search_no_resultsc              
   C   st   | j  ¡ D ]d\}\}}| j|dF |  |ddi¡}|  |d¡ |  |d¡ |  |d¡ |  |d¡ W 5 Q R X q
d S )NrÞ   rÛ   rÜ   r¬   r§   rÓ   rà   rá   r"   r"   r#   Útest_search_with_resultsÙ  s    z,TestSearchIndexView.test_search_with_resultsc              
   C   sŠ   dddœ}| j  ¡ D ]p\}\}}| j|dR || }|  |dd||i¡}|  |d¡ |  |d¡ |  |d	¡ |  |d¡ W 5 Q R X qd S )
Nú
2019-06-11Ú2023©rš   rŸ   rÞ   rÛ   rÃ   r²   r§   r¬   rà   ©r!   rÏ   rß   r¤   r¸   r¿   r5   r"   r"   r#   Ú!test_filtered_searched_no_resultsâ  s    þþz5TestSearchIndexView.test_filtered_searched_no_resultsc              
   C   sŠ   dddœ}| j  ¡ D ]p\}\}}| j|dR || }|  |dd||i¡}|  |d¡ |  |d¡ |  |d	¡ |  |d¡ W 5 Q R X qd S )
Nrå   ræ   rç   rÞ   rÛ   rÜ   r¬   r§   rÓ   rà   rè   r"   r"   r#   Ú#test_filtered_searched_with_resultsó  s    þz7TestSearchIndexView.test_filtered_searched_with_results)N)rH   rI   rJ   rÚ   rh   r$   r†   rW   rØ   r0   rÝ   rã   rä   ré   rê   r"   r"   r"   r#   rÕ   ¤  s   ü


		rÕ   c                   @   s   e Zd ZdZdd„ ZdS )ÚTestSearchIndexResultsViewr`   c                 C   s   d S r   r"   )r!   r5   r×   r"   r"   r#   rØ     s    z.TestSearchIndexResultsView.assertInputRenderedN)rH   rI   rJ   rÚ   rØ   r"   r"   r"   r#   rë     s   rë   c                   @   s@   e Zd Zedd„ ƒZdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestSearchFieldsc                 C   s2   t dddt dddt dddg}t j |¡ d S )NúHello WorldzThis one is classic)r   rN   úHello AnimezWe love anime (opinions vary)ÚFoodzI like food, do you?)r   r?   Úbulk_create©rV   r?   r"   r"   r#   rW     s
    


ýzTestSearchFields.setUpTestDatac                 C   s   |   ¡  d S r   )r   r    r"   r"   r#   r$     s    zTestSearchFields.setUpc                 C   s   | j  tdƒd|i¡S )Nzsearchtest:indexrÛ   r¢   )r!   rÛ   r"   r"   r#   r0     s    zTestSearchFields.getc                 C   s@   |   d¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )NZIkEr&   rí   rî   rï   )r0   r1   r2   rD   r3   r4   r"   r"   r#   Útest_single_result_with_body  s
    
z-TestSearchFields.test_single_result_with_bodyc                 C   s@   |   d¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )NZELlor&   rí   rî   rï   )r0   r1   r2   r3   rD   r4   r"   r"   r#   Ú test_multiple_results_with_title!  s
    
z1TestSearchFields.test_multiple_results_with_titlec                 C   s@   |   d¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ d S )NzAbra Kadabrar&   rí   rî   rï   )r0   r1   r2   rD   r4   r"   r"   r#   Útest_no_results(  s
    
z TestSearchFields.test_no_resultsN)
rH   rI   rJ   r†   rW   r$   r0   rò   ró   rô   r"   r"   r"   r#   rì   
  s   
rì   c                   @   sX   e Zd Zdd„ Ze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 )ÚTestListExportc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   1  s    zTestListExport.setUpc                 C   sR   t jjdt ddd¡d t jjdt ddd	¡d t jjd
t ddd	¡d d S )Nrˆ   r¨   r©   rª   r«   ÚLEVELéÚ  r­   é   ÚCatsor®   rU   r"   r"   r#   rW   4  s    þþþzTestListExport.setUpTestDatac                 C   s\   t dƒ}| j |¡}|  |j¡}| d|› d¡}|  |¡ | d|› d¡}|  |¡ d S )Núfctoy_alt1:indexúa[href='ú?export=csv']ú?export=xlsx'])r
   r/   r0   rw   rx   ry   r~   ©r!   r“   r5   r   Zcsv_linkZ	xlsx_linkr"   r"   r#   Útest_export_disabledC  s    
z#TestListExport.test_export_disabledc                 C   s€   t dƒ}| j |¡}|  |j¡}| d|› d¡}|  |¡ |  |j 	¡ d¡ | d|› d¡}|  |¡ |  |j 	¡ d¡ d S )Nr‹   rû   rü   úDownload CSVrý   úDownload XLSX©
r
   r/   r0   rw   rx   ry   rz   r1   r‘   r}   rþ   r"   r"   r#   Ú(test_get_not_export_shows_export_buttonsM  s    

z7TestListExport.test_get_not_export_shows_export_buttonsc                 C   s†   t dƒ}| j |ddi¡}|  |j¡}| d|› d¡}|  |¡ |  |j 	¡ d¡ | d|› d¡}|  |¡ |  |j 	¡ d¡ d S )	Nr‹   rš   ú
2010-06-18rû   z%?release_date=2010-06-18&export=csv']r   z&?release_date=2010-06-18&export=xlsx']r  r  rþ   r"   r"   r#   Ú3test_get_filtered_shows_export_buttons_with_filtersY  s    
ÿ

ÿ
zBTestListExport.test_get_filtered_shows_export_buttons_with_filtersc                 C   s¤   t dƒ}| j |ddi¡}|  |jd¡ |  | d¡d¡ | ¡  ¡  ¡  d¡}|  |d d	¡ |  |d
 d¡ |  |d d¡ |  |d d¡ |  t	|ƒd¡ d S )Nr‹   ÚexportÚcsvr&   úContent-Dispositionú0attachment; filename="feature-complete-toys.csv"ú
r   úName,Launch date,Is coolrÉ   úCatso,2010-06-18,Falseé   úLEVEL,2010-06-18,Trueé   zRacecar,1995-11-19,é   ©
r
   r/   r0   r1   r2   ÚgetvalueÚdecoder}   rÍ   Úlen©r!   r“   r5   Z
data_linesr"   r"   r#   Útest_csv_exporti  s    þzTestListExport.test_csv_exportc                 C   s–   t dƒ}| j |dddœ¡}|  |jd¡ |  | d¡d¡ | ¡  ¡  ¡  d¡}|  |d	 d
¡ |  |d d¡ |  |d d¡ |  t	|ƒd¡ d S )Nr‹   r  r  ©rš   r  r&   r  r	  r
  r   r  rÉ   r  r  r  r  r  r  r"   r"   r#   Útest_csv_export_filteredz  s    þþz'TestListExport.test_csv_export_filteredc              	   C   sì   t dƒ}| j |ddi¡}|  |jd¡ |  | d¡d¡ | ¡ }tt|ƒdj}dd	„ |j	D ƒ}|  |d
 dddg¡ |  |d dt
 ddd¡dg¡ |  |d dt
 ddd¡dg¡ |  |d dt
 ddd¡d g¡ |  t|ƒd¡ d S )Nr‹   r  Úxlsxr&   r  ú1attachment; filename="feature-complete-toys.xlsx"©Úfilenamec                 S   s   g | ]}d d„ |D ƒ‘qS )c                 S   s   g | ]
}|j ‘qS r"   ©r¿   ©Ú.0Úcellr"   r"   r#   Ú
<listcomp>™  s     z>TestListExport.test_xlsx_export.<locals>.<listcomp>.<listcomp>r"   ©r  Úrowr"   r"   r#   r!  ™  s     z3TestListExport.test_xlsx_export.<locals>.<listcomp>r   ÚNameúLaunch dateúIs coolrÉ   rù   r÷   r­   rø   Fr  rö   Tr  rˆ   r¨   r©   rª   r  ©r
   r/   r0   r1   r2   r  r   r   ZactiveÚrowsr¯   r°   r  ©r!   r“   r5   Zworkbook_dataZ	worksheetZ
cell_arrayr"   r"   r#   Útest_xlsx_export  s    þ   zTestListExport.test_xlsx_exportc              	   C   sÎ   t dƒ}| j |dddœ¡}|  |jd¡ |  | d¡d¡ | ¡ }tt|ƒdj}d	d
„ |j	D ƒ}|  |d dddg¡ |  |d dt
 ddd¡dg¡ |  |d dt
 ddd¡dg¡ |  t|ƒd¡ 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"   r#   r!  ¯  s     zGTestListExport.test_xlsx_export_filtered.<locals>.<listcomp>.<listcomp>r"   r"  r"   r"   r#   r!  ¯  s     z<TestListExport.test_xlsx_export_filtered.<locals>.<listcomp>r   r$  r%  r&  rÉ   rù   r÷   r­   rø   Fr  rö   Tr  r'  r)  r"   r"   r#   Útest_xlsx_export_filtered   s"    þþ  z(TestListExport.test_xlsx_export_filteredN)rH   rI   rJ   r$   r†   rW   rÿ   r  r  r  r  r*  r+  r"   r"   r"   r#   rõ   0  s   

rõ   c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
ÚTestPaginationc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   ·  s    zTestPagination.setUpc                 C   s"   dd„ t dƒD ƒ}tj |¡ d S )Nc                 S   s   g | ]}t d |› d‘qS )zFrisbee rP   )r   )r  Úir"   r"   r#   r!  ¼  s     z0TestPagination.setUpTestData.<locals>.<listcomp>é    )Úranger   r?   rð   rñ   r"   r"   r#   rW   º  s    zTestPagination.setUpTestDatac                 C   sV   t dƒ}| j |¡}|  tj ¡  ¡ d¡ |  |d¡ |  |d¡ |  ||d ¡ d S )Nrú   r.  úPage 1 of 2ÚNextú?p=2©	r
   r/   r0   r1   r   r?   r¶   Úcountr3   ©r!   Zlist_urlr5   r"   r"   r#   Útest_default_list_pagination¿  s    z+TestPagination.test_default_list_paginationc                 C   sV   t dƒ}| j |¡}|  tj ¡  ¡ d¡ |  |d¡ |  |d¡ |  ||d ¡ d S )Nr‹   r.  zPage 1 of 7r1  r2  r3  r5  r"   r"   r#   Útest_custom_list_paginationÉ  s    z*TestPagination.test_custom_list_paginationN)rH   rI   rJ   r$   r†   rW   r6  r7  r"   r"   r"   r#   r,  ¶  s
   

r,  c                   @   s@   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dS )ÚTestOrderingc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   Õ  s    zTestOrdering.setUpc                 C   s<   t dddt dddt dddt dd	dg}t j |¡ d S )
NÚ
CCCCCCCCCCÚ1)rQ   ZstridÚ
AAAAAAAAAAÚ2Ú
DDDDDDDDDDÚ3Ú
BBBBBBBBBBÚ4)r   r?   rð   rñ   r"   r"   r#   rW   Ø  s    



üzTestOrdering.setUpTestDatac                 C   sF   | j  tdƒ¡}|  tjj¡ |  dd„ |jd D ƒddddg¡ d S )	Nrú   c                 S   s   g | ]
}|j ‘qS r"   rP   ©r  Úobjr"   r"   r#   r!  ç  s     z3TestOrdering.test_default_order.<locals>.<listcomp>Úobject_listr?  r=  r;  r9  ©	r/   r0   r
   rÀ   r   rA   Zorderingr1   Úcontextr4   r"   r"   r#   Útest_default_orderâ  s    üþzTestOrdering.test_default_orderc                 C   sJ   | j  tdƒd ¡}|  tjj¡ |  dd„ |jd D ƒdddd	g¡ d S )
Núfctoy-alt3:indexz?ordering=-namec                 S   s   g | ]
}|j ‘qS r"   rP   rA  r"   r"   r#   r!  ô  s     zBTestOrdering.test_custom_order_from_query_args.<locals>.<listcomp>rC  r=  r9  r?  r;  rD  r4   r"   r"   r#   Ú!test_custom_order_from_query_argsð  s    üþz.TestOrdering.test_custom_order_from_query_argsc                 C   sF   | j  tdƒ¡}|  tjj¡ |  dd„ |jd D ƒddddg¡ d S )	Nr‹   c                 S   s   g | ]
}|j ‘qS r"   rP   rA  r"   r"   r#   r!    s     z<TestOrdering.test_custom_order_from_view.<locals>.<listcomp>rC  r;  r?  r9  r=  rD  r4   r"   r"   r#   Útest_custom_order_from_viewý  s    üþz(TestOrdering.test_custom_order_from_viewc                 C   sF   | j  tdƒ¡}|  tjj¡ |  dd„ |jd D ƒddddg¡ d S )	NrG  c                 S   s   g | ]
}|j ‘qS r"   rP   rA  r"   r"   r#   r!    s     zDTestOrdering.test_custom_order_from_from_viewset.<locals>.<listcomp>rC  r9  r;  r=  r?  rD  r4   r"   r"   r#   Ú#test_custom_order_from_from_viewset  s    üþz0TestOrdering.test_custom_order_from_from_viewsetN)
rH   rI   rJ   r$   r†   rW   rF  rH  rI  rJ  r"   r"   r"   r#   r8  Ô  s   
	r8  c                   @   sh   e Zd Zdd„ Ze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 )ÚTestBreadcrumbsc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$     s    zTestBreadcrumbs.setUpc                 C   s   t jjdd| _d S ©NrO   rP   ©r   r?   rR   ÚobjectrU   r"   r"   r#   rW     s    zTestBreadcrumbs.setUpTestDatac                 C   s.   | j  tdƒ¡}dddœg}|  ||j¡ d S )Nr‹   rq   r„   ©rÑ   rº   ©r/   r0   r
   ÚassertBreadcrumbsItemsRenderedrx   ©r!   r5   re   r"   r"   r#   Útest_index_view"  s    þÿzTestBreadcrumbs.test_index_viewc                 C   s:   | j  tdƒ¡}tdƒddœdddœg}|  ||j¡ d S )Núfeature_complete_toy:addr‹   r„   rO  rq   zNew: Feature complete toyrP  rR  r"   r"   r#   Útest_add_view,  s    þþû
zTestBreadcrumbs.test_add_viewc                 C   sR   t dt| jjƒfd}| j |¡}t dƒddœdt| jƒdœg}|  ||j¡ d S )Núfeature_complete_toy:editrX   r‹   r„   rO  rq   ©	r
   r   rN  rd   r/   r0   rv   rQ  rx   )r!   Úedit_urlr5   re   r"   r"   r#   Útest_edit_view:  s    þþû
zTestBreadcrumbs.test_edit_viewc                 C   s2   t dt| jjƒfd}| j |¡}|  |j¡ d S )Núfeature_complete_toy:deleterX   )r
   r   rN  rd   r/   r0   ZassertBreadcrumbsNotRenderedrx   )r!   Ú
delete_urlr5   r"   r"   r#   Útest_delete_viewI  s    þz TestBreadcrumbs.test_delete_viewc                 C   st   t dt| jjƒfd}| j |¡}t dƒddœt dt| jjƒfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Núfeature_complete_toy:historyrX   r‹   r„   rO  rV  rq   ZHistory©rÑ   rº   ZsublabelrW  )r!   Úhistory_urlr5   re   r"   r"   r#   Útest_history_viewQ  s(    þþ ÿüýõz!TestBreadcrumbs.test_history_viewc                 C   sf   t dƒD ]}t| jd| jd qtdt| jjƒfd}| j |¡}|  	|d¡ |  	|d|› d¡ d S )	Né   úwagtail.edit)ÚinstanceÚactionr   r]  rX   r0  ú	<a href="ú?p=2">)
r/  r   rN  r   r
   r   rd   r/   r0   r3   )r!   r-  r_  r5   r"   r"   r#   Útest_history_view_paginationj  s    þz,TestBreadcrumbs.test_history_view_paginationc                 C   st   t dt| jjƒfd}| j |¡}t dƒddœt dt| jjƒfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Núfeature_complete_toy:usagerX   r‹   r„   rO  rV  rq   ÚUsager^  rW  )r!   Ú	usage_urlr5   re   r"   r"   r#   Útest_usage_viewv  s(    þþ ÿüýõzTestBreadcrumbs.test_usage_viewc                 C   sl   t dƒD ]}tjjd|› | jd qtdt| jjƒfd}| j 	|¡}|  
|d¡ |  
|d|› d¡ d S )	Nra  zToybox ©r‘   Zcascading_toyrh  rX   r0  re  rf  )r/  r   r?   rR   rN  r
   r   rd   r/   r0   r3   )r!   r-  rj  r5   r"   r"   r#   Útest_usage_view_pagination  s     ÿþz*TestBreadcrumbs.test_usage_view_paginationc                 C   st   t dt| jjƒfd}| j |¡}t dƒddœt dt| jjƒfdt| jƒdœddt| jƒd	œg}|  ||j¡ d S )
Núfeature_complete_toy:inspectrX   r‹   r„   rO  rV  rq   ÚInspectr^  rW  )r!   Zinspect_urlr5   re   r"   r"   r#   Útest_inspect_view  s(    þþ ÿüýõz!TestBreadcrumbs.test_inspect_viewN)rH   rI   rJ   r$   r†   rW   rS  rU  rY  r\  r`  rg  rk  rm  rp  r"   r"   r"   r#   rK    s   

rK  c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
ÚTestLegacyPatternsc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   º  s    zTestLegacyPatterns.setUpc                 C   s   t jjdd| _d S )NrL   rM   )r   r?   rR   rN  rU   r"   r"   r#   rW   ½  s    ÿz TestLegacyPatterns.setUpTestDatac              	   C   s\   t dt| jjƒfd}d}|  td¡ | j |¡}W 5 Q R X |  |d¡ |  	||d¡ d S )Nzstreammodel:editrX   z/admin/streammodel/1/zL`/<pk>/` edit view URL pattern has been deprecated in favour of /edit/<pk>/.z/admin/streammodel/edit/1/é-  ©
r
   r   rN  rd   ZassertWarnsRegexr   r/   r0   r1   ÚassertRedirects)r!   rX  Zlegacy_edit_urlr5   r"   r"   r#   Útest_legacy_editÃ  s    þz#TestLegacyPatterns.test_legacy_editc              	   C   s\   t dt| jjƒfd}d}|  td¡ | j |¡}W 5 Q R X |  |d¡ |  	||d¡ d S )Nzstreammodel:deleterX   z/admin/streammodel/1/delete/zW`/<pk>/delete/` delete view URL pattern has been deprecated in favour of /delete/<pk>/.z/admin/streammodel/delete/1/rr  rs  )r!   r[  Zlegacy_delete_urlr5   r"   r"   r#   Útest_legacy_deleteÎ  s    þz%TestLegacyPatterns.test_legacy_deleteN)rH   rI   rJ   r$   r†   rW   ru  rv  r"   r"   r"   r#   rq  ·  s
   
rq  c                   @   sX   e Zd Ze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 )ÚTestHistoryViewc                 C   sÌ   |   ¡ | _tjjdd| _tdt| jjƒfd| _	t
j t¡}t ddddd	d
¡| _t dddddd
¡| _tjrˆt| jƒ| _t| jƒ| _tjj|dd| j| j| jjd tjj|dd| j| j| jjd d S )NÚBuzzrP   r]  rX   iå  é	   é   é
   rÉ   r   iæ  é   é   é"   z	Test Buzzúwagtail.create)r<   rº   rd  r   Ú	timestampZ	object_idzTest Buzz Updatedrb  )Úcreate_test_userr   r   r?   rR   rN  r
   r   rd   rÑ   r   r@   r¯   Útimestamp_1Útimestamp_2r   ZUSE_TZr   r   )rV   r<   r"   r"   r#   rW   Û  s8    
þúúzTestHistoryView.setUpTestDatac                 C   s   |   | j¡ d S r   r   r    r"   r"   r#   r$   û  s    zTestHistoryView.setUpc                 C   s  dt | jƒt| jdƒfdt | jƒt| jdƒff}| j | j¡}|  |j	¡}| 
d¡}|  |jd¡ |  t|ƒd¡ g }|D ]p}g }| 
d¡}|  t|ƒd¡ | |d	 j ¡ ¡ | |d
 j ¡ ¡ | |d  d¡j d¡¡ | |¡ qzt||ƒD ]\}	}
|  |	|
¡ qöd S )NÚEditedÚcÚCreatedú#listing-results tbody trr&   r  Útdr  r   rÉ   Útimer¯   )rv   r   r   rƒ  r‚  r/   r0   rÑ   rw   rx   r’   r1   r2   r  Úappendr‘   r}   ry   rÁ   ÚzipZassertSequenceEqual)r!   Úexpectedr5   r   r(  Zrendered_rowsr#  ÚcellsÚtdsZrendered_rowZexpected_rowr"   r"   r#   Útest_simpleþ  s&    þ

zTestHistoryView.test_simplec                 C   s°  | j  | j¡}|  |jd¡ |  |j¡}| d¡}|  t|ƒd¡ |  dd„ |D ƒddh¡ | 	d¡}|  
|¡ | j  | jd	di¡}|  |jd¡ |  |j¡}| d
¡}|  t|ƒd¡ |  |d  	d¡j ¡ d¡ | j  | jd	di¡}|  |jd¡ |  |j¡}| d
¡}| 	d¡}|  |j ¡ d¡ |  t|ƒd¡ |  |d  	d¡j ¡ d¡ | 	d¡}|  |j ¡ d¡ | j  | jd	ddgi¡}|  |jd¡ |  t|jd ƒd¡ d S )Nr&   z%input[name="action"][type="checkbox"]r  c                 S   s   h | ]}|j  d ¡’qS r  ©rÁ   r0   ©r  Úoptionr"   r"   r#   Ú	<setcomp>  s     z5TestHistoryView.test_action_filter.<locals>.<setcomp>r  rb  zh2[role="alert"]rd  r‡  rÉ   r   rˆ  r„  rÓ   r†  rC  )r/   r0   rÑ   r1   r2   rw   rx   r’   r  ry   r~   r‘   r}   rr   rE  )r!   r5   r   ÚoptionsÚheadingr(  r"   r"   r#   Útest_action_filter  sB    
þ






þz"TestHistoryView.test_action_filterc                 C   s„  |   d¡ |  d¡}tjjdd}t|dd|d |   d¡}t| jd	d|d | j | j	¡}|  
|jd
¡ |  |j¡}| d¡}|  
t|ƒd¡ |  
dd„ |D ƒt| jjƒt|jƒh¡ | j | j	dt| jjƒi¡}|  
|jd
¡ |  
t|jd ƒd¡ | j | j	dt|jƒi¡}|  
|jd
¡ |  
t|jd ƒd¡ | j | j	dt| jjƒt|jƒgi¡}|  
|jd
¡ |  
t|jd ƒd¡ d S )NZno_powerÚ	has_powerrÃ   rP   r  T©rc  rd  Zcontent_changedr   Úpreviously_has_powerrb  r&   z#input[name="user"][type="checkbox"]r  c                 S   s   h | ]}|j  d ¡’qS r  r  r‘  r"   r"   r#   r“  d  s     z3TestHistoryView.test_user_filter.<locals>.<setcomp>r   rC  rÉ   r  )Úcreate_userZcreate_superuserr   r?   rR   r   rN  r/   r0   rÑ   r1   r2   rw   rx   r’   r  rv   r   rd   rE  )r!   r—  Z	other_objr™  r5   r   r”  r"   r"   r#   Útest_user_filterC  sJ    

ü	
ü
þþz TestHistoryView.test_user_filterc                 C   s€   | j  | jddi¡}|  |j¡}| d¡}| d¡}| d¡}|  |jd¡ |  |¡ |  	|¡ |  |¡ |  |j
 ¡ d¡ d S )NZtimestamp_toz
2020-01-01ú#listing-resultsú#listing-results tableÚpr&   z No log entries match your query.)r/   r0   rÑ   rw   rx   ry   r1   r2   rz   r~   r‘   r}   )r!   r5   r   ÚresultsÚtablerž  r"   r"   r#   rÒ   x  s    





z(TestHistoryView.test_filtered_no_resultsc           	      C   sÐ   t j ¡  ¡  | j | j¡}|  |j¡}| 	d¡}| 	d¡}|  
|jd¡ |  |¡ |  
|j ¡ d¡ |  |¡ | d¡}|  
t|ƒd¡ | d¡}|  
t|ƒd¡ | 	d¡}|  |¡ | 	d	¡}|  |¡ d S )
Nrœ  r  r&   z$There are no log entries to display.zinput[name="action"]r   zinput[name="user"]zinput[name="timestamp_to"]zinput[name="timestamp_from"])r   r?   r¶   rb   r/   r0   rÑ   rw   rx   ry   r1   r2   rz   r‘   r}   r~   r’   r  )	r!   r5   r   rŸ  r   Zaction_inputsZuser_inputsZtimestamp_before_inputZtimestamp_after_inputr"   r"   r#   Ú
test_empty„  s"    








zTestHistoryView.test_emptyc                 C   sZ   t dt| jjƒfd}| j |¡}|  |j¡}| d¡}|j	dd| j
id}|  |¡ d S )NrV  rX   z.w-slim-headerÚar   ©rÁ   ©r
   r   rN  rd   r/   r0   rw   rx   ry   ÚfindrÑ   rz   )r!   rX  r5   r   ÚheaderZhistory_linkr"   r"   r#   Ú$test_edit_view_links_to_history_viewœ  s    
z4TestHistoryView.test_edit_view_links_to_history_viewc                 C   sP   |   d¡}|j}t| jdd|d | ¡  | j | j¡}|  |d|› d¡ d S )NÚto_be_deletedrb  Tr˜  zuser z
 (deleted))	rš  rd   r   rN  rb   r/   r0   rÑ   r3   )r!   r¨  Zuser_idr5   r"   r"   r#   Útest_deleted_user¤  s    
üz!TestHistoryView.test_deleted_userN)rH   rI   rJ   r†   rW   r$   r  r–  r›  rÒ   r¡  r§  r©  r"   r"   r"   r#   rw  Ú  s   
-5rw  c                   @   sX   e Zd Ze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 )ÚTestUsageViewc                 C   sJ   |   ¡ | _tjjdd| _tdt| jjƒfd| _	t
jjd| jd| _d S )Nrx  rP   rh  rX   ZToyboxrl  )r  r   r   r?   rR   rN  r
   r   rd   rÑ   r   ÚtbxrU   r"   r"   r#   rW   ³  s    
þ ÿzTestUsageView.setUpTestDatac                 C   s   |   | j¡| _d S r   r   r    r"   r"   r#   r$   ¿  s    zTestUsageView.setUpc                 C   s  | j  | j¡}|  |jd¡ |  |j¡}| d¡}|  |j 	¡ d| j
› ¡ | d¡}|  t|ƒd¡ |  |d j 	¡ t| jƒ¡ |  |d j 	¡ d¡ |  |d	 j 	¡ d
¡ t| jƒ | j¡}|d  d¡}|  |¡ |  |j d¡|¡ |d	  d¡}|  |¡ |  ||j d¡¡ d S )Nr&   rp   úUsage: ú#listing-results tbody tr tdr  r   rÉ   úVarious on delete modelr  úCascading toyr¢  r   ©r/   r0   rÑ   r1   r2   rw   rx   ry   r‘   r}   rN  r’   r  rv   r«  r   r   Zget_edit_urlrz   rÁ   ZassertIn©r!   r5   r   rp   rŽ  Ztbx_edit_urlÚlinkr"   r"   r#   r  Â  s"    



zTestUsageView.test_simplec                 C   s`   d| j _| j  ¡  tjjddd}| j j |¡ | j | j	¡}|  
|jd¡ |  |tdƒ¡ d S ©NFr7   r8   r9   i.  r%   ©r   r=   r>   r   r?   r0   rB   rC   r/   rÑ   r1   r2   rt  r
   ©r!   rE   r5   r"   r"   r#   Útest_usage_without_permissionÜ  s    
 ÿz+TestUsageView.test_usage_without_permissionc                 C   s  d| j _| j  ¡  tjjddd}tjjddd}| j j ||¡ | j | j	¡}|  
|jd¡ |  |j¡}| d¡}|  
|j ¡ d	| j› ¡ | d
¡}|  
t|ƒd¡ |  
|d j ¡ d¡ |  
|d j ¡ d¡ |  
|d j ¡ d¡ |d  d¡}|  |¡ |d  d¡}|  |¡ d S )NFr7   r8   r9   ZtestsÚchange_featurecompletetoyr&   rp   r¬  r­  r  r   z!(Private various on delete model)rÉ   r®  r  r¯  r¢  )r   r=   r>   r   r?   r0   rB   rC   r/   rÑ   r1   r2   rw   rx   ry   r‘   r}   rN  r’   r  r~   )r!   rE   Ztoy_edit_permissionr5   r   rp   rŽ  r²  r"   r"   r#   Ú)test_usage_without_permission_on_referrerè  s2    
 ÿ ÿ


z7TestUsageView.test_usage_without_permission_on_referrerc                 C   s   | j  | jd ¡}|  |jd¡ |  |j¡}| d¡}|  |j 	¡ d| j
› ¡ | d¡}|  t|ƒd¡ |  |d j 	¡ t| jƒ¡ |  |d j 	¡ d	¡ |  |d
 j 	¡ d¡ t| jƒ | j¡}|d  d¡}|  |¡ |  |j d¡|¡ |d
  d¡}|  |¡ |  ||j d¡¡ d S )Nú?describe_on_delete=1r&   rp   r¬  r­  r  r   rÉ   r®  r  z?Cascading toy: the various on delete model will also be deletedr¢  r   r°  r±  r"   r"   r#   Ú"test_usage_with_describe_on_delete  s(    

þ

z0TestUsageView.test_usage_with_describe_on_deletec                 C   sp   | j  ¡  | j | j¡}|  |j¡}| d¡}| d¡}|  |j	d¡ |  
|¡ |  |j ¡ d¡ |  |¡ d S )Nrœ  r  r&   zThere are no results.)r«  rb   r/   r0   rÑ   rw   rx   ry   r1   r2   rz   r‘   r}   r~   )r!   r5   r   rŸ  r   r"   r"   r#   r¡  %  s    



zTestUsageView.test_emptyc                 C   sZ   t dt| jjƒfd}| j |¡}|  |j¡}| d¡}|j	dd| j
id}|  |¡ d S )NrV  rX   z[data-side-panel='status']r¢  r   r£  r¤  )r!   rX  r5   r   Z
side_panelÚ
usage_linkr"   r"   r#   Ú"test_edit_view_links_to_usage_view0  s    
z0TestUsageView.test_edit_view_links_to_usage_viewc                 C   sT   t dt| jjƒfd}| j |¡}|  |j¡}|jdd| j	d id}|  
|¡ d S )NrZ  rX   r¢  r   r¹  r£  )r
   r   rN  rd   r/   r0   rw   rx   r¥  rÑ   rz   )r!   rX  r5   r   r»  r"   r"   r#   Ú$test_delete_view_links_to_usage_view8  s
    z2TestUsageView.test_delete_view_links_to_usage_viewN)rH   rI   rJ   r†   rW   r$   r  r¶  r¸  rº  r¡  r¼  r½  r"   r"   r"   r#   rª  ²  s   
 rª  c                   @   s`   e Zd Zdd„ Ze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 )ÚTestInspectViewc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   A  s    zTestInspectView.setUpc                 C   s\   t jjdd| _tdt| jjƒfd| _tdt| jjƒfd| _tdt| jjƒfd| _	d S )NrO   rP   rn  rX   rV  rZ  )
r   r?   rR   rN  r
   r   rd   rÑ   rX  r[  rU   r"   r"   r#   rW   D  s     ÿ ÿzTestInspectView.setUpTestDatac                 C   sØ   | j  | j¡}ddg}| jj ¡ t| jjƒg}|  |j	d¡ |  
|d¡ |  |j¡}dd„ | d¡D ƒ}dd„ | d	¡D ƒ}|  ||¡ |  ||¡ |  t|jd
d| jidƒd¡ |  t|jd
d| jidƒd¡ d S )NÚStridr›   r&   ú!wagtailadmin/generic/inspect.htmlc                 S   s   g | ]}|j  ¡ ‘qS r"   ©r‘   r}   ©r  Údtr"   r"   r#   r!  [  s     z/TestInspectView.test_simple.<locals>.<listcomp>rÃ  c                 S   s   g | ]}|j  ¡ ‘qS r"   rÁ  ©r  Úddr"   r"   r#   r!  \  s     rÅ  r¢  r   r£  r  rÉ   )r/   r0   rÑ   rN  rd   r}   r   rš   r1   r2   rg   rw   rx   r’   r  r|   rX  r[  ©r!   r5   Úexpected_fieldsÚexpected_valuesr   ÚfieldsÚvaluesr"   r"   r#   r  O  s    

ü zTestInspectView.test_simplec                 C   s”   | j  tdt| jjƒfd¡}dg}dg}|  |jd¡ |  |d¡ |  	|j
¡}dd„ | d	¡D ƒ}d
d„ | d¡D ƒ}|  ||¡ |  ||¡ d S )Núfctoy_alt1:inspectrX   r$  rO   r&   rÀ  c                 S   s   g | ]}|j  ¡ ‘qS r"   rÁ  rÂ  r"   r"   r#   r!  m  s     z<TestInspectView.test_inspect_view_fields.<locals>.<listcomp>rÃ  c                 S   s   g | ]}|j  ¡ ‘qS r"   rÁ  rÄ  r"   r"   r#   r!  n  s     rÅ  )r/   r0   r
   r   rN  rd   r1   r2   rg   rw   rx   r’   rÆ  r"   r"   r#   Útest_inspect_view_fieldsc  s    ÿz(TestInspectView.test_inspect_view_fieldsc                 C   sd   t j t¡}tj ¡ }t d¡D ]}||ƒ O }q |j|d}|  	t
|jdddƒdddd	d
h¡ d S )NZregister_permissions)r<   r:   T)ZflatZadd_featurecompletetoyr·  Zdelete_featurecompletetoyZview_featurecompletetoyÚcan_set_release_date)r   r?   r@   r   r   Únoner   Z	get_hooksÚfilterr1   ÚsetZvalues_list)r!   r<   ÚqsÚfnZregistered_user_permissionsr"   r"   r#   Útest_view_permission_registeredr  s    
ùþz/TestInspectView.test_view_permission_registeredc              	   C   s0   |   t¡ tdt| jjƒfd W 5 Q R X d S )Nzfctoy-alt2:inspectrX   )ZassertRaisesr	   r
   r   rN  rd   r    r"   r"   r#   Útest_disabled…  s    zTestInspectView.test_disabledc                 C   s`   d| j _| j  ¡  tjjddd}| j j |¡ | j | j	¡}|  
|jd¡ |  |tdƒ¡ d S r³  r´  rµ  r"   r"   r#   Útest_without_permissionŠ  s    
 ÿz'TestInspectView.test_without_permissionc                 C   s"  d| j _| j j tjjdddtjj| jjj	t
|| jjƒd¡ | j  ¡  | j | j¡}ddg}| jj ¡ t| jjƒg}|  |jd¡ |  |d¡ |  |j¡}d	d
„ | d¡D ƒ}dd
„ | d¡D ƒ}|  ||¡ |  ||¡ |  t|jdd| jidƒd¡ |  t|jdd| jidƒd¡ d S )NFr7   r8   r9   r¿  r›   r&   rÀ  c                 S   s   g | ]}|j  ¡ ‘qS r"   rÁ  rÂ  r"   r"   r#   r!  ®  s     z=TestInspectView.assert_minimal_permission.<locals>.<listcomp>rÃ  c                 S   s   g | ]}|j  ¡ ‘qS r"   rÁ  rÄ  r"   r"   r#   r!  ¯  s     rÅ  r¢  r   r£  r   )r   r=   rB   rC   r   r?   r0   rN  rA   Ú	app_labelr   r>   r/   rÑ   rd   r}   r   rš   r1   r2   rg   rw   rx   r’   r  r|   rX  r[  )r!   Z
permissionr5   rÇ  rÈ  r   rÉ  rÊ  r"   r"   r#   Úassert_minimal_permission–  s4     ÿþü	


ü z)TestInspectView.assert_minimal_permissionc                 C   s   |   d¡ d S )NrC   ©r×  r    r"   r"   r#   Útest_only_add_permissionµ  s    z(TestInspectView.test_only_add_permissionc                 C   s   |   d¡ d S )Nr;   rØ  r    r"   r"   r#   Útest_only_view_permission¸  s    z)TestInspectView.test_only_view_permissionN)rH   rI   rJ   r$   r†   rW   r  rÌ  rÓ  rÔ  rÕ  r×  rÙ  rÚ  r"   r"   r"   r#   r¾  @  s   

r¾  c                   @   sH   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚTestListingButtonsc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   ½  s    zTestListingButtons.setUpc                 C   s   t jjdd| _d S rL  rM  rU   r"   r"   r#   rW   À  s    z TestListingButtons.setUpTestDatac              	   C   sŒ  | j  tdƒ¡}|  |jd¡ |  |d¡ |  |j¡}| d¡}| d¡}|  	|¡ | d¡}|  |j
 d¡ ¡ d| j› d	¡ d
d| j› d	tdt| jjƒgdfdd| j› d	tdt| jjƒgdfdd| j› d	tdt| jjƒgdfdd| j› d	tdt| jjƒgdfg}| d¡}|  t|ƒt|ƒ¡ t||ƒD ]J\}\}	}
}|  |j ¡ |	¡ |  |j
 d¡|
¡ |  |j
 d¡|¡ q<d S )Nr‹   r&   ú wagtailadmin/shared/buttons.htmlútbody tr td ul.actionsú!li [data-controller='w-dropdown']Úbuttonú
aria-labelúMore options for 'ú'ÚEditúEdit 'rV  rX   ZCopyzCopy 'úfeature_complete_toy:copyro  ú	Inspect 'rn  ro   úDelete 'rZ  r¢  r   ©r/   r0   r
   r1   r2   rg   rw   rx   ry   rz   rÁ   r}   rN  r   rd   r’   r  r‹  r‘   ©r!   r5   r   ÚactionsZmore_dropdownZmore_buttonZexpected_buttonsZrendered_buttonsZrendered_buttonrº   Z
aria_labelrÑ   r"   r"   r#   r  Ä  sL    



þýýýýð
 ÿzTestListingButtons.test_simplec                 C   sÚ   d| j _| j  ¡  tjjddd}tjj| jjjt	d| jjƒd}| j j
 ||¡ | j tdƒ¡}|  |jd¡ |  |j¡}| d¡}|  |¡ |  | d	¡¡ |  |j ¡ t| jƒ¡ |  |td
t| jjƒgd¡ d S )NFr7   r8   r9   rC   zfctoy-alt2:indexr&   ú(#listing-results td.title .title-wrapperr¢  zfctoy-alt2:editrX   )r   r=   r>   r   r?   r0   rN  rA   rÖ  r   rB   rC   r/   r
   r1   r2   rw   rx   ry   rz   r~   r‘   r}   rv   rD   r   rd   )r!   rE   Úadd_permissionr5   r   Útitle_wrapperr"   r"   r#   Ú=test_title_cell_not_link_to_edit_view_when_no_edit_permissionõ  s,    
þþ

þzPTestListingButtons.test_title_cell_not_link_to_edit_view_when_no_edit_permissionc                 C   s"  d| j _| j  ¡  tjjddd}tjj| jjjt	d| jjƒd}| j j
 ||¡ | j tdƒ¡}|  |jd¡ |  |j¡}| d¡}|  |¡ | d	¡}|  |¡ |  |j ¡ | jj¡ |  | d
¡tdt| jjƒgd¡ | j|tdt| jjƒgddd |  |tdt| jjƒgd¡ d S )NFr7   r8   r9   r;   r‹   r&   rë  r¢  r   rn  rX   r  ©r4  rV  )r   r=   r>   r   r?   r0   rN  rA   rÖ  r   rB   rC   r/   r
   r1   r2   rw   rx   ry   rz   r‘   r}   rQ   r   rd   r3   rD   )r!   rE   rF   r5   r   rí  r²  r"   r"   r#   Ú=test_title_cell_links_to_inspect_view_when_no_edit_permission  s@    
þþ



þýþzPTestListingButtons.test_title_cell_links_to_inspect_view_when_no_edit_permissionc                 C   sh  | j  tdƒ¡}|  |jd¡ |  |d¡ |  |j¡}| d¡}| d¡}|  	|¡ | d¡}|  |j
 d¡ ¡ d| j› d	¡ d
d| j› d	tdt| jjƒgdfdd| j› d	tdt| jjƒgdfdd| j› d	tdt| jjƒgdfg}| d¡}|  t|ƒt|ƒ¡ t||ƒD ]J\}\}	}
}|  |j ¡ |	¡ |  |j
 d¡|
¡ |  |j
 d¡|¡ qd S )Nrú   r&   rÜ  rÝ  rÞ  rß  rà  rá  râ  rã  rä  zfctoy_alt1:editrX   ro  ræ  rË  ro   rç  zfctoy_alt1:deleter¢  r   rè  ré  r"   r"   r#   Útest_copy_disabled;  sD    



þýýýõ
 ÿz%TestListingButtons.test_copy_disabledc                 C   s†   d| j _| j  ¡  tjjddd}tjj| jjjt	d| jjƒd}| j j
 ||¡ | j tdƒ¡}|  |j¡}| d¡}|  |¡ d S )NFr7   r8   r9   rC   rG  rÝ  )r   r=   r>   r   r?   r0   rN  rA   rÖ  r   rB   rC   r/   r
   rw   rx   ry   r~   )r!   rE   rì  r5   r   rê  r"   r"   r#   Ú6test_dropdown_not_rendered_when_no_child_buttons_existg  s    
þþ
zITestListingButtons.test_dropdown_not_rendered_when_no_child_buttons_existN)rH   rI   rJ   r$   r†   rW   r  rî  rð  rñ  rò  r"   r"   r"   r#   rÛ  ¼  s   
1(,rÛ  c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
ÚTestCopyViewc                 C   s&   |   ¡ | _tdt| jjƒgd| _d S )Nrå  rX   )r   r   r
   r   rN  rd   rÑ   r    r"   r"   r#   r$   ~  s    
zTestCopyView.setUpc                 C   s   t jjdd| _d S rL  rM  rU   r"   r"   r#   rW   ‚  s    zTestCopyView.setUpTestDatac                 C   s`   d| j _| j  ¡  tjjddd}| j j |¡ | j | j	¡}|  
|jd¡ |  |tdƒ¡ d S r³  r´  rµ  r"   r"   r#   rÕ  †  s    
 ÿz$TestCopyView.test_without_permissionc                 C   sJ   | j  | j¡}|  |jd¡ |  |j¡}| d¡}|  |j d¡d¡ d S )Nr&   zinput[name="name"]r¿   rO   )	r/   r0   rÑ   r1   r2   rw   rx   ry   rÁ   )r!   r5   r   Z
name_inputr"   r"   r#   Útest_form_is_prefilled’  s
    
z#TestCopyView.test_form_is_prefilledN)rH   rI   rJ   r$   r†   rW   rÕ  rô  r"   r"   r"   r#   ró  }  s
   
ró  c                   @   s0   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	S )
ÚTestEditHandlerc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   ›  s    zTestEditHandler.setUpc                 C   s,   t jjdd| _tdt| jjƒfd| _d S )NrO   rP   rV  rX   )r   r?   rR   rN  r
   r   rd   rÑ   rU   r"   r"   r#   rW   ž  s    zTestEditHandler.setUpTestDatac           	      C   s¸   | j  | j¡}|  |jd¡ |  |d¡ | j|ddd |  |j¡}| d¡}|  	|¡ | 
d¡}|  t|ƒd¡ d	d
g}t||ƒD ].\}}| d¡}|  	|¡ |  |j ¡ |¡ q„d S )Nr&   zwagtailadmin/shared/panel.htmlz"wagtailadmin/pages/_editor_js.htmlrÉ   rï  z[data-minimap-container]z[data-panel]r  r$  r›   z[data-panel-heading-text])r/   r0   rÑ   r1   r2   rg   rw   rx   ry   rz   r’   r  r‹  r‘   r}   )	r!   r5   r   Zminimap_containerZpanelsZheadingsZexpected_headingÚpanelZrendered_headingr"   r"   r#   Ú#test_edit_form_rendered_with_panels£  s    




z3TestEditHandler.test_edit_form_rendered_with_panelsc                 C   sÔ   d| j _| j  ¡  | j j tjjdddtjj| jj	j
td| jj	ƒd¡ | j | j¡}|  |jd¡ |  t|jd jƒdg¡ | j j tjjd	d
¡ | j | j¡}|  |jd¡ |  t|jd jƒddg¡ d S )NFr7   r8   r9   Zchanger&   ÚformrQ   rÍ  )r:   rš   )r   r=   r>   rB   rC   r   r?   r0   rN  rA   rÖ  r   r/   rÑ   r1   r2   r    rE  rÉ  r4   r"   r"   r#   Útest_field_permissions»  s4    
 ÿþü
ÿÿ ÿz&TestEditHandler.test_field_permissionsN)rH   rI   rJ   r$   r†   rW   r÷  rù  r"   r"   r"   r#   rõ  š  s
   
rõ  c                   @   sH   e Zd Zdd„ Zedd„ ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚTestDefaultMessagesc                 C   s   |   ¡ | _d S r   r   r    r"   r"   r#   r$   Ú  s    zTestDefaultMessages.setUpc                 C   sN   t jjdd| _tdƒ| _tdt| jjƒfd| _tdt| jjƒfd| _	d S )NrO   rP   rT  rV  rX   rZ  )
r   r?   rR   rN  r
   Ú
create_urlr   rd   rX  r[  rU   r"   r"   r#   rW   Ý  s    
 ÿ ÿz!TestDefaultMessages.setUpTestDatac                 C   s:   | j j| jdddœd}|  |jd¡ |  |tdƒ¡ d S )Nrq   ú
2024-01-11r«   ©Údatar&   z<The feature complete toy could not be created due to errors.©r/   Úpostrû  r1   r2   r3   r   r4   r"   r"   r#   Útest_create_errorè  s    þþz%TestDefaultMessages.test_create_errorc                 C   s<   | j j| jdddœdd}|  |jd¡ |  |tdƒ¡ d S )NzPink Flamingorü  r«   T©rþ  Úfollowr&   z:Feature complete toy 'Pink Flamingo (2024-01-11)' created.rÿ  r4   r"   r"   r#   Útest_create_successó  s    ýþz'TestDefaultMessages.test_create_successc                 C   s:   | j j| jdddœd}|  |jd¡ |  |tdƒ¡ d S )Nrq   rü  r«   rý  r&   z:The feature complete toy could not be saved due to errors.©r/   r   rX  r1   r2   r3   r   r4   r"   r"   r#   Útest_edit_errorÿ  s     ÿþz#TestDefaultMessages.test_edit_errorc                 C   s<   | j j| jdddœdd}|  |jd¡ |  |tdƒ¡ d S )NZ
rubberduckz
2024-02-01r«   Tr  r&   z7Feature complete toy 'rubberduck (2024-02-01)' updated.r  r4   r"   r"   r#   Útest_edit_success	  s    ýþz%TestDefaultMessages.test_edit_successc                 C   s>   | j j| jdd}|  |jd¡ |  |td| j› dƒ¡ d S )NT)r  r&   zFeature complete toy 'z
' deleted.)r/   r   r[  r1   r2   r3   r   rN  r4   r"   r"   r#   Útest_delete_success  s    þz'TestDefaultMessages.test_delete_successN)rH   rI   rJ   r$   r†   rW   r  r  r  r  r  r"   r"   r"   r#   rú  Ù  s   


rú  )Ar¯   Úior   Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   Z"django.contrib.contenttypes.modelsr   Zdjango.testr   Zdjango.urlsr	   r
   Zdjango.utils.formatsr   r   Zdjango.utils.htmlr   Zdjango.utils.timezoner   Zopenpyxlr   Zwagtailr   Zwagtail.admin.admin_url_finderr   Zwagtail.log_actionsr   Zwagtail.modelsr   Zwagtail.test.testapp.modelsr   r   r   r   Z!wagtail.test.utils.template_testsr   Z wagtail.test.utils.wagtail_testsr   Zwagtail.utils.deprecationr   r   rK   r‡   r˜   rÕ   rë   rì   rõ   r,  r8  rK  rq  rw  rª  r¾  rÛ  ró  rõ  rú  r"   r"   r"   r#   Ú<module>   sZ   @{% &^& F # Y | B?