U
    |®ÞhÂV ã                   @   s&  d dl Z 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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mZ d dl m!Z!m"Z"m#Z# d dl$m%Z% d dl&m'Z' d dl(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8m9Z9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZD d dlEmFZFmGZG d dlHmIZImJZJ d d lKmLZL d d!lMmNZNmOZO d d"lPmQZQmRZRmSZS d d#lTmUZU d d$lVmWZWmXZXmYZYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZa d d%lbmcZcmdZdmeZemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZo d d&lpmqZq d d'lrmsZs d d(ltmuZu d d)lvmwZw d d*lxmyZy G d+d,„ d,eseqe"ƒZzG d-d.„ d.eqe"ƒZ{e%d/d0G d1d2„ d2eqe"ƒƒZ|G d3d4„ d4eqe"ƒZ}G d5d6„ d6eqe"ƒZ~G d7d8„ d8eqe#ƒZG d9d:„ d:eqe#ƒZ€G d;d<„ d<eqe"ƒZG d=d>„ d>eqe"ƒZ‚e%d/d0G d?d@„ d@eqe"ƒƒZƒG dAdB„ dBeqe"ƒZ„G dCdD„ dDeqe"ƒZ…G dEdF„ dFe…ƒZ†G dGdH„ dHe…ƒZ‡G dIdJ„ dJe…ƒZˆe%d/d0G dKdL„ dLe…ƒƒZ‰G dMdN„ dNe…ƒZŠG dOdP„ dPe…ƒZ‹G dQdR„ dRe…ƒZŒG dSdT„ dTeqe"ƒZG dUdV„ dVeqe"ƒZŽG dWdX„ dXeqe"ƒZG dYdZ„ dZeqe"ƒZG d[d\„ d\e"ƒZ‘G d]d^„ d^e"ƒZ’G d_d`„ d`eqe"ƒZ“G dadb„ dbeqe"ƒZ”G dcdd„ ddeqe"ƒZ•G dedf„ dfeqe"ƒZ–G dgdh„ dheqe"ƒZ—G didj„ djeqe"ƒZ˜G dkdl„ dleqe"ƒZ™G dmdn„ dneqe#ƒZšG dodp„ dpeqe#ƒZ›G dqdr„ dreqe"ƒZœG dsdt„ dteqe"ƒZG dudv„ dveqe"ƒZžG dwdx„ dxeqe"ƒZŸG dydz„ dzeqe"ƒZ G d{d|„ d|eqe"ƒZ¡G d}d~„ d~e"ƒZ¢G dd€„ d€eqe"ƒZ£G dd‚„ d‚eqe"ƒZ¤G dƒd„„ d„eqe"ƒZ¥G d…d†„ d†e"ƒZ¦G d‡dˆ„ dˆeqe"ƒZ§G d‰dŠ„ dŠeqe"ƒZ¨G d‹dŒ„ dŒeqe"ƒZ©G ddŽ„ dŽeqe"ƒZªG dd„ deqe"ƒZ«dS )‘é    N)ÚStringIO)Úmock)Úsettings)Úquote)Úget_user_model)ÚAnonymousUserÚ
Permission)ÚContentType)ÚchecksÚ
management)ÚImproperlyConfiguredÚValidationError)ÚContentFile)ÚSimpleUploadedFile)ÚWSGIRequest)ÚHttpRequestÚHttpResponse)ÚRequestFactoryÚTestCaseÚTransactionTestCase)Úoverride_settings)Úreverse)Ú
make_awareÚnow)Úfreeze_time)ÚTag)Úhooks)ÚAdminURLFinder)ÚWagtailAdminModelForm)Ú
admin_menu)Ú
FieldPanelÚ
ObjectListÚget_edit_handler)ÚButtonWithDropdown)ÚFieldBlockAdapter)Úget_dummy_request)ÚLocaleÚModelLogEntryÚRevision)Ú	publishedÚunpublished)ÚActionMenuItemÚ"get_base_snippet_action_menu_items)ÚSnippetChooserBlock)ÚSNIPPET_MODELSÚregister_snippet)ÚAdminSnippetChooserÚSnippetChooserAdapterÚSnippetListingButton)ÚFancySnippetForm)ÚAlphaSnippetÚFancySnippetÚFileUploadSnippetÚ NonAutocompleteSearchableSnippetÚRegisterDecoratorÚRegisterFunctionÚSearchableSnippetÚStandardSnippetÚ#StandardSnippetWithCustomPrimaryKeyÚTranslatableSnippetÚZuluSnippet)ÚAdvertÚAdvertWithCustomPrimaryKeyÚAdvertWithCustomUUIDPrimaryKeyÚAdvertWithTabbedInterfaceÚDraftStateCustomPrimaryKeyModelÚDraftStateModelÚFullFeaturedSnippetÚMultiPreviewModesModelÚRevisableChildModelÚRevisableModelÚSnippetChooserModelÚ'SnippetChooserModelWithCustomPrimaryKeyÚVariousOnDeleteModel)ÚWagtailTestUtils)ÚAdminTemplateTestUtils)Úsubmittable_timestamp)ÚRemovedInWagtail70Warning)Úrender_timestampc                   @   sH   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSnippetIndexViewc                 C   s   |   ¡ | _d S ©N©ÚloginÚuser©Úself© rX   úl/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/snippets/tests/test_snippets.pyÚsetUpR   s    zTestSnippetIndexView.setUpc                 C   s   | j  tdƒ|¡S )Núwagtailsnippets:index©ÚclientÚgetr   ©rW   ÚparamsrX   rX   rY   r^   U   s    zTestSnippetIndexView.getc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ©NFÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenameé.  ©
rU   Úis_superuserÚuser_permissionsÚaddr   Úobjectsr^   ÚsaveÚassertEqualÚstatus_code©rW   ÚresponserX   rX   rY   Ú!test_get_with_limited_permissionsX   s     ÿÿ
z6TestSnippetIndexView.test_get_with_limited_permissionsc                 C   sœ   d| j _| j j tjjdddtjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ |  
|d¡ |  |j¡}| d	¡}|  |d
 tdƒ¡ |  |j ¡ d¡ d S )NFrb   rc   rd   ÚtestsÚview_advertéÈ   ú!wagtailadmin/generic/listing.htmlztr td aÚhrefú!wagtailsnippets_tests_advert:listÚAdverts)rU   rh   ri   rj   r   rk   r^   rl   rm   rn   ÚassertTemplateUsedÚget_soupÚcontentÚ
select_oner   ÚtextÚstrip)rW   rp   ÚsoupÚlinkrX   rX   rY   Ú#test_get_with_only_view_permissionsd   s&     ÿ ÿü

z8TestSnippetIndexView.test_get_with_only_view_permissionsc                 C   sH   |   ¡ }|  |jd¡ |  |d¡ |  dddœg|j¡ |  |d¡ d S )Nrt   ru   Ú ÚSnippets)ÚurlÚlabelzdata-locale-selector)r^   rm   rn   ry   ZassertBreadcrumbsItemsRenderedr{   ÚassertNotContainsro   rX   rX   rY   Útest_simplex   s    
þz TestSnippetIndexView.test_simplec                 C   s   |   |  ¡ d¡ d S )Nrx   ©ÚassertContainsr^   rV   rX   rX   rY   Útest_displays_snippet„   s    z*TestSnippetIndexView.test_displays_snippetc                 C   s¸   d| j _| j j tjjdddtjjddd¡ | j  ¡  tƒ }| j |_ t	 
|¡}dd„ |D ƒ}|  t|ƒd	¡ |d
 }|  |jd¡ |  |jd¡ |  |jd¡ |  |jtdƒ¡ d S )NFrb   rc   rd   rr   rs   c                 S   s   g | ]}|j d kr|‘qS )Úsnippets)Úname)Ú.0ÚitemrX   rX   rY   Ú
<listcomp>–   s     
 z`TestSnippetIndexView.test_snippets_menu_item_shown_with_only_view_permission.<locals>.<listcomp>é   r   r‹   rƒ   Úsnippetr[   )rU   rh   ri   rj   r   rk   r^   rl   r%   r   Zmenu_items_for_requestrm   ÚlenrŒ   r…   Ú	icon_namer„   r   )rW   ÚrequestÚ
menu_itemsr‹   rŽ   rX   rX   rY   Ú7test_snippets_menu_item_shown_with_only_view_permission‡   s,     ÿ ÿü

zLTestSnippetIndexView.test_snippets_menu_item_shown_with_only_view_permissionN)
Ú__name__Ú
__module__Ú__qualname__rZ   r^   rq   r   r‡   rŠ   r–   rX   rX   rX   rY   rQ   Q   s   rQ   c                   @   s   e Zd Zdd„ Zi f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 )"ÚTestSnippetListViewc                 C   s   |   ¡  tƒ }|j ¡ | _d S rR   )rT   r   rk   r^   rU   )rW   Z
user_modelrX   rX   rY   rZ       s    zTestSnippetListView.setUpc                 C   s   | j  tdƒ|¡S )Nrw   r\   r_   rX   rX   rY   r^   ¥   s    zTestSnippetListView.getc                 C   s8   |   ¡ }|  |jd¡ |  |d¡ |  |jd d¡ d S )Nrt   ú#wagtailsnippets/snippets/index.htmlÚheader_iconr‘   )r^   rm   rn   ry   Úcontextro   rX   rX   rY   r‡   ¨   s    zTestSnippetListView.test_simplec                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ra   rg   ro   rX   rX   rY   Úget_with_limited_permissions®   s     ÿÿ
z0TestSnippetListView.get_with_limited_permissionsc                 C   st   d| j _| j j tjjdddtjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ | j
|dd	d
 |  |tdƒ¡ d S )NFrb   rc   rd   rr   Úchange_advertrt   z'<p>There are no adverts to display.</p>T©Úhtmlú wagtailsnippets_tests_advert:add)rU   rh   ri   rj   r   rk   r^   rl   rm   rn   r‰   r†   r   ro   rX   rX   rY   Úget_with_edit_permission_onlyº   s(     ÿ ÿü
ýz1TestSnippetListView.get_with_edit_permission_onlyc                 C   sV   t ddƒD ]}tjj|d| d q
|  ¡ }|  |jd¡ |  |jd d jd¡ d	S )
ze
        Listing should be ordered descending by PK if no ordering has been set on the model
        r   é   ú	advert %d©Úpkr}   rt   Úpage_objr   z	advert 10N)	Úranger?   rk   Úcreater^   rm   rn   r   r}   ©rW   Úirp   rX   rX   rY   Útest_orderingÏ   s
    z!TestSnippetListView.test_orderingc                 C   sH   |   ddi¡}|  |jd¡ |  |d¡ |   ddi¡}|  |jd¡ d S )NÚpr   rt   r›   é'  é”  ©r^   rm   rn   ry   ro   rX   rX   rY   Útest_simple_paginationÙ   s
    z*TestSnippetListView.test_simple_paginationc                 C   s   |   |  ¡ d¡ d S )Nú
Add advertrˆ   rV   rX   rX   rY   Útest_displays_add_buttonâ   s    z,TestSnippetListView.test_displays_add_buttonc                 C   s   |   |  ¡ jd ¡ d S ©NZis_searchable)ÚassertFalser^   r   rV   rX   rX   rY   Útest_not_searchableå   s    z'TestSnippetListView.test_not_searchablec              	      s¬   t jjdd‰ d‡ ‡fdd„	}t d|¡ ˆ ¡ }W 5 Q R X ˆ |jd¡ ˆ |d¡ ˆ 	|j
¡}| d¡}| d	¡}ˆ |¡ | d
¡}ˆ |¡ ˆ |j ¡ d¡ d S )NúMy Lovely advert©r}   c                 3   s>   ˆ  | ˆ ¡ ˆ  |ˆj¡ ˆ  |tdƒ¡ tddddV  d S )Nrw   ú&Another useless snippet listing buttonz/custom-urlé
   ©Úpriority)rm   rU   r   r2   ©r‘   rU   Znext_url©ÚadvertrW   rX   rY   Úsnippet_listing_buttonsë   s      ÿz_TestSnippetListView.test_register_snippet_listing_buttons_hook.<locals>.snippet_listing_buttonsÚ register_snippet_listing_buttonsrt   ú wagtailadmin/shared/buttons.htmlútbody tr td ul.actionszli > a[href='/custom-url']z7li [data-controller='w-dropdown'] a[href='/custom-url']rº   )N)r?   rk   rª   r   Úregister_temporarilyr^   rm   rn   ry   rz   r{   r|   ÚassertIsNoneÚassertIsNotNoner}   r~   )rW   rÁ   rp   r   ÚactionsZtop_level_custom_buttonÚcustom_buttonrX   r¿   rY   Ú*test_register_snippet_listing_buttons_hookè   s*    	 ÿ


ÿ
þz>TestSnippetListView.test_register_snippet_listing_buttons_hookc           
   	      s  t jjdd‰ d‡ ‡fdd„	}t d|¡ ˆ ¡ }W 5 Q R X ˆ |jd¡ ˆ |d¡ ˆ 	|j
¡}| d¡}| d	¡}ˆ |¡ | d
¡}ˆ t|ƒd¡ d }|D ]}d|j ¡ kr¤|}q¤ˆ |¡ ˆ | d¡j ¡ d¡ |jdddid}	ˆ |	¡ ˆ |	j ¡ d¡ d S )Nr¸   r¹   c                 3   sH   ˆ  | ˆ ¡ ˆ  |ˆj¡ ˆ  |tdƒ¡ tdtddddgdV  d S )Nrw   ú	Moar pls!ÚAlrightyú/cheersr»   r¼   )r…   Úbuttons)rm   rU   r   r#   r2   r¾   r¿   rX   rY   rÁ     s    þzmTestSnippetListView.test_register_snippet_listing_buttons_hook_with_dropdown.<locals>.snippet_listing_buttonsrÂ   rt   rÃ   rÄ   z@li [data-controller='w-dropdown'] [data-controller='w-dropdown']z#li > [data-controller='w-dropdown']é   rË   ÚbuttonÚarv   rÍ   ©ÚattrsrÌ   )N)r?   rk   rª   r   rÅ   r^   rm   rn   ry   rz   r{   r|   rÆ   Úselectr’   r}   r~   rÇ   Úfind)
rW   rÁ   rp   r   rÈ   Znested_dropdownZdropdown_buttonsZcustom_dropdownrÐ   rÉ   rX   r¿   rY   Ú8test_register_snippet_listing_buttons_hook_with_dropdown	  s4    	 ÿ
ÿ



zLTestSnippetListView.test_register_snippet_listing_buttons_hook_with_dropdownc                 C   s   t jjdd |  ¡ }|  |jd¡ |  |d¡ |  |j¡}| 	d¡}|  t
|ƒd¡ |d }|jdd	d
id}|  |¡ |  |j ¡ d¡ d S )Nr¸   r¹   rt   rÃ   z<tbody tr td ul.actions > li > [data-controller='w-dropdown']r   r   rÑ   rv   z/dummy-buttonrÒ   zDummy Button)r?   rk   rª   r^   rm   rn   ry   rz   r{   rÔ   r’   rÕ   rÇ   r}   r~   )rW   rp   r   Z	dropdownsZmore_dropdownZdummy_buttonrX   rX   rY   Ú+test_construct_snippet_listing_buttons_hook1  s    ÿ
z?TestSnippetListView.test_construct_snippet_listing_buttons_hookc              	      sz   t jjdd}tdt|jƒgd‰ ‡ ‡fdd„}t d|¡ ˆ ¡ }W 5 Q R X ˆ 	|j
d¡ ˆ |d	¡ ˆ |ˆ ¡ d S )
Nr¸   r¹   ú#wagtailsnippets_tests_advert:delete©Úargsc                    s>   ˆ  t| ƒd¡ ‡ fdd„| D ƒ| d d …< ˆ  t| ƒd¡ d S )Né   c                    s   g | ]}|j ˆ kr|‘qS rX   )r„   )r   rÐ   )Ú
delete_urlrX   rY   r   N  s     
 zšTestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttons.<locals>.hide_delete_button_for_lovely_advert.<locals>.<listcomp>é   ©rm   r’   ©rÎ   r‘   rU   ©rÜ   rW   rX   rY   Ú$hide_delete_button_for_lovely_advertK  s    z†TestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttons.<locals>.hide_delete_button_for_lovely_advertÚ!construct_snippet_listing_buttonsrt   rÃ   )r?   rk   rª   r   r   r§   r   rÅ   r^   rm   rn   ry   r†   )rW   rÀ   rá   rp   rX   rà   rY   ÚDtest_construct_snippet_listing_buttons_hook_contains_default_buttonsE  s     
ÿþzXTestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttonsc              
      sr   t jjdd‰ ‡ ‡fdd„}t d|¡& ˆ td¡ ˆ ¡ }W 5 Q R X W 5 Q R X ˆ |j	d¡ ˆ 
|d¡ d S )	Nr¸   r¹   c                    s*   ˆ  |ˆ ¡ ˆ  |ˆj¡ ˆ  |i ¡ d S rR   )rm   rU   )rÎ   r‘   rU   r   r¿   rX   rY   Ú$register_snippet_listing_button_item^  s    z€TestSnippetListView.test_construct_snippet_listing_buttons_hook_deprecated_context.<locals>.register_snippet_listing_button_itemrâ   zKconstruct_snippet_listing_buttons hook no longer accepts a context argumentrt   rÃ   )r?   rk   rª   r   rÅ   ZassertWarnsMessagerO   r^   rm   rn   ry   )rW   rä   rp   rX   r¿   rY   Ú>test_construct_snippet_listing_buttons_hook_deprecated_context[  s    þþýzRTestSnippetListView.test_construct_snippet_listing_buttons_hook_deprecated_contextc              	      s^   t jjdd ‡ fdd„}t d|¡ ˆ  ¡ }W 5 Q R X ˆ  |j¡}| d¡}ˆ  	|¡ d S )Nr¸   r¹   c                    s    g | d d …< ˆ   t| ƒd¡ d S )Nr   rÞ   rß   rV   rX   rY   Úremove_all_buttonsr  s    zfTestSnippetListView.test_dropdown_not_rendered_when_no_child_buttons_exist.<locals>.remove_all_buttonsrâ   rÄ   )
r?   rk   rª   r   rÅ   r^   rz   r{   r|   rÆ   )rW   ræ   rp   r   rÈ   rX   rV   rY   Ú6test_dropdown_not_rendered_when_no_child_buttons_existo  s    þ
zJTestSnippetListView.test_dropdown_not_rendered_when_no_child_buttons_existc                 C   st   t jjdd}| ¡  ¡  d|_| ¡  | j tdƒ¡}tdt	|j
ƒgd}| j|d|› dt	|j
ƒ› d	d
d d S )NúDraft-enabled Foo, Publishedr¹   úDraft-enabled Bar, In Draftú*wagtailsnippets_tests_draftstatemodel:listú*wagtailsnippets_tests_draftstatemodel:editrÙ   z
            <a href="z%">
                <span id="snippet_zn_title">
                    Draft-enabled Bar, In Draft
                </span>
            </a>
            Tr    )rD   rk   rª   Úsave_revisionÚpublishr}   r]   r^   r   r   r§   r‰   )rW   r‘   rp   Úedit_urlrX   rX   rY   Útest_use_latest_draft_as_title€  s(    ÿ
þÿþ÷z2TestSnippetListView.test_use_latest_draft_as_titleN)r—   r˜   r™   rZ   r^   r‡   rž   r£   r­   r²   r´   r·   rÊ   rÖ   r×   rã   rå   rç   rï   rX   rX   rX   rY   rš   Ÿ   s    
	!(rš   T©ZWAGTAIL_I18N_ENABLEDc                   @   sN   e Zd Zdd„ Zedddgddd„ ƒZd	d
„ Zedddd„ ƒZdd„ ZdS )ÚTestLocaleSelectorOnListc                 C   s   t jjdd| _|  ¡ | _d S ©NÚfr©Zlanguage_code©r&   rk   rª   Ú	fr_localerT   rU   rV   rX   rX   rY   rZ   Ÿ  s    zTestLocaleSelectorOnList.setUp)ÚarZArabic)ÚenZEnglish)ró   ZFrench)ZWAGTAIL_CONTENT_LANGUAGESc                 C   sŽ   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ | d¡}|  |¡ tdƒd }| d|› d¡}|  	t
|ƒd¡ | j|d	|› d
dd d S )Nú6wagtailsnippets_snippetstests_translatablesnippet:listz input[name="locale"][value="ar"]z input[name="locale"][value="fr"]ú5wagtailsnippets_snippetstests_translatablesnippet:addú
?locale=enúa[href="ú"]rÏ   úO<p>There are no translatable snippets to display.
            Why not <a href="ú">add one</a>?</p>Tr    )r]   r^   r   rz   r{   r|   rÆ   rÇ   rÔ   rm   r’   r‰   )rW   rp   r   Zarabic_inputZfrench_inputÚadd_urlÚadd_buttonsrX   rX   rY   Útest_locale_selector£  s*    ÿ



ÿÿÿüz-TestLocaleSelectorOnList.test_locale_selectorc                 C   sR   | j  ¡  | j tdƒ¡}|  |j¡}| d¡}|  |¡ | d¡}|  |¡ d S )Nrù   úinput[name="locale"]z#filters-drilldown)	rö   Údeleter]   r^   r   rz   r{   r|   rÆ   )rW   rp   r   Zlocale_inputZfilters_drilldownrX   rX   rY   Ú*test_no_locale_filter_when_only_one_localeÆ  s    
ÿ


zCTestLocaleSelectorOnList.test_no_locale_filter_when_only_one_localeFrð   c                 C   s‚   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ tdƒ}|  |j¡}| d|› d¡}|  t	|ƒd¡ | j
|d|› dd	d
 d S )Nrù   r  rú   rü   rý   rÏ   rþ   rÿ   Tr    ©r]   r^   r   rz   r{   r|   rÆ   rÔ   rm   r’   r‰   ©rW   rp   r   Zinput_elementr   r  rX   rX   rY   Ú3test_locale_selector_not_present_when_i18n_disabledÕ  s"    ÿ

ÿüzLTestLocaleSelectorOnList.test_locale_selector_not_present_when_i18n_disabledc                 C   s‚   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ tdƒ}|  |j¡}| d|› d¡}|  t	|ƒd¡ | j
|d|› dd	d
 d S )Nrw   r  r¢   rü   rý   rÏ   zA<p>There are no adverts to display.
            Why not <a href="rÿ   Tr    r  r  rX   rX   rY   Ú<test_locale_selector_not_present_on_non_translatable_snippetë  s    

ÿüzUTestLocaleSelectorOnList.test_locale_selector_not_present_on_non_translatable_snippetN)	r—   r˜   r™   rZ   r   r  r  r  r	  rX   rX   rX   rY   rñ     s   ýÿ

rñ   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestModelOrderingc                 C   s<   t ddƒD ]}tjjd| d q
tjjdd |  ¡  d S )Nr   r»   r¥   r¹   Ú	aaaadvert)r©   rB   rk   rª   rT   )rW   r¬   rX   rX   rY   rZ      s    zTestModelOrdering.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |jd d jd¡ d S )Nz4wagtailsnippets_tests_advertwithtabbedinterface:listrt   r¨   r   r  ©r]   r^   r   rm   rn   r   r}   ro   rX   rX   rY   Ú$test_listing_respects_model_ordering  s
    ÿz6TestModelOrdering.test_listing_respects_model_orderingc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |jd d jd¡ d S )Nz=wagtailsnippetchoosers_tests_advertwithtabbedinterface:choosert   Úresultsr   r  r  ro   rX   rX   rY   Ú$test_chooser_respects_model_ordering  s
    ÿz6TestModelOrdering.test_chooser_respects_model_orderingN)r—   r˜   r™   rZ   r  r  rX   rX   rX   rY   r
  ÿ  s   r
  c                   @   sH   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S )ÚTestListViewOrderingc                 C   sˆ   t ddƒD ]x}tjj|d › d|› d}tjj|d › d|› dd	}|d
 dkr
tjjtj t¡ddtƒ |j	d | 
¡  ¡  q
d S )Nr   r»   rÑ   zdvert r¹   Údzraft F©r}   ÚliverÏ   r   úTest Advertúwagtail.create©Úcontent_typer…   ÚactionÚ	timestampÚ	object_id)r©   r?   rk   rª   rD   r'   r	   Úget_for_modelr   r§   rì   rí   )Úclsr¬   rÀ   ÚdraftrX   rX   rY   ÚsetUpTestData  s    
ûz"TestListViewOrdering.setUpTestDatac                 C   s   |   ¡  d S rR   ©rT   rV   rX   rX   rY   rZ   %  s    zTestListViewOrdering.setUpc                 C   sr   t dƒ}| j |¡}|d }|d }|  |jd¡ |  |d¡ | j|d|› ddd	 | j|d|› d
dd	 d S )Nrw   ú?ordering=_updated_atú?ordering=livert   úwagtailadmin/tables/table.htmlú<th><a href="ús" title="Sort by &#x27;Updated&#x27; in ascending order." class="icon icon-arrow-down-after label">Updated</a></th>Tr    úq" title="Sort by &#x27;Status&#x27; in ascending order." class="icon icon-arrow-down-after label">Status</a></th>)r   r]   r^   rm   rn   ry   r‰   r†   ©rW   Úlist_urlrp   Zsort_updated_urlZsort_live_urlrX   rX   rY   Ú,test_listing_orderable_columns_with_no_mixin(  s     
ý
ýzATestListViewOrdering.test_listing_orderable_columns_with_no_mixinc                 C   sr   t dƒ}| j |¡}|d }|d }|  |jd¡ |  |d¡ | j|d|› ddd	 | j|d|› d
dd	 d S )Nrê   r   r!  rt   r"  r#  r$  Tr    r%  )r   r]   r^   rm   rn   ry   r‰   r&  rX   rX   rY   Ú5test_listing_orderable_columns_with_draft_state_mixin>  s     
ý
ýzJTestListViewOrdering.test_listing_orderable_columns_with_draft_state_mixinc                 C   sÚ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ | j |d ¡}|  |jd¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ d S )	Nrw   r   rt   r¨   r   éÿÿÿÿzaaaaaaaadvert 8ú?ordering=-_updated_at©r   r]   r^   rm   rn   rÆ   r   Z_updated_atr}   rÇ   r‰   ©rW   r'  rp   rX   rX   rY   Ú&test_order_by_updated_at_with_no_mixinT  s    z;TestListViewOrdering.test_order_by_updated_at_with_no_mixinc                 C   sÚ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ | j |d ¡}|  |jd¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ d S )	Nrê   r   rt   r¨   r   r*  zddddddddraft 8r+  r,  r-  rX   rX   rY   Ú/test_order_by_updated_at_with_draft_state_mixinn  s    zDTestListViewOrdering.test_order_by_updated_at_with_draft_state_mixinc                 C   sÀ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d j¡ |  	||d ¡ | j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d j¡ |  	||d ¡ d S )Nrê   r!  rt   r¨   r   r*  z?ordering=-live)
r   r]   r^   rm   rn   r¶   r   r  Ú
assertTruer‰   r-  rX   rX   rY   Útest_order_by_liveˆ  s    z'TestListViewOrdering.test_order_by_liveN)r—   r˜   r™   Úclassmethodr  rZ   r(  r)  r.  r/  r1  rX   rX   rX   rY   r    s   
r  c                   @   sH   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú(TestSnippetListViewWithSearchableSnippetc                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S ©NÚHellor¹   ÚWorldzHello World©rT   r:   rk   rª   Ú	snippet_aÚ	snippet_bÚ	snippet_crV   rX   rX   rY   rZ   ¤  s    z.TestSnippetListViewWithSearchableSnippet.setUpc                 C   s   | j  tdƒ|¡S )Nz4wagtailsnippets_snippetstests_searchablesnippet:listr\   r_   rX   rX   rY   r^   ¬  s    þz,TestSnippetListViewWithSearchableSnippet.getc                 C   sl   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ |  |d¡ d S )Nrt   r›   r¨   úThis field is required.©r^   rm   rn   ry   Úlistr   Úobject_listÚassertInr8  r9  r:  r†   ©rW   rp   ÚitemsrX   rX   rY   r‡   ²  s    z4TestSnippetListViewWithSearchableSnippet.test_simplec                 C   sr   |   ddi¡}|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ |  |d¡ d S )NÚqr‚   rt   r›   r¨   r;  r<  r@  rX   rX   rY   Útest_empty_qÀ  s    z5TestSnippetListViewWithSearchableSnippet.test_empty_qc                 C   s   |   |  ¡ jd ¡ d S rµ   )r0  r^   r   rV   rX   rX   rY   Útest_is_searchableÎ  s    z;TestSnippetListViewWithSearchableSnippet.test_is_searchablec                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrB  r5  r¨   ©	r^   r=  r   r>  r?  r8  ÚassertNotInr9  r:  r@  rX   rX   rY   Útest_search_helloÑ  s
    z:TestSnippetListViewWithSearchableSnippet.test_search_helloc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrB  Zworr¨   ©	r^   r=  r   r>  rF  r8  r?  r9  r:  r@  rX   rX   rY   Útest_search_world_autocompleteÚ  s
    zGTestSnippetListViewWithSearchableSnippet.test_search_world_autocompleteN)
r—   r˜   r™   rZ   r^   r‡   rC  rD  rG  rI  rX   rX   rX   rY   r3  £  s   	r3  c                   @   s,   e Zd ZdZdd„ Zi fdd„Zdd„ ZdS )	Ú7TestSnippetListViewWithNonAutocompleteSearchableSnippetúu
    Test that searchable snippets with no AutocompleteFields defined can still be searched using
    full words
    c                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r4  ©rT   r7   rk   rª   r8  r9  r:  rV   rX   rX   rY   rZ   ì  s    ÿz=TestSnippetListViewWithNonAutocompleteSearchableSnippet.setUpc                 C   s   | j  tdƒ|¡S )NzCwagtailsnippets_snippetstests_nonautocompletesearchablesnippet:listr\   r_   rX   rX   rY   r^   ö  s    ÿüz;TestSnippetListViewWithNonAutocompleteSearchableSnippet.getc              	   C   sd   |   td¡ |  ddi¡}W 5 Q R X t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nú'does not specify any AutocompleteFieldsrB  r5  r¨   ©ÚassertWarnsRegexÚRuntimeWarningr^   r=  r   r>  r?  r8  rF  r9  r:  r@  rX   rX   rY   rG  þ  s     ÿzITestSnippetListViewWithNonAutocompleteSearchableSnippet.test_search_helloN©r—   r˜   r™   Ú__doc__rZ   r^   rG  rX   rX   rX   rY   rJ  ä  s   
rJ  c                   @   s¨   e Zd Zdd„ Zi efdd„Zi ef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#d$„ Zd%S )&ÚTestSnippetCreateViewc                 C   s   |   ¡ | _d S rR   rS   rV   rX   rX   rY   rZ     s    zTestSnippetCreateView.setUpc                 C   s   | j  t|j d¡ƒ|¡S ©Nrj   )r]   r^   r   Úsnippet_viewsetÚget_url_name)rW   r`   ÚmodelrX   rX   rY   r^     s     ÿzTestSnippetCreateView.getc                 C   s   | j  t|j d¡ƒ|¡S rT  ©r]   Úpostr   rU  rV  )rW   Ú	post_datarW  rX   rX   rY   rY    s     ÿzTestSnippetCreateView.postc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ra   rg   ro   rX   rX   rY   rq     s     ÿÿ
z7TestSnippetCreateView.test_get_with_limited_permissionsc                 C   s6   |   ¡ }|  |jd¡ |  |d¡ | j|ddd d S )Nrt   ú$wagtailsnippets/snippets/create.htmlúrole="tablist"Tr    )r^   rm   rn   ry   r†   ro   rX   rX   rY   r‡   %  s    z!TestSnippetCreateView.test_simplec                 C   sj   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )	Nz3wagtailsnippets_tests_advertwithtabbedinterface:addrt   r[  r\  úp<a id="tab-label-advert" href="#tab-advert" class="w-tabs__tab " role="tab" aria-selected="false" tabindex="-1">ún<a id="tab-label-other" href="#tab-other" class="w-tabs__tab " role="tab" aria-selected="false" tabindex="-1">zOther panels help textzTop-level help text©r]   r^   r   rm   rn   ry   r‰   ro   rX   rX   rY   Ú"test_snippet_with_tabbed_interface+  s     ÿþþz8TestSnippetCreateView.test_snippet_with_tabbed_interfacec                 C   sP   d| j _| j j tjjddd¡ | j  ¡  | jdddœd}|  	|j
d	¡ d S ©
NFrb   rc   rd   ú	test textúhttp://www.example.com/©r}   r„   ©rZ  rf   )rU   rh   ri   rj   r   rk   r^   rl   rY  rm   rn   ro   rX   rX   rY   Ú$test_create_with_limited_permissions>  s     ÿÿ
ÿz:TestSnippetCreateView.test_create_with_limited_permissionsc                 C   s@   | j ddid}|  |d¡ | j|ddd | j|ddd d S )	NÚfooÚbarre  z.The advert could not be created due to errors.úerror-messager   ©ÚcountúThis field is required©rY  r‰   ro   rX   rX   rY   Útest_create_invalidL  s    z)TestSnippetCreateView.test_create_invalidc                 C   sV   | j dddœd}|  |tdƒ¡ tjjdd}|  | ¡ d¡ |  | ¡ j	d¡ d S )NÚtest_advertrc  rd  re  rw   r¹   r   ©
rY  ÚassertRedirectsr   r?   rk   Úfilterrm   rk  Úfirstr„   ©rW   rp   r‹   rX   rX   rY   Útest_createR  s    ÿz!TestSnippetCreateView.test_createc                 C   s„   ddg}| j ddd |¡dœd}|  |tdƒ¡ tjjdd	}ttj 	d
¡j
|dƒ}|  t|ƒd¡ |  t|j 	d
¡ƒ|¡ d S )NÚhelloÚworldro  zhttp://example.com/ú, ©r}   r„   Útagsre  rw   r¹   rŒ   ©Zname__inrÏ   ©rY  Újoinrq  r   r?   rk   r^   r=  r   Úorder_byrr  rm   r’   rz  ©rW   rz  rp   r‘   Zexpected_tagsrX   rX   rY   Útest_create_with_tags\  s    ýÿz+TestSnippetCreateView.test_create_with_tagsc                 C   s`   | j td}|  |d¡ | jtdtddƒid}|  |tdƒ¡ tj  ¡ }|  |j	 
¡ d¡ d S )N©rW  úenctype="multipart/form-data"Úfileútest.txts   Uploaded file©rW  rZ  ú4wagtailsnippets_snippetstests_fileuploadsnippet:list)r^   r6   r‰   rY  r   rq  r   rk   rm   rƒ  Úread©rW   rp   r‘   rX   rX   rY   Ú!test_create_file_upload_multipartn  s    þþ
z7TestSnippetCreateView.test_create_file_upload_multipartc                 C   s²   | j tddid}|  |tdƒ¡ tjjdd}| ¡ }|  | ¡ d¡ |j	}| ¡ }|  | ¡ d¡ |  |j
d d¡ tj |¡jdd}|  | ¡ d¡ |  | ¡ j|¡ d S )	Nr}   Zcreate_revisabler…  ú)wagtailsnippets_tests_revisablemodel:listr¹   r   r  ©r  )rY  rH   rq  r   rk   rr  rs  rm   rk  Ú	revisionsr{   r'   Úfor_instanceÚrevision)rW   rp   r‹   r‘   rŒ  rŽ  Úlog_entriesrX   rX   rY   Útest_create_with_revision}  s(     ÿ ÿÿz/TestSnippetCreateView.test_create_with_revisionc              	      sL   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W 5 Q R X ˆ  |jd¡ ˆ  |jd¡ d S )Nc                    s    ˆ   | t¡ ˆ  |t¡ tdƒS ©NúOverridden!©ÚassertIsInstancer   rm   r?   r   ©r”   rW  rV   rX   rY   Ú	hook_func—  s    zLTestSnippetCreateView.test_before_create_snippet_hook_get.<locals>.hook_funcÚbefore_create_snippetrt   ó   Overridden!©Úregister_hookr^   rm   rn   r{   ©rW   r–  rp   rX   rV   rY   Ú#test_before_create_snippet_hook_get–  s
    z9TestSnippetCreateView.test_before_create_snippet_hook_getc              	      sj   ‡ fdd„}ˆ   d|¡ dddœ}ˆ j|d}W 5 Q R X ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ ¡ d S )
Nc                    s    ˆ   | t¡ ˆ  |t¡ tdƒS r‘  r“  r•  rV   rX   rY   r–  £  s    zMTestSnippetCreateView.test_before_create_snippet_hook_post.<locals>.hook_funcr—  ú	Hook testrc  rd  re  rt   r˜  )	rš  rY  rm   rn   r{   r¶   r?   rk   Úexists©rW   r–  rZ  rp   rX   rV   rY   Ú$test_before_create_snippet_hook_post¢  s    
z:TestSnippetCreateView.test_before_create_snippet_hook_postc              	      sj   ‡ fdd„}ˆ   d|¡ dddœ}ˆ j|d}W 5 Q R X ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ ¡ d S )
Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS )Nr  rc  r’  ©r”  r   rm   r}   r„   r   ©r”   ÚinstancerV   rX   rY   r–  ³  s    zGTestSnippetCreateView.test_after_create_snippet_hook.<locals>.hook_funcZafter_create_snippetr  rc  rd  re  rt   r˜  )	rš  rY  rm   rn   r{   r0  r?   rk   rž  rŸ  rX   rV   rY   Útest_after_create_snippet_hook²  s    
z4TestSnippetCreateView.test_after_create_snippet_hookc              	      s`   G dd„ dt ƒ‰ ‡ fdd„}|  d|¡ t ¡  |  ¡ }W 5 Q R X t ¡  | j|ddd d S )	Nc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )z_TestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItemÚTestÚtestÚcheckúaction-secondaryc                 S   s   dS ©NTrX   ©rW   r   rX   rX   rY   Úis_shownÊ  s    zhTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownN©r—   r˜   r™   r…   rŒ   r“   Ú	classnamer«  rX   rX   rX   rY   ÚTestSnippetActionMenuItemÄ  s
   r®  c                    s
   ˆ ddS ©Nr   ©ÚorderrX   r  ©r®  rX   rY   r–  Í  s    zOTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.hook_funcÚ!register_snippet_action_menu_itemúµ<button type="submit" name="test" value="Test" class="button action-secondary"><svg class="icon icon-check icon" aria-hidden="true"><use href="#icon-check"></use></svg>Test</button>Tr    ©r+   rš  r,   Úcache_clearr^   r‰   r›  rX   r²  rY   Ú&test_register_snippet_action_menu_itemÃ  s    	ýz<TestSnippetCreateView.test_register_snippet_action_menu_itemc              	   C   sJ   dd„ }|   d|¡ t ¡  |  ¡ }W 5 Q R X t ¡  |  |jd¡ d S )Nc                 S   s   d S rR   rX   r  rX   rX   rY   r–  Þ  s    zWTestSnippetCreateView.test_register_snippet_action_menu_item_as_none.<locals>.hook_funcr³  rt   )rš  r,   r¶  r^   rm   rn   r›  rX   rX   rY   Ú.test_register_snippet_action_menu_item_as_noneÝ  s    zDTestSnippetCreateView.test_register_snippet_action_menu_item_as_nonec              	      s^   G dd„ dt ƒ‰ ‡ ‡fdd„}ˆ d|¡ ˆ ¡ }W 5 Q R X ˆj|ddd ˆ |d	¡ d S )
Nc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )z[TestSnippetCreateView.test_construct_snippet_action_menu.<locals>.TestSnippetActionMenuItemr¥  r¦  r§  r¨  c                 S   s   dS r©  rX   rª  rX   rX   rY   r«  ð  s    zdTestSnippetCreateView.test_construct_snippet_action_menu.<locals>.TestSnippetActionMenuItem.is_shownNr¬  rX   rX   rX   rY   r®  ê  s
   r®  c                    sP   ˆ  | t¡ ˆ  |t¡ ˆ |d d¡ ˆ |d t¡ ˆ ddg| d d …< d S )NÚviewrª   rW  r   r°  )r”  r=  r   rm   r?   ©r•   r”   r   ©r®  rW   rX   rY   r–  ó  s
    zKTestSnippetCreateView.test_construct_snippet_action_menu.<locals>.hook_funcÚconstruct_snippet_action_menur´  Tr    z<em>'Save'</em>)r+   rš  r^   r‰   r†   r›  rX   r»  rY   Ú"test_construct_snippet_action_menué  s    		ýz8TestSnippetCreateView.test_construct_snippet_action_menuN)r—   r˜   r™   rZ   r?   r^   rY  rq   r‡   r`  rf  rn  ru  r€  r‰  r  rœ  r   r¤  r·  r¸  r½  rX   rX   rX   rY   rS    s$   
rS  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSnippetCopyViewc                 C   s:   t jjdd| _tt j d¡| jjfd| _|  	¡ | _
d S )NúTest snippetr¹   ÚcopyrÙ   )r;   rk   rª   r‘   r   rU  rV  r§   r„   rT   rU   rV   rX   rX   rY   rZ     s    
þzTestSnippetCopyView.setUpc                 C   s`   d| j _| j  ¡  tjjddd}| j j |¡ | j | j	¡}|  
|jd¡ |  |tdƒ¡ d S )NFrb   rc   rd   rf   Úwagtailadmin_home)rU   rh   rl   r   rk   r^   ri   rj   r]   r„   rm   rn   rq  r   )rW   Úadmin_permissionrp   rX   rX   rY   Útest_without_permission  s    
 ÿz+TestSnippetCopyView.test_without_permissionc                 C   sV   | j  | j¡}|  |jd¡ |  |d¡ |  |j¡}| d¡}|  |j	 d¡d¡ d S )Nrt   r[  zinput[name="text"]Úvaluer¿  )
r]   r^   r„   rm   rn   ry   rz   r{   r|   rÓ   )rW   rp   r   Z
text_inputrX   rX   rY   Útest_form_is_prefilled  s    
z*TestSnippetCopyView.test_form_is_prefilledN)r—   r˜   r™   rZ   rÃ  rÅ  rX   rX   rX   rY   r¾    s   r¾  c                   @   sD   e Zd ZdgZdd„ Zdd„ Zdd„ Zedd	d
d„ ƒZdd„ Z	dS )ÚTestLocaleSelectorOnCreateú	test.jsonc                 C   s   t jjdd| _|  ¡ | _d S rò   rõ   rV   rX   rX   rY   rZ   +  s    z TestLocaleSelectorOnCreate.setUpc                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S ©Nrú   úSwitch localesú
?locale=frú	<a href="ú" lang="fr">©r]   r^   r   r‰   ©rW   rp   Zswitch_to_french_urlrX   rX   rY   r  /  s    ÿÿÿ
þz/TestLocaleSelectorOnCreate.test_locale_selectorc                 C   sD   | j  tdƒd ¡}|  |d¡ tdƒd }|  |d|› d¡ d S )Nrú   rÊ  rÉ  rû   rË  z" lang="en">rÍ  )rW   rp   Zswitch_to_english_urlrX   rX   rY   Ú)test_locale_selector_with_existing_locale?  s    ÿÿÿÿ
þzDTestLocaleSelectorOnCreate.test_locale_selector_with_existing_localeFrð   c                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S rÈ  ©r]   r^   r   r†   rÎ  rX   rX   rY   r  P  s    ÿÿÿ
þzNTestLocaleSelectorOnCreate.test_locale_selector_not_present_when_i18n_disabledc                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S )Nr¢   rÉ  rú   rÊ  rË  rÌ  rÐ  rÎ  rX   rX   rY   r	  a  s    ÿÿ
þzWTestLocaleSelectorOnCreate.test_locale_selector_not_present_on_non_translatable_snippetN)
r—   r˜   r™   ÚfixturesrZ   r  rÏ  r   r  r	  rX   rX   rX   rY   rÆ  '  s   
rÆ  c                   @   st   e Zd ZdZdd„ Zdd„ Zi f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 )ÚTestCreateDraftStateSnippetú£data-side-panel-toggle="status"[^<]+<svg[^<]+<use[^<]+</use[^<]+</svg[^<]+<div data-side-panel-toggle-counter[^>]+w-bg-critical-200[^>]+>\s*%(num_errors)s\s*</div>c                 C   s   |   ¡ | _d S rR   rS   rV   rX   rX   rY   rZ   v  s    z!TestCreateDraftStateSnippet.setUpc                 C   s   | j  tdƒ¡S ©Nú)wagtailsnippets_tests_draftstatemodel:addr\   rV   rX   rX   rY   r^   y  s    zTestCreateDraftStateSnippet.getc                 C   s   | j  tdƒ|¡S rÔ  )r]   rY  r   ©rW   rZ  rX   rX   rY   rY  |  s    þz TestCreateDraftStateSnippet.postc                 C   sø   t dƒ}|  ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |j ¡ }| jd	|d
dd |  	|¡}| 
d¡}|  |¡ | jd|› d|d
dd | jd|d
dd |  |d¡ d}|  ||¡ |  |d¡ d S )NrÕ  rt   r[  ú
Save draftÚPublishúï<button
    type="submit"
    name="action-publish"
    value="action-publish"
    class="button action-save button-longrunning"
    data-controller="w-progress w-kbd"
    data-action="w-progress#activate"
    data-w-kbd-key-value="mod+s"
z><div class="form-side__panel" data-side-panel="status" hidden>úNo publishing schedule setz^<button type="button" data-a11y-dialog-show="schedule-publishing-dialog">Set schedule</button>r   T©rk  Úallow_extra_attrsú™
            template[data-controller="w-teleport"][data-w-teleport-target-value="[data-edit-form]"]
            #schedule-publishing-dialog
            ú<form action="ú" method="POST" data-edit-form>ú\<div id="schedule-publishing-dialog" class="w-dialog publishing" data-controller="w-dialog">z?Choose when this draft state model should go live and/or expirez0/admin/snippets/tests/draftstatemodel/unpublish/Ú	Unpublish)r   r^   rm   rn   ry   r‰   r{   ÚdecodeÚassertTagInHTMLrz   r|   rÇ   r†   )rW   r   rp   r¡   r   ÚdialogÚunpublish_urlrX   rX   rY   Útest_get‚  s\    þþ
ü
ÿ

üü ÿz$TestCreateDraftStateSnippet.test_getc                 C   s¤   | j ddid}tjjdd}|  |td|jgd¡ |  |jd¡ |  	|j
¡ |  |j¡ |  |j¡ |  |j¡ |  |j¡ |  |j¡ |  |jjd d¡ d S )Nr}   úDraft-enabled Foore  r¹   rë   rÙ   )rY  rD   rk   r^   rq  r   r§   rm   r}   r¶   r  r0  Úhas_unpublished_changesrÆ   Úfirst_published_atÚlast_published_atÚlive_revisionrÇ   Úlatest_revisionr{   rˆ  rX   rX   rY   Útest_save_draftÅ  s    þz+TestCreateDraftStateSnippet.test_save_draftc              	   C   s2  t  ¡ }t |¡ ztƒ }t|ƒ | jdddœd}W 5 Q R X tj	j
dd}|  |tdƒ¡ |  |jd¡ |  |j¡ |  |j¡ |  |j|¡ |  |j|¡ |  |j¡ |  |j|j¡ |  |jjd d¡ |  |jd¡ |jd	 d
 }|  |d t¡ |  |d |¡ |  |d t¡ W 5 t |¡ X d S )Nrè   úaction-publish©r}   rî  re  r¹   rê   r}   r   r   rÏ   Úsenderr£  )r   Ú	MagicMockr)   ÚconnectÚ
disconnectr   r   rY  rD   rk   r^   rq  r   rm   r}   r0  r  r¶   rè  ré  rê  rÇ   rë  rì  r{   Ú
call_countÚ
mock_callsr”  )rW   Úmock_handlerr  rp   r‘   Ú	mock_callrX   rX   rY   Útest_publishÞ  s@    

þÿ ÿ
þz(TestCreateDraftStateSnippet.test_publishc              	   C   s  d| j _tjjddd}tjjddd}tjjddd}| j j |||¡ | j  ¡  t 	¡ }t
 |¡ zœ| jdd	d
œd}tjjdd}|  |td|jgd¡ |  |jd¡ |  |j¡ |  |j¡ |  |j¡ |  |j¡ |  |jjd d¡ |  |jd¡ W 5 t
 |¡ X d S )NFrr   Úadd_draftstatemodelrd   Úchange_draftstatemodelrb   rc   rç  rî  rï  re  r¹   rë   rÙ   r}   r   )rU   rh   r   rk   r^   ri   rj   rl   r   rñ  r)   rò  ró  rY  rD   rq  r   r§   rm   r}   r¶   r  r0  rè  rÇ   rì  rÆ   rë  r{   rô  )rW   Úadd_permissionÚedit_permissionrÂ  rö  rp   r‘   rX   rX   rY   Útest_publish_bad_permissions  s\    þþþý

þÿþþ	
þz8TestCreateDraftStateSnippet.test_publish_bad_permissionsc           	   	   C   s†  d| j _tjjddd}tjjddd}tjjddd}| j j |||¡ | j  ¡  t 	¡ }t
 |¡ ztƒ }t|ƒ | jdd	d
œd}W 5 Q R X tjjdd}|  |tdƒ¡ |  |jd¡ |  |j¡ |  |j¡ |  |j|¡ |  |j|¡ |  |j¡ |  |j|j¡ |  |jjd d¡ |  |jd¡ |j d d }|  |d t¡ |  |d |¡ |  !|d t¡ W 5 t
 |¡ X d S )NFrr   rù  rd   Úpublish_draftstatemodelrb   rc   rè   rî  rï  re  r¹   rê   r}   r   r   rÏ   rð  r£  )"rU   rh   r   rk   r^   ri   rj   rl   r   rñ  r)   rò  ró  r   r   rY  rD   rq  r   rm   r}   r0  r  r¶   rè  ré  rê  rÇ   rë  rì  r{   rô  rõ  r”  )	rW   rû  Úpublish_permissionrÂ  rö  r  rp   r‘   r÷  rX   rX   rY   Ú$test_publish_with_publish_permissionQ  sf    þþþý


þÿ ÿ
þz@TestCreateDraftStateSnippet.test_publish_with_publish_permissionc                 C   sÐ   t ƒ tjdd }t ƒ tjdd }| jdt|ƒt|ƒdœd}tjjdd}|  |t	d|j
gd	¡ |  |j ¡ | ¡ ¡ |  |j ¡ | ¡ ¡ |  |jd
¡ |  |jd¡ |  tj |¡jdd ¡ ¡ d S )Nr   ©ÚdaysrÏ   úSome content©r}   Ú
go_live_atÚ	expire_atre  r¹   rë   rÙ   Fr  T©Zapproved_go_live_at__isnull)r   ÚdatetimeÚ	timedeltarY  rN   rD   rk   r^   rq  r   r§   rm   r  Údater  ÚassertIsÚexpiredÚstatus_stringr¶   r(   r  Úexcluderž  ©rW   r  r  rp   r‘   rX   rX   rY   Útest_create_scheduled—  s,    ýÿþÿÿz1TestCreateDraftStateSnippet.test_create_scheduledc                 C   s¢   | j dttƒ tjdd ƒttƒ tjdd ƒdœd}|  |jd¡ |  |jd d	d
¡ |  |jd dd
¡ | j	|ddd d}|  
|j ¡ | jd|i ¡ d S ©Nr  rÏ   r  r   r  re  rt   Úformr  z1Go live date/time must be before expiry date/timer  ú<<div class="w-label-3 w-text-primary">Invalid schedule</div>Tr    Ú
num_errors©rY  rN   r   r  r	  rm   rn   ZassertFormErrorr   r‰   ÚassertRegexr{   râ  ÚSTATUS_TOGGLE_BADGE_REGEX©rW   rp   r  rX   rX   rY   Ú+test_create_scheduled_go_live_before_expiry·  s6    ýÿýýýþzGTestCreateDraftStateSnippet.test_create_scheduled_go_live_before_expiryc                 C   sz   | j dttƒ tjdd ƒdœd}|  |jd¡ |  |jd dd	¡ | j	|d
dd d}|  
|j ¡ | jd|i ¡ d S ©Nr  r*  r  )r}   r  re  rt   r  r  z&Expiry date/time must be in the futurer  Tr    r   r  r  r  rX   rX   rY   Ú(test_create_scheduled_expire_in_the_pastÜ  s*    þÿýýþzDTestCreateDraftStateSnippet.test_create_scheduled_expire_in_the_pastc                 C   sâ   t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ tjj	dd	}|  
|j ¡ | ¡ ¡ |  
|j ¡ | ¡ ¡ |  |jd
¡ |  tj |¡jdd ¡ ¡ |  |j¡ |  |j¡ |  
|jd¡ d S )Nr   r  rÏ   r  rØ  ©r}   rî  r  r  re  rê   r¹   FTr  Ú	scheduled)r   r  r	  rY  rN   rq  r   rD   rk   r^   rm   r  r
  r  r  r  r0  r(   r  r  rž  r¶   r  ré  r  r  rX   rX   rY   Ú"test_create_post_publish_scheduledû  s2    üÿ
 ÿÿÿz>TestCreateDraftStateSnippet.test_create_post_publish_scheduledN)r—   r˜   r™   r  rZ   r^   rY  ræ  rí  rø  rý  r   r  r  r  r  rX   rX   rX   rY   rÒ  p  s   ÿC1BF %rÒ  c                   @   s>   e Zd Zdd„ Zi fdd„Zi fdd„Zdd„ Zdd
d„ZdS )ÚBaseTestSnippetEditViewc                 C   s&   | j }t|jƒg}t|j d¡|dS ©NÚeditrÙ   )Útest_snippetr   r§   r   rU  rV  )rW   r‘   rÚ   rX   rX   rY   Úget_edit_url  s    z$BaseTestSnippetEditView.get_edit_urlc                 C   s   | j  |  ¡ |¡S rR   )r]   r^   r#  r_   rX   rX   rY   r^   $  s    zBaseTestSnippetEditView.getc                 C   s   | j  |  ¡ |¡S rR   )r]   rY  r#  rÖ  rX   rX   rY   rY  '  s    zBaseTestSnippetEditView.postc                 C   s   |   ¡ | _d S rR   rS   rV   rX   rX   rY   rZ   *  s    zBaseTestSnippetEditView.setUpúEdit schedulec                 C   sv   |j  ¡ }| jd|› d|ddd |  |¡}| d¡}|  |¡ | jd|  ¡ › d|ddd | jd	|ddd d S )
NzI<button type="button" data-a11y-dialog-show="schedule-publishing-dialog">z	</button>r   TrÛ  rÝ  rÞ  rß  rà  )r{   râ  rã  rz   r|   rÇ   r#  )rW   rp   r…   r¡   r   rä  rX   rX   rY   ÚassertSchedulingDialogRendered-  s0    

ü
ÿ
üüz6BaseTestSnippetEditView.assertSchedulingDialogRenderedN)r$  )r—   r˜   r™   r#  r^   rY  rZ   r%  rX   rX   rX   rY   r    s
   r  c                       sŠ   e Zd ZdgZ‡ f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‡  ZS )ÚTestSnippetEditViewrÇ  c                    sN   t ƒ  ¡  tjjdd| _tjjtj 	t¡ddt
ƒ tjdd | jdd d S )	Nr   ©r§   r  r  rÝ   )ÚweeksÚ1)r  r…   r  r  rU   r  )ÚsuperrZ   r?   rk   r^   r"  r'   rª   r	   r  r   r  r	  rU   rV   ©Ú	__class__rX   rY   rZ   Q  s    

úzTestSnippetEditView.setUpc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ra   rg   ro   rX   rX   rY   rq   ]  s     ÿÿ
z5TestSnippetEditView.test_get_with_limited_permissionsc                 C   sÞ   |   ¡ }|j ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ tdt| j	j
ƒgd}| j||dd td	t| j	j
ƒgd}|  ||¡ |  |d
¡ | jd|› d|dd t| jƒ}d| j	j
 }|  | | j	¡|¡ d S )Nrt   ú"wagtailsnippets/snippets/edit.htmlr\  rÚ  z$wagtailsnippets_tests_advert:historyrÙ   rÏ   rj  ú"wagtailsnippets_tests_advert:usageu   3Â weeks agorË  z9" aria-describedby="status-sidebar-live">View history</a>T©rÜ  z%/admin/snippets/tests/advert/edit/%d/)r^   r{   râ  rm   rn   ry   r†   r   r   r"  r§   r‰   rã  r   rU   r#  )rW   rp   r¡   Zhistory_urlZ	usage_urlÚ
url_finderZexpected_urlrX   rX   rY   r‡   i  s2    
 ÿ ÿ
ý
zTestSnippetEditView.test_simplec                 C   s.   | j  dt| jjƒ› d¡}|  |jd¡ d S )Nz/admin/snippets/tests/foo/edit/ú/r°   )r]   r^   r   r"  r§   rm   rn   ro   rX   rX   rY   Útest_non_existent_model‹  s    ÿz+TestSnippetEditView.test_non_existent_modelc                 C   s(   | j  tddgd¡}|  |jd¡ d S )Nú!wagtailsnippets_tests_advert:edité?B rÙ   r°   )r]   r^   r   rm   rn   ro   rX   rX   rY   Útest_nonexistent_id‘  s    ÿz'TestSnippetEditView.test_nonexistent_idc                 C   sl   d| j _| j j tjjddd¡ | j  ¡  | jdddœd}|  	|j
d	¡ t| j ƒ}|  | | j¡¡ d S ra  )rU   rh   ri   rj   r   rk   r^   rl   rY  rm   rn   r   rÆ   r#  r"  )rW   rp   r0  rX   rX   rY   Ú"test_edit_with_limited_permissions—  s     ÿÿ
ÿ
z6TestSnippetEditView.test_edit_with_limited_permissionsc                 C   s@   | j ddid}|  |d¡ | j|ddd | j|ddd d S )	Nrg  rh  re  z,The advert could not be saved due to errors.ri  r   rj  rl  rm  ro   rX   rX   rY   Útest_edit_invalid¨  s    z%TestSnippetEditView.test_edit_invalidc                 C   sV   | j dddœd}|  |tdƒ¡ tjjdd}|  | ¡ d¡ |  | ¡ j	d¡ d S )NÚedited_test_advertúhttp://www.example.com/editedrd  re  rw   r¹   r   rp  rt  rX   rX   rY   Ú	test_edit®  s    þÿzTestSnippetEditView.test_editc                 C   s„   ddg}| j ddd |¡dœd}|  |tdƒ¡ tjjdd	}ttj 	d
¡j
|dƒ}|  t|ƒd¡ |  t|j 	d
¡ƒ|¡ d S )Nrv  rw  r8  r9  rx  ry  re  rw   r¹   rŒ   r{  rÏ   r|  r  rX   rX   rY   Útest_edit_with_tags»  s    ýÿz'TestSnippetEditView.test_edit_with_tagsc              	      sL   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W 5 Q R X ˆ  |jd¡ ˆ  |jd¡ d S )Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS ©Nro  úhttp://www.example.comr’  r¡  r¢  rV   rX   rY   r–  Î  s    zHTestSnippetEditView.test_before_edit_snippet_hook_get.<locals>.hook_funcÚbefore_edit_snippetrt   r˜  r™  r›  rX   rV   rY   Ú!test_before_edit_snippet_hook_getÍ  s
    z5TestSnippetEditView.test_before_edit_snippet_hook_getc              	      sj   ‡ fdd„}ˆ   d|¡ ˆ jdddœd}W 5 Q R X ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd
¡ d S )Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS r<  r¡  r¢  rV   rX   rY   r–  Û  s    zITestSnippetEditView.test_before_edit_snippet_hook_post.<locals>.hook_funcr>  úEdited and runs hookú*http://www.example.com/hook-enabled-editedrd  re  rt   r˜  ro  ©	rš  rY  rm   rn   r{   r?   rk   r^   r}   r›  rX   rV   rY   Ú"test_before_edit_snippet_hook_postÚ  s    þÿz6TestSnippetEditView.test_before_edit_snippet_hook_postc              	      sj   ‡ fdd„}ˆ   d|¡ ˆ jdddœd}W 5 Q R X ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd¡ d S )
Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS )Nr@  rA  r’  r¡  r¢  rV   rX   rY   r–  ð  s    zCTestSnippetEditView.test_after_edit_snippet_hook.<locals>.hook_funcZafter_edit_snippetr@  rA  rd  re  rt   r˜  rB  r›  rX   rV   rY   Útest_after_edit_snippet_hookï  s    þÿz0TestSnippetEditView.test_after_edit_snippet_hookc              	      s`   G dd„ dt ƒ‰ ‡ fdd„}|  d|¡ t ¡  |  ¡ }W 5 Q R X t ¡  | j|ddd d S )	Nc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )z]TestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItemr¥  r¦  r§  r¨  c                 S   s   dS r©  rX   rª  rX   rX   rY   r«    s    zfTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownNr¬  rX   rX   rX   rY   r®    s
   r®  c                    s
   ˆ ddS r¯  rX   r  r²  rX   rY   r–    s    zMTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.hook_funcr³  r´  Tr    rµ  r›  rX   r²  rY   r·    s    	ýz:TestSnippetEditView.test_register_snippet_action_menu_itemc              	      s<   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W 5 Q R X ˆ  |d¡ d S )Nc                    sT   ˆ   | t¡ ˆ   |t¡ ˆ  |d d¡ ˆ  |d ˆ j¡ ˆ  |d t¡ | d= d S )Nr¹  r!  r£  rW  r   )r”  r=  r   rm   r"  r?   rº  rV   rX   rY   r–    s    zITestSnippetEditView.test_construct_snippet_action_menu.<locals>.hook_funcr¼  z<em>Save</em>)rš  r^   r†   r›  rX   rV   rY   r½    s    
z6TestSnippetEditView.test_construct_snippet_action_menu)r—   r˜   r™   rÑ  rZ   rq   r‡   r2  r5  r6  r7  r:  r;  r?  rC  rD  r·  r½  Ú__classcell__rX   rX   r+  rY   r&  N  s   "r&  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditTabbedSnippetc                    s"   t ƒ  ¡  tjjdddd| _d S )Nro  r=  zModel with tabbed interface)r}   r„   Zsomething_else)r*  rZ   rB   rk   rª   r"  rV   r+  rX   rY   rZ   0  s    
ýzTestEditTabbedSnippet.setUpc                 C   sJ   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nrt   r-  r\  r]  r^  )r^   rm   rn   ry   r‰   ro   rX   rX   rY   r`  8  s    þþz8TestEditTabbedSnippet.test_snippet_with_tabbed_interface)r—   r˜   r™   rZ   r`  rE  rX   rX   r+  rY   rF  /  s   rF  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditFileUploadSnippetc                    s$   t ƒ  ¡  tjjtddƒd| _d S )Ns   Simple text documentr„  )rƒ  )r*  rZ   r6   rk   rª   r   r"  rV   r+  rX   rY   rZ   I  s    
ÿzTestEditFileUploadSnippet.setUpc                 C   sZ   |   ¡ }|  |d¡ | jdtddƒid}|  |tdƒ¡ tj  ¡ }|  |j	 
¡ d¡ d S )Nr‚  rƒ  zreplacement.txts   Replacement documentre  r†  )r^   r‰   rY  r   rq  r   r6   rk   rm   rƒ  r‡  rˆ  rX   rX   rY   Útest_edit_file_upload_multipartO  s     ÿÿþ
z9TestEditFileUploadSnippet.test_edit_file_upload_multipart)r—   r˜   r™   rZ   rH  rE  rX   rX   r+  rY   rG  H  s   rG  c                       sT   e Zd ZdgZdZdZ‡ fdd„Zdd„ Zdd	„ Ze	d
ddd„ ƒZ
dd„ Z‡  ZS )ÚTestLocaleSelectorOnEditrÇ  rÉ  z<h3 id="status-sidebar-english"c                    sH   t ƒ  ¡  tjjdd| _tjjdd| _| j | j¡| _	| j	 
¡  d S )NzThis is a testr¹   ró   rô   )r*  rZ   r=   rk   rª   r"  r&   rö   Zcopy_for_translationÚtest_snippet_frrl   rV   r+  rX   rY   rZ   g  s
    
zTestLocaleSelectorOnEdit.setUpc                 C   s(   |   ¡ }|  || j¡ |  || j¡ d S rR   )r^   r‰   ÚLOCALE_SELECTOR_LABELÚLOCALE_INDICATOR_HTMLro   rX   rX   rY   r  n  s    z-TestLocaleSelectorOnEdit.test_locale_selectorc                 C   s>   | j  ¡  |  ¡ }|  || j¡ |  || j¡ |  |d¡ d S )NzNo other translations)rJ  r  r^   r†   rK  r‰   rL  ro   rX   rX   rY   Ú(test_locale_selector_without_translations  s
    
zATestLocaleSelectorOnEdit.test_locale_selector_without_translationFrð   c                 C   s(   |   ¡ }|  || j¡ |  || j¡ d S rR   )r^   r†   rK  rL  ro   rX   rX   rY   r  |  s    zLTestLocaleSelectorOnEdit.test_locale_selector_not_present_when_i18n_disabledc                 C   s8   t jjdd| _|  ¡ }|  || j¡ |  || j¡ d S ©Nr   r'  )r?   rk   r^   r"  r†   rK  rL  ro   rX   rX   rY   r	  ‚  s    zUTestLocaleSelectorOnEdit.test_locale_selector_not_present_on_non_translatable_snippet)r—   r˜   r™   rÑ  rK  rL  rZ   r  rM  r   r  r	  rE  rX   rX   r+  rY   rI  `  s   	
rI  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditRevisionSnippetc                    s   t ƒ  ¡  tjjdd| _d S )Nrg  r¹   )r*  rZ   rH   rk   rª   r"  rV   r+  rX   rY   rZ   Š  s    
zTestEditRevisionSnippet.setUpc                 C   s¬   | j ddid}|  |tdƒ¡ tjjdd}|  | ¡ d¡ | jj	}| 
¡ }|  | ¡ d¡ |  |jd d¡ tj | j¡jdd}|  | ¡ d¡ |  | 
¡ j|¡ d S )	Nr}   rh  re  rŠ  r¹   r   úwagtail.editr‹  )rY  rq  r   rH   rk   rr  rm   rk  r"  rŒ  rs  r{   r'   r  rŽ  )rW   rp   r‹   rŒ  rŽ  r  rX   rX   rY   Útest_edit_snippet_with_revisionŽ  s      ÿÿz7TestEditRevisionSnippet.test_edit_snippet_with_revision)r—   r˜   r™   rZ   rQ  rE  rX   rX   r+  rY   rO  ‰  s   rO  c                       sØ   e Zd ZdZ‡ f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 d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z‡  ZS )2ÚTestEditDraftStateSnippetrÓ  c                    s"   t ƒ  ¡  tjjdddd| _d S )Núcustom/1rç  F©Ú	custom_idr}   r  )r*  rZ   rC   rk   rª   r"  rV   r+  rX   rY   rZ   ¬  s    
  ÿzTestEditDraftStateSnippet.setUpc                 C   s¦   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ | j|dd |  |d	¡ td
t| jj	ƒfd}|  
|d|› d¡ |  
|d¡ d S )Nrt   r-  r×  rØ  rÙ  rÚ  zSet schedule)r…   zRChoose when this draft state custom primary key model should go live and/or expireú?wagtailsnippets_tests_draftstatecustomprimarykeymodel:unpublishrÙ   ú)<a class="button action-secondary" href="ú">rá  )r^   rm   rn   ry   r‰   r%  r   r   r"  r§   r†   ©rW   rp   rå  rX   rX   rY   ræ  ²  s0    þþþ
þz"TestEditDraftStateSnippet.test_getc                 C   sÌ   | j ddid}| j ¡  tj | j¡}| jj}|  ||  ¡ ¡ |  	| jj
d¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  	| ¡ d¡ |  	|| ¡ ¡ |  	|jd d¡ d S )Nr}   úDraft-enabled Barre  r   )rY  r"  Úrefresh_from_dbr(   rk   r  rì  rq  r#  rm   r}   r¶   r  r0  rè  rÆ   ré  rê  rë  rk  rs  r{   )rW   rp   rŒ  rì  rX   rX   rY   rí  Ù  s    
z)TestEditDraftStateSnippet.test_save_draftc           	   	   C   s¦  t  ¡ }t |¡ z€tƒ }t|ƒ | jdddœd}W 5 Q R X | j 	¡  t
j | j¡}| jj}tjjtj t¡d| jjd}| ¡ }|  |tdƒ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj|¡ |  | jj|¡ |  | jj|¡ |  |  ¡ d¡ |  || ¡ ¡ |  |j!d	 d¡ |  |  ¡ d¡ |  |j"|¡ |  |j#d¡ |j$d
 d }|  |d t¡ |  |d | j¡ |  %|d t¡ W 5 t |¡ X d S )NúDraft-enabled Bar, Publishedrî  rï  re  úwagtail.publish©r  r  r  ú:wagtailsnippets_tests_draftstatecustomprimarykeymodel:listr   r}   r   rÏ   rð  r£  )&r   rñ  r)   rò  ró  r   r   rY  r"  r[  r(   rk   r  rì  r'   rr  r	   r  rC   r§   rs  rq  r   rm   r}   r0  r  r¶   rè  ré  rê  rë  rk  r{   r  rô  rõ  r”  )	rW   rö  r  rp   rŒ  rì  r  Ú	log_entryr÷  rX   rX   rY   rø  ò  s`    

þÿ
ÿûþþ ÿz&TestEditDraftStateSnippet.test_publishc              	   C   s  d| j _tjjddd}tjjddd}| j j ||¡ | j  ¡  t 	¡ }t
 |¡ zœ| jddd	œd
}| j ¡  |  ||  ¡ ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jjjd d¡ |  |jd¡ W 5 t
 |¡ X d S )NFrr   Ú&change_draftstatecustomprimarykeymodelrd   rb   rc   zEdited draft Foorî  rï  re  r}   r   )rU   rh   r   rk   r^   ri   rj   rl   r   rñ  r)   rò  ró  rY  r"  r[  rq  r#  rm   r}   r¶   r  r0  rè  rÇ   rì  rÆ   rë  r{   rô  )rW   rü  rÂ  rö  rp   rX   rX   rY   rý  7  s@    þþ

þÿ
þz6TestEditDraftStateSnippet.test_publish_bad_permissionsc              	   C   sú  d| j _tjjddd}tjjddd}tjjddd}| j j |||¡ | j  ¡  t 	¡ }t
 |¡ z€tƒ }t|ƒ | jdd	d
œd}W 5 Q R X | j ¡  tj | j¡}| jj}tjjtj t¡d| jjd}	|	 ¡ }
|  |tdƒ¡ |  | jjd¡ |   | jj!¡ |  "| jj#¡ |  | jj$|¡ |  | jj%|¡ |  | jj&|¡ |  | '¡ d¡ |  || ¡ ¡ |  |j(d d¡ |  |	 '¡ d¡ |  |
j)|¡ |  |j*d¡ |j+d d }|  |d t¡ |  |d | j¡ |  ,|d t¡ W 5 t
 |¡ X d S )NFrr   ra  rd   Ú'publish_draftstatecustomprimarykeymodelrb   rc   r\  rî  rï  re  r]  r^  r_  r   r}   r   rÏ   rð  r£  )-rU   rh   r   rk   r^   ri   rj   rl   r   rñ  r)   rò  ró  r   r   rY  r"  r[  r(   r  rì  r'   rr  r	   r  rC   r§   rs  rq  r   rm   r}   r0  r  r¶   rè  ré  rê  rë  rk  r{   r  rô  rõ  r”  )rW   rü  rÿ  rÂ  rö  r  rp   rŒ  rì  r  r`  r÷  rX   rX   rY   r   k  s†    þþ ÿý


þÿ
ÿûþþ ÿz>TestEditDraftStateSnippet.test_publish_with_publish_permissionc              	   C   s   t ƒ }t|ƒ d| j_| j ¡  W 5 Q R X t ƒ }t|ƒ | jdddœd}W 5 Q R X | j ¡  tj 	| j¡ 
d¡}| jj}|  |tdƒ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj|¡ |  | jj|¡ |  | jj|¡ |  | ¡ d¡ |  || ¡ ¡ |  |jd	 d¡ d S )
Nré   z Draft-enabled Bar, Now Publishedrî  rï  re  r§   r_  rÏ   r}   )r   r   r"  r}   rì   rY  r[  r(   rk   r  r~  rì  rq  r   rm   r0  r  r¶   rè  ré  rê  rë  rk  Úlastr{   )rW   Úsave_timestampÚpublish_timestamprp   rŒ  rì  rX   rX   rY   Útest_save_draft_then_publishÄ  s<    

þÿ
þþz6TestEditDraftStateSnippet.test_save_draft_then_publishc              	   C   s&  t ƒ }t|ƒ d| j_| j ¡  ¡  W 5 Q R X t ƒ }t|ƒ | jddid}W 5 Q R X | j ¡  tj	 
| j¡ d¡}| jj}|  ||  ¡ ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj|¡ |  | jj|¡ |  | jj| ¡ ¡ |  | ¡ d¡ |  || ¡ ¡ |  |jd d¡ d S )Nr\  r}   z)Draft-enabled Bar, Published and In Draftre  r§   rÏ   )r   r   r"  r}   rì   rí   rY  r[  r(   rk   r  r~  rì  rq  r#  rm   r0  r  rè  ré  rê  rë  rs  rk  rc  r{   )rW   re  rd  rp   rŒ  rì  rX   rX   rY   Útest_publish_then_save_draftð  s2    

ÿ
þz6TestEditDraftStateSnippet.test_publish_then_save_draftc              	   C   s4  t ƒ }t|ƒ d| j_| j ¡  ¡  W 5 Q R X t ƒ tjdd }t|ƒ | jdddœd}W 5 Q R X | j 	¡  t
j | j¡ d¡}| jj}|  |td	ƒ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj|¡ |  | jj|¡ |  | jj| ¡ ¡ |  | ¡ d
¡ |  || ¡ ¡ |  |jd d¡ d S )Nz!Draft-enabled Bar, Published Oncer   r  z"Draft-enabled Bar, Published Twicerî  rï  re  r§   r_  rÏ   r}   )r   r   r"  r}   rì   rí   r  r	  rY  r[  r(   rk   r  r~  rì  rq  r   rm   r0  r  r¶   rè  ré  rê  rë  rc  rk  r{   )rW   Zfirst_timestampZsecond_timestamprp   rŒ  rì  rX   rX   rY   Útest_publish_twice	  s<    

þÿ
þþz,TestEditDraftStateSnippet.test_publish_twicec                 C   sŒ   | j ddid |  ¡ }|  |jd¡ |  |d¡ | j|ddd | j|d	dd td
t| j	j
ƒfd}|  |d|› d¡ |  |d¡ d S )Nr}   rZ  re  rt   r-  ún<h3 id="status-sidebar-live" class="w-label-1 !w-mt-0 w-mb-1"><span class="w-sr-only">Status: </span>Live</h3>Tr    úp<h3 id="status-sidebar-draft" class="w-label-1 !w-mt-0 w-mb-1"><span class="w-sr-only">Status: </span>Draft</h3>rV  rÙ   rW  rX  rá  )rY  r^   rm   rn   ry   r†   r‰   r   r   r"  r§   rY  rX   rX   rY   Útest_get_after_save_draftK	  s.    ýýþ
þz3TestEditDraftStateSnippet.test_get_after_save_draftc                 C   sŽ   | j dddœd |  ¡ }|  |jd¡ |  |d¡ | j|ddd	 | j|d
dd	 tdt| j	j
ƒfd}|  |d|› d¡ |  |d¡ d S )Nr\  rî  rï  re  rt   r-  ri  Tr    rj  rV  rÙ   rW  rX  rá  )rY  r^   rm   rn   ry   r‰   r†   r   r   r"  r§   rY  rX   rX   rY   Útest_get_after_publishj	  s6    þÿýýþ
þz0TestEditDraftStateSnippet.test_get_after_publishc                 C   s  | j dddœd | j ddid |  ¡ }|j ¡ }|  |jd¡ |  |d¡ | j|d	d
d | j|dd
d tdt	| j
jƒfd}|  |d|› d¡ |  |d¡ |  |j¡}| d¡}|  |¡ | d¡}|  |¡ |  |d d¡ |  |j ¡ d¡ | jd|d
d d S )Nr\  rî  rï  re  r}   ré   rt   r-  ri  Tr    rj  rV  rÙ   rW  rX  rá  z#header-titlezsvg userv   z#icon-snippetz<<textarea name="text">Draft-enabled Bar, In Draft</textarea>r/  )rY  r^   r{   râ  rm   rn   ry   r‰   r   r   r"  r§   rz   r|   rÇ   r}   r~   rã  )rW   rp   r¡   rå  r   Zh2ÚiconrX   rX   rY   Ú%test_get_after_publish_and_save_draftŽ	  sR    þÿ
ýýþ
þ



ýz?TestEditDraftStateSnippet.test_get_after_publish_and_save_draftc                 C   sT  | j  ¡  ¡  tƒ tjdd }tƒ tjdd }| jdt|ƒt|ƒdœd}|  |t	dt
| j jƒgd¡ | j  ¡  |  | j j¡ |  tj | j ¡jd	d
 ¡ ¡ |  tj | j ¡jt| ¡ ƒd ¡ ¡ |  tj | j ¡jt| ¡ ƒd ¡ ¡ |  ¡ }| j|dd	dd | j|dt|ƒ› d	dd | j|dt|ƒ› d	dd |  |¡ d S )Nr»   r  é   r  r  re  ú:wagtailsnippets_tests_draftstatecustomprimarykeymodel:editrÙ   Tr  ©Zcontent__go_live_at__startswith©Zcontent__expire_at__startswithú;<div class="w-label-3 w-text-primary">Once published:</div>r   ©r¡   rk  ú.<span class="w-text-grey-600">Go-live:</span> ú-<span class="w-text-grey-600">Expiry:</span> )r"  rì   rí   r   r  r	  rY  rN   rq  r   r   r§   r[  r0  r  r¶   r(   rk   r  r  rž  rr  Ústrr
  r^   r‰   rP   r%  ©rW   r  r  rp   rX   rX   rY   Útest_edit_post_scheduledÃ	  sj    ýÿ	þþ
ÿÿ
þÿ
þÿ	üüüz2TestEditDraftStateSnippet.test_edit_post_scheduledc                 C   s¢   | j dttƒ tjdd ƒttƒ tjdd ƒdœd}|  |jd¡ |  |jd d	d
¡ |  |jd dd
¡ | j	|ddd d}|  
|j ¡ | jd|i ¡ d S r  r  r  rX   rX   rY   Ú)test_edit_scheduled_go_live_before_expiry
  s6    ýÿýýýþzCTestEditDraftStateSnippet.test_edit_scheduled_go_live_before_expiryc                 C   sz   | j dttƒ tjdd ƒdœd}|  |jd¡ |  |jd dd	¡ | j	|d
dd d}|  
|j ¡ | jd|i ¡ d S r  r  r  rX   rX   rY   Ú&test_edit_scheduled_expire_in_the_past4
  s*    þÿýýþz@TestEditDraftStateSnippet.test_edit_scheduled_expire_in_the_pastc                 C   s.  t ƒ tjdd | j_t ƒ tjdd | j_| j ¡ }t ƒ tjdd }t ƒ tjdd }| jdt|ƒt|ƒdœd}|  	|j
d	¡ | j ¡  |  | jj¡ |  	| jj|j¡ | j|d
dd | j|ddd | j|ddd |j ¡ }| jd|ddd | j|ddd d}|  |j ¡ | jd|i ¡ d S )Nr   r  rÏ   r»   iìÿÿÿzSome edited contentr  re  rt   rs  Tr    z-<span class="w-text-grey-600">Go-live:</span>z,<span class="w-text-grey-600">Expiry:</span>ú_<button type="button" data-a11y-dialog-show="schedule-publishing-dialog">Edit schedule</button>rÛ  r  r  )r   r  r	  r"  r  r  rì   rY  rN   rm   rn   r[  r¶   r  Zlatest_revision_idr§   r†   r{   râ  rã  r‰   r  r  )rW   rì  r  r  rp   r¡   r  rX   rX   rY   Ú<test_edit_post_invalid_schedule_with_existing_draft_scheduleS
  s^    
ýÿ	
ýýý
üýþzVTestEditDraftStateSnippet.test_edit_post_invalid_schedule_with_existing_draft_schedulec                 C   sŠ   | j  ¡  ¡  | j  ¡  | j jtƒ  }tƒ tjdd }| jddt	|ƒdœd | j  ¡  | j jtƒ  }|  
|j|j¡ |  |jd¡ dS )	zdTest that we can update the first_published_at via the edit form,
        for models that expose it.rÏ   r  úI've been edited!rî  )r}   rî  ré  re  éýÿÿÿN)r"  rì   rí   r[  ré  r   r  r	  rY  rN   ÚassertNotEqualr  rm   )rW   Zinitial_deltaré  Z	new_deltarX   rX   rY   Ú test_first_published_at_editable•
  s    
ýÿ
z:TestEditDraftStateSnippet.test_first_published_at_editablec                 C   s
  t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  tj | j¡jd	d
 ¡ ¡ | j| jjdd |  | jjd¡ |  ¡ }| j|dd	d | j|dt|ƒ› d	dd | j|dt|ƒ› d	dd |  |¡ d S )Nr   r  rÏ   r  rØ  r  re  r_  Tr  úRAn object scheduled for future publishing should have has_unpublished_changes=True©Úmsgr  rs  r    ru  rt  rv  )r   r  r	  rY  rN   rq  r   r"  r[  r¶   r  r0  r(   rk   r  r  rž  rè  rm   r  r^   r†   r‰   rP   r%  rx  rX   rX   rY   Ú,test_edit_post_publish_scheduled_unpublished°
  sX    üÿ
þ
ÿÿþýüüzFTestEditDraftStateSnippet.test_edit_post_publish_scheduled_unpublishedc                 C   s  t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd	¡ |  tj | j¡jd
d ¡ ¡ | jddddœd}|  |tdƒ¡ | j ¡  |  | jj
¡ |  	tj | j¡jd
d ¡ ¡ |  ¡ }|  |¡ d S )Nr   r  rÏ   r  rØ  r  re  r_  r  Tr  r‚   ©r}   rî  r  )r   r  r	  rY  rN   rq  r   r"  r[  r¶   r  rm   r  r0  r(   rk   r  r  rž  r^   r%  rx  rX   rX   rY   Ú;test_edit_post_publish_now_an_already_scheduled_unpublishedí
  sP    üÿ
þ
ÿÿýÿ	þ
ÿÿzUTestEditDraftStateSnippet.test_edit_post_publish_now_an_already_scheduled_unpublishedc                 C   sZ  | j  ¡  ¡  | j  ¡  | j j}tƒ tjdd }tƒ tjdd }| jddt	|ƒt	|ƒdœd}|  
|tdƒ¡ tjj| j jd	| _ |  | j j¡ |  | j jd
¡ |  tj | j ¡jdd ¡ ¡ | j| j jdd |  | j  ¡ |d¡ |  | j jdd¡ |  ¡ }| j|ddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nr   r  rÏ   r~  rØ  r  re  r_  r'  úlive + scheduledTr  r‚  rƒ  zcAn object scheduled for future publishing should have a new revision, that is not the live revisionrç  zNA live object with a scheduled revision should still have the original contentrs  r    ru  rt  rv  ) r"  rì   rí   r[  rë  r   r  r	  rY  rN   rq  r   rC   rk   r^   r§   r0  r  rm   r  r(   r  r  rž  rè  r€  Úget_latest_revisionr}   r†   r‰   rP   r%  )rW   rë  r  r  rp   rX   rX   rY   Ú*test_edit_post_publish_scheduled_published,  sv    
üÿ
þÿÿÿþýýýüüzDTestEditDraftStateSnippet.test_edit_post_publish_scheduled_publishedc                 C   s  | j  ¡  ¡  tƒ tjdd }tƒ tjdd }| jddt|ƒt|ƒdœd}|  |t	dƒ¡ | j  
¡  |  | j j¡ |  tj | j ¡jd	d
 ¡ ¡ |  | j jdd¡ | jddddœd}|  |t	dƒ¡ | j  
¡  |  | j j¡ |  tj | j ¡jd	d
 ¡ ¡ |  | j jd¡ d S )Nr   r  rÏ   r  rØ  r  re  r_  Tr  rç  zIA live object with scheduled revisions should still have original contentzI've been updated!r‚   r†  )r"  rì   rí   r   r  r	  rY  rN   rq  r   r[  r0  r  r(   rk   r  r  rž  rm   r}   r¶   rx  rX   rX   rY   Ú9test_edit_post_publish_now_an_already_scheduled_published|  sX    üÿ
þ
ÿÿýýÿ	þ
ÿÿzSTestEditDraftStateSnippet.test_edit_post_publish_now_an_already_scheduled_publishedc                 C   sÞ  t ƒ tjdd }| jddt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd¡ |  | jj|jd	d	d
¡ t ƒ tjdd }t ƒ tjdd }| jdt|ƒt|ƒdœd}|  |tdt| jjƒgd¡ | j ¡  |  	| jj
¡ |  tj | j¡jdd ¡ ¡ |  	tj | j¡jt| ¡ ƒd ¡ ¡ |  	tj | j¡jt| ¡ ƒd ¡ ¡ |  ¡ }| j|dt|ƒ› ddd | j|dddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nro  r  r  rØ  ©r}   rî  r  re  r_  r  r   ©ÚsecondÚmicrosecondr»   é   r  rp  rÙ   Tr  rq  rr  rv  r   rt  rs  ru  )r   r  r	  rY  rN   rq  r   r"  r[  r0  r  rm   r  r  Úreplacer   r§   r¶   r(   rk   r  r  rž  rr  rw  r
  r^   r‰   rP   r%  ©rW   r  rp   r  Znew_expire_atrX   rX   rY   Ú6test_edit_post_save_schedule_before_a_scheduled_expireÁ  s˜    ýÿ	þ
þýÿ	þþ
ÿÿ
ÿÿ
ÿÿüüüüzPTestEditDraftStateSnippet.test_edit_post_save_schedule_before_a_scheduled_expirec                 C   s˜  t ƒ tjdd }| jddt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd¡ |  | jj|jd	d	d
¡ t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ tjj| jjd| _|  	| jj
¡ |  | jjd¡ |  	tj | j¡jdd ¡ ¡ |  ¡ }| j|dt|ƒ› dd | j|ddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nro  r  r  rØ  rŒ  re  r_  r  r   r  r»   r  r  r'  rˆ  Tr  rv  r    rs  ru  r   rt  )r   r  r	  rY  rN   rq  r   r"  r[  r0  r  rm   r  r  r‘  rC   rk   r^   r§   r(   r  r  rž  r†   rP   r‰   r%  r’  rX   rX   rY   Ú9test_edit_post_publish_schedule_before_a_scheduled_expire+  s‚    ýÿ	þ
þüÿ
þÿÿÿýýüüzSTestEditDraftStateSnippet.test_edit_post_publish_schedule_before_a_scheduled_expirec                 C   sš  t ƒ tjdd }| jddt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd¡ |  | jj|jd	d	d
¡ t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ tjj| jjd| _|  	| jj
¡ |  | jjd¡ |  	tj | j¡jdd ¡ ¡ |  ¡ }| j|dt|ƒ› ddd | j|ddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nro  r  r  rØ  rŒ  re  r_  r  r   r  é   é   r  r'  rˆ  Tr  rv  r   rt  rs  r    ru  )r   r  r	  rY  rN   rq  r   r"  r[  r0  r  rm   r  r  r‘  rC   rk   r^   r§   r(   r  r  rž  r‰   rP   r†   r%  r’  rX   rX   rY   Ú8test_edit_post_publish_schedule_after_a_scheduled_expire‹  s„    ýÿ	þ
þüÿ
þÿÿÿüýüüzRTestEditDraftStateSnippet.test_edit_post_publish_schedule_after_a_scheduled_expire)r—   r˜   r™   r  rZ   ræ  rí  rø  rý  r   rf  rg  rh  rk  rl  rn  ry  rz  r{  r}  r  r…  r‡  rŠ  r‹  r“  r”  r—  rE  rX   rX   r+  rY   rR  ¦  s4   ÿ'E4Y,*1$5L%B=?PEj`rR  c                       s4   e Zd Z‡ fdd„Zdd„ Zdd„ Zdd„ Z‡  ZS )	ÚTestScheduledForPublishLockc                    sf   t ƒ  ¡  tjjddd| _tƒ tjdd | _	d| j_
| j	| j_	| j ¡ | _| j ¡  | j ¡  d S )Nrç  Fr  r   r  r~  )r*  rZ   rD   rk   rª   r"  r   r  r	  r  r}   rì   rì  rí   r[  rV   r+  rX   rY   rZ   ð  s    
 ÿ

z!TestScheduledForPublishLock.setUpc                 C   s
  d| j _tjjddd}tjjddd}tjjddd}| j j |||¡ | j  ¡  |  ¡ }| j|dd	d
 | j	|dt
| jƒ› d	dd | j	|ddd |  	|d¡ | j	|dd	dd |j ¡ }| jd|dd	d td| jj| jjgd}| jd|› d|dd	d d S )NFrr   rú  rd   rþ  rb   rc   rs  Tr    ru  r   rt  úYDraft state model 'I&#x27;ve been edited!' is locked and has been scheduled to go live atrj  úLocked by scheduleúV<div class="w-help-text">Currently locked and will go live on the scheduled date</div>r|  r   rÛ  ú:wagtailsnippets_tests_draftstatemodel:revisions_unschedulerÙ   úX<button data-action="w-action#post" data-controller="w-action" data-w-action-url-value="ú#">Cancel scheduled publish</button>©rU   rh   r   rk   r^   ri   rj   rl   r†   r‰   rP   r  r{   râ  rã  r   r"  r§   rì  )rW   rü  rÿ  rÂ  rp   r¡   Úunschedule_urlrX   rX   rY   Ú>test_edit_get_scheduled_for_publishing_with_publish_permissionü  sx     ÿ ÿ ÿý
ýüýü
üþ
üzZTestScheduledForPublishLock.test_edit_get_scheduled_for_publishing_with_publish_permissionc                 C   sø   d| j _tjjddd}tjjddd}| j j ||¡ | j  ¡  |  ¡ }| j|ddd	 | j	|d
t
| jƒ› ddd | j	|ddd |  	|d¡ | j	|dddd |j ¡ }| jd|ddd td| jj| jjgd}| jd|› d|ddd d S )NFrr   rú  rd   rb   rc   rs  Tr    ru  r   rt  r™  rj  rš  r›  r|  r   rÛ  rœ  rÙ   r  rž  rŸ  )rW   rü  rÂ  rp   r¡   r   rX   rX   rY   ÚAtest_edit_get_scheduled_for_publishing_without_publish_permissionF  sh     ÿ ÿ
ýüýü
üþ
üz]TestScheduledForPublishLock.test_edit_get_scheduled_for_publishing_without_publish_permissionc                 C   sÖ   | j dt| jƒdœd}| j ¡  |  | jj| j¡ |  | jjjd d¡ | j|ddd |  	|d	¡ |  |d
¡ | j|dddd |j 
¡ }| jd|ddd td| jj| jjgd}| jd|› d|ddd d S )Nz6I'm edited while it's locked for scheduled publishing!)r}   r  re  r}   r~  z8The draft state model could not be saved as it is lockedr   rj  r™  rš  r›  Trt  r|  r   rÛ  rœ  rÙ   r  rž  )rY  rN   r  r"  r[  rm   rì  r{   r‰   r†   râ  rã  r   r§   )rW   rp   r¡   r   rX   rX   rY   Ú'test_edit_post_scheduled_for_publishing‰  sX    þÿ
þýþü
üþ
üzCTestScheduledForPublishLock.test_edit_post_scheduled_for_publishing)r—   r˜   r™   rZ   r¡  r¢  r£  rE  rX   rX   r+  rY   r˜  ï  s   JCr˜  c                   @   sD   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSnippetUnschedulec                 C   s†   |   ¡ | _tjjdddd| _tƒ tjdd | _	d| j_
| j	| j_	| j ¡ | _| j ¡  | j ¡  tdt| jjƒ| jjgd	| _d S )
NrS  rç  FrT  r   r  r~  zJwagtailsnippets_tests_draftstatecustomprimarykeymodel:revisions_unschedulerÙ   )rT   rU   rC   rk   rª   r"  r   r  r	  r  r}   rì   rì  rí   r[  r   r   r§   r   rV   rX   rX   rY   rZ   É  s     
  ÿ


þzTestSnippetUnschedule.setUpc                 C   s^   d| j _tjjdddtjjdddg}|rB| tjjddd¡ | j jj|Ž  | j  ¡  d S )NFrr   ra  rd   rb   rc   rb  )	rU   rh   r   rk   r^   Úappendri   rj   rl   )rW   Zset_publish_permissionZpermissionsrX   rX   rY   Úset_permissionsÙ  s&    þ ÿû
þÿz%TestSnippetUnschedule.set_permissionsc                 C   s6   |   d¡ | j | j¡}|  |jd¡ |  |d¡ d S )NTrt   z5wagtailadmin/shared/revisions/confirm_unschedule.html)r¦  r]   r^   r   rm   rn   ry   ro   rX   rX   rY   Ú1test_get_unschedule_view_with_publish_permissionsñ  s    
 ÿzGTestSnippetUnschedule.test_get_unschedule_view_with_publish_permissionsc                 C   s,   |   d¡ | j | j¡}|  |tdƒ¡ d S )NFrÁ  )r¦  r]   r^   r   rq  r   ro   rX   rX   rY   Ú(test_get_unschedule_view_bad_permissionsý  s    
z>TestSnippetUnschedule.test_get_unschedule_view_bad_permissionsc                 C   s|   |   d¡ | j | j¡}|  |tdt| jjƒgd¡ | j 	¡  | j
 	¡  |  | j
j¡ |  tj | j¡jdd ¡ ¡ d S )NTz=wagtailsnippets_tests_draftstatecustomprimarykeymodel:historyrÙ   r  )r¦  r]   rY  r   rq  r   r   r"  r§   r[  rì  rÆ   Úapproved_go_live_atr¶   r(   rk   r  r  rž  ro   rX   rX   rY   Ú2test_post_unschedule_view_with_publish_permissions  s"    
þþ

ÿÿzHTestSnippetUnschedule.test_post_unschedule_view_with_publish_permissionsc                 C   sn   |   d¡ | j | j¡}|  |tdƒ¡ | j ¡  | j ¡  |  	| jj
¡ |  tj | j¡jdd ¡ ¡ d S )NFrÁ  Tr  )r¦  r]   rY  r   rq  r   r"  r[  rì  rÇ   r©  r0  r(   rk   r  r  rž  ro   rX   rX   rY   Ú)test_post_unschedule_view_bad_permissions"  s    


ÿÿz?TestSnippetUnschedule.test_post_unschedule_view_bad_permissionsc                 C   sŠ   |   d¡ tdt| jjƒgd}| j | jd|›  ¡}|  ||¡ | j 	¡  | j
 	¡  |  | j
j¡ |  tj | j¡jdd ¡ ¡ d S )NTrp  rÙ   z?next=r  )r¦  r   r   r"  r§   r]   rY  r   rq  r[  rì  rÆ   r©  r¶   r(   rk   r  r  rž  )rW   rî   rp   rX   rX   rY   Ú'test_post_unschedule_view_with_next_url8  s    
þ

ÿÿz=TestSnippetUnschedule.test_post_unschedule_view_with_next_urlN)
r—   r˜   r™   rZ   r¦  r§  r¨  rª  r«  r¬  rX   rX   rX   rY   r¤  È  s   	r¤  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestSnippetUnpublishc                 C   s8   |   ¡ | _tjjddd| _tdt| jjƒfd| _	d S )NrS  zto be unpublished)rU  r}   rV  rÙ   )
rT   rU   rC   rk   rª   r‘   r   r   r§   rå  rV   rX   rX   rY   rZ   U  s    
 ÿþzTestSnippetUnpublish.setUpc                 C   s,   | j  | j¡}|  |jd¡ |  |d¡ dS )z\
        This tests that the unpublish view responds with an unpublish confirm page
        rt   z+wagtailadmin/generic/confirm_unpublish.htmlN)r]   r^   rå  rm   rn   ry   ro   rX   rX   rY   Útest_unpublish_view_  s    z(TestSnippetUnpublish.test_unpublish_viewc                 C   s,   | j  tdtdƒfd¡}|  |jd¡ dS )za
        This tests that the unpublish view returns an error if the object pk is invalid
        rV  i90  rÙ   r°   N)r]   r^   r   r   rm   rn   ro   rX   rX   rY   Útest_unpublish_view_invalid_pkj  s    þÿz3TestSnippetUnpublish.test_unpublish_view_invalid_pkc                 C   sL   d| j _| j j tjjddd¡ | j  ¡  | j | j	¡}|  
|jd¡ dS )úf
        This tests that the unpublish view doesn't allow users without unpublish permissions
        Frb   rc   rd   rf   N)rU   rh   ri   rj   r   rk   r^   rl   r]   rå  rm   rn   ro   rX   rX   rY   Ú'test_unpublish_view_get_bad_permissionsy  s     ÿÿ
z<TestSnippetUnpublish.test_unpublish_view_get_bad_permissionsc              	   C   sš   t  ¡ }t |¡ zvd| j_| jj t	j
jddd¡ | j ¡  | j | j¡}|  |tdƒ¡ |  tj
j| jjdj¡ |  |jd¡ W 5 t |¡ X dS )	r°  Frb   rc   rd   rÁ  r'  r   N)r   rñ  r*   rò  ró  rU   rh   ri   rj   r   rk   r^   rl   r]   rY  rå  rq  r   r0  rC   r‘   r§   r  rm   rô  )rW   rö  rp   rX   rX   rY   Ú(test_unpublish_view_post_bad_permissionsŒ  s$    
 ÿÿ
ÿz=TestSnippetUnpublish.test_unpublish_view_post_bad_permissionsc              	   C   s  t  ¡ }t |¡ zÞd| j_tjj	ddd}tjj	ddd}tjj	ddd}| jj
 |||¡ | j ¡  | j | j¡}|  |tdƒ¡ |  tjj	| jjd	j¡ |  |jd
¡ |jd d }|  |d t¡ |  |d | j¡ |  |d t¡ W 5 t |¡ X dS )z³
        This posts to the unpublish view and checks that the object was unpublished,
        using a specific publish permission instead of relying on the superuser flag
        Frr   ra  rd   rb  rb   rc   r_  r'  r   r   rÏ   rð  r£  N)r   rñ  r*   rò  ró  rU   rh   r   rk   r^   ri   rj   rl   r]   rY  rå  rq  r   r¶   rC   r‘   r§   r  rm   rô  rõ  r”  )rW   rö  rü  rÿ  rÂ  rp   r÷  rX   rX   rY   Ú0test_unpublish_view_post_with_publish_permission®  sN    
þþ ÿý
þÿ ÿzETestSnippetUnpublish.test_unpublish_view_post_with_publish_permissionc              	   C   s®   t  ¡ }t |¡ zŠ| j | j¡}|  |t	dƒ¡ |  
tjj| jjdj¡ |  |jd¡ |jd d }|  |d t¡ |  |d | j¡ |  |d t¡ W 5 t |¡ X dS )	z]
        This posts to the unpublish view and checks that the object was unpublished
        r_  r'  r   r   rÏ   rð  r£  N)r   rñ  r*   rò  ró  r]   rY  rå  rq  r   r¶   rC   rk   r^   r‘   r§   r  rm   rô  rõ  r”  )rW   rö  rp   r÷  rX   rX   rY   Útest_unpublish_view_postæ  s(    
þÿ ÿz-TestSnippetUnpublish.test_unpublish_view_postc              	      sr   ‡ fdd„}ˆ   d|¡ i }ˆ j ˆ j|¡}W 5 Q R X ˆ  |jd¡ ˆ  |jd¡ ˆ j ¡  ˆ  ˆ jj	d¡ d S )Nc                    s&   ˆ   | t¡ ˆ  |jˆ jj¡ tdƒS r‘  ©r”  r   rm   r§   r‘   r   ©r”   r‘   rV   rX   rY   r–  
  s    zATestSnippetUnpublish.test_after_unpublish_hook.<locals>.hook_funcZafter_unpublishrt   r˜  r  ©
rš  r]   rY  rå  rm   rn   r{   r‘   r[  r  rŸ  rX   rV   rY   Útest_after_unpublish_hook	  s    
z.TestSnippetUnpublish.test_after_unpublish_hookc              	      sr   ‡ fdd„}ˆ   d|¡ i }ˆ j ˆ j|¡}W 5 Q R X ˆ  |jd¡ ˆ  |jd¡ ˆ j ¡  ˆ  ˆ jj	d¡ d S )Nc                    s&   ˆ   | t¡ ˆ  |jˆ jj¡ tdƒS r‘  rµ  r¶  rV   rX   rY   r–    s    z=TestSnippetUnpublish.test_before_unpublish.<locals>.hook_funcZbefore_unpublishrt   r˜  r  r·  rŸ  rX   rV   rY   Útest_before_unpublish  s    
z*TestSnippetUnpublish.test_before_unpublishN)r—   r˜   r™   rZ   r®  r¯  r±  r²  r³  r´  r¸  r¹  rX   rX   rX   rY   r­  T  s   
"8#r­  c                   @   s|   e Zd ZdgZdd„ Zdd„ Zdd„ Zedd	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 )ÚTestSnippetDeleterÇ  c                 C   s   t jjdd| _|  ¡ | _d S rN  )r?   rk   r^   r"  rT   rU   rV   rX   rX   rY   rZ   0  s    zTestSnippetDelete.setUpc                 C   s\   d| j _| j j tjjddd¡ | j  ¡  | j t	dt
| jjƒgd¡}|  |jd¡ d S ©NFrb   rc   rd   rØ   rÙ   rf   )rU   rh   ri   rj   r   rk   r^   rl   r]   r   r   r"  r§   rm   rn   ro   rX   rX   rY   Ú(test_delete_get_with_limited_permissions4  s     ÿÿ
þÿz:TestSnippetDelete.test_delete_get_with_limited_permissionsc                 C   sL   t dt| jjƒgd}| j |¡}|  |jd¡ |  |d¡ |  ||¡ d S ©NrØ   rÙ   rt   úYes, delete©	r   r   r"  r§   r]   r^   rm   rn   r‰   ©rW   rÜ   rp   rX   rX   rY   Útest_delete_getE  s    þz!TestSnippetDelete.test_delete_getTrð   c                 C   sL   t dt| jjƒgd}| j |¡}|  |jd¡ |  |d¡ |  ||¡ d S r½  r¿  rÀ  rX   rX   rY   Ú!test_delete_get_with_i18n_enabledO  s    þz3TestSnippetDelete.test_delete_get_with_i18n_enabledc                 C   s˜   t jjd| jd tdt| jjƒgd}| j |¡}|  	|j
d¡ |  |d¡ |  |d¡ |  |tdt| jjƒgdd	 ¡ |  |d
¡ |  ||¡ d S )NÚUndeletable©r}   Zon_delete_protectrØ   rÙ   rt   z!This advert is referenced 1 time.zDOne or more references to this advert prevent it from being deleted.r.  ú?describe_on_delete=1r¾  )rK   rk   rª   r"  r   r   r§   r]   r^   rm   rn   r‰   r†   rÀ  rX   rX   rY   Ú(test_delete_get_with_protected_referenceZ  s4     ÿþþþüþz:TestSnippetDelete.test_delete_get_with_protected_referencec                 C   s\   d| j _| j j tjjddd¡ | j  ¡  | j 	t
dt| jjƒgd¡}|  |jd¡ d S r»  )rU   rh   ri   rj   r   rk   r^   rl   r]   rY  r   r   r"  r§   rm   rn   ro   rX   rX   rY   Ú)test_delete_post_with_limited_permissionst  s     ÿÿ
þÿz;TestSnippetDelete.test_delete_post_with_limited_permissionsc                 C   sL   | j  tdt| jjƒgd¡}|  |tdƒ¡ |  tj	j
dd ¡ d¡ d S )NrØ   rÙ   rw   ro  r¹   r   )r]   rY  r   r   r"  r§   rq  rm   r?   rk   rr  rk  ro   rX   rX   rY   Útest_delete_post…  s    þÿz"TestSnippetDelete.test_delete_postc                 C   sr   t jjd| jd tdt| jjƒgd}| j |¡}|  	|j
d¡ |  |tdƒ¡ |  tjj| jjd ¡ ¡ d S )NrÃ  rÄ  rØ   rÙ   rf   rÁ  r'  )rK   rk   rª   r"  r   r   r§   r]   rY  rm   rn   rq  r0  r?   rr  rž  rÀ  rX   rX   rY   Ú)test_delete_post_with_protected_reference“  s     ÿþz;TestSnippetDelete.test_delete_post_with_protected_referencec                 C   s~   t ƒ }tjd|d | j tdt| jjƒgd¡}|  	|j
d¡ |  |d¡ |  |d¡ |  |tdt| jjƒgdd	 ¡ d S )
NZrebuild_references_index)ÚstdoutrØ   rÙ   rt   ú(wagtailadmin/generic/confirm_delete.htmlz!This advert is referenced 2 timesr.  rÅ  )r   r   Zcall_commandr]   r^   r   r   r"  r§   rm   rn   ry   r‰   )rW   Úoutputrp   rX   rX   rY   Útest_usage_link¤  s(    þÿþüþz!TestSnippetDelete.test_usage_linkc              	      sp   t jjddd}‡ fdd„}ˆ  d|¡" ˆ j tdt|jƒgd¡}W 5 Q R X ˆ  	|j
d	¡ ˆ  	|jd
¡ d S )Nrc  ú	Test hook©r„   r}   c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS ©Nz<Advert: Test hook>)Z	transformr’  ©r”  r   ZassertQuerySetEqualÚreprr   ©r”   Z	instancesrV   rX   rY   r–  À  s    zHTestSnippetDelete.test_before_delete_snippet_hook_get.<locals>.hook_funcÚbefore_delete_snippetrØ   rÙ   rt   r˜  )r?   rk   rª   rš  r]   r^   r   r   r§   rm   rn   r{   ©rW   rÀ   r–  rp   rX   rV   rY   Ú#test_before_delete_snippet_hook_getº  s    þÿz5TestSnippetDelete.test_before_delete_snippet_hook_getc              	      sŠ   t jjddd}‡ fdd„}ˆ  d|¡" ˆ j tdt|jƒgd¡}W 5 Q R X ˆ  	|j
d	¡ ˆ  	|jd
¡ ˆ  t jj|jd ¡ ¡ d S )Nrc  rÎ  rÏ  c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS rÐ  rÑ  rÓ  rV   rX   rY   r–  Ó  s    zITestSnippetDelete.test_before_delete_snippet_hook_post.<locals>.hook_funcrÔ  rØ   rÙ   rt   r˜  r'  )r?   rk   rª   rš  r]   rY  r   r   r§   rm   rn   r{   r0  rr  rž  rÕ  rX   rV   rY   Ú$test_before_delete_snippet_hook_postÍ  s    þ
þÿz6TestSnippetDelete.test_before_delete_snippet_hook_postc              	      sŠ   t jjddd}‡ fdd„}ˆ  d|¡" ˆ j tdt|jƒgd¡}W 5 Q R X ˆ  	|j
d	¡ ˆ  	|jd
¡ ˆ  t jj|jd ¡ ¡ d S )Nrc  rÎ  rÏ  c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS rÐ  rÑ  rÓ  rV   rX   rY   r–  ì  s    zCTestSnippetDelete.test_after_delete_snippet_hook.<locals>.hook_funcZafter_delete_snippetrØ   rÙ   rt   r˜  r'  )r?   rk   rª   rš  r]   rY  r   r   r§   rm   rn   r{   r¶   rr  rž  rÕ  rX   rV   rY   Útest_after_delete_snippet_hookæ  s    þ
þÿz0TestSnippetDelete.test_after_delete_snippet_hookN)r—   r˜   r™   rÑ  rZ   r¼  rÁ  r   rÂ  rÆ  rÇ  rÈ  rÉ  rÍ  rÖ  r×  rØ  rX   rX   rX   rY   rº  -  s   


rº  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestSnippetChooserPanelrÇ  c                 C   s   t ƒ  d¡| _tƒ }|| j_t}d| _|jjt	jj| jdd}t
|ƒ| _| j ¡ | _| j|d}| jj||| jd}dd„ |jD ƒd	 | _d S )
Nr1  úTest advert textr¹   )rÀ   ©r£  ©r£  r  r”   c                 S   s    g | ]}t |d dƒdkr|‘qS ©Ú
field_nameNrÀ   ©Úgetattr©r   ÚpanelrX   rX   rY   r     s   þz1TestSnippetChooserPanel.setUp.<locals>.<listcomp>r   )r   r^   r”   r   rU   rI   Úadvert_textrk   rª   r?   r"   Úedit_handlerÚget_form_classÚ
form_classÚget_bound_panelÚchildrenÚsnippet_chooser_panel©rW   rU   rW  r"  r  rä  rX   rX   rY   rZ     s*    ÿ
  ÿþüzTestSnippetChooserPanel.setUpc                 C   s@   | j  ¡ }|  | j|¡ |  d|¡ |  d|¡ |  d|¡ d S )NúChoose advertúChoose another advertzicon icon-snippet icon©ré  Úrender_htmlr?  rã  ©rW   Ú
field_htmlrX   rX   rY   Útest_render_html  s
    
z(TestSnippetChooserPanel.test_render_htmlc                 C   s^   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ d S )NrÛ  rÜ  c                 S   s    g | ]}t |d dƒdkr|‘qS rÝ  rß  rá  rX   rX   rY   r   )  s   þzFTestSnippetChooserPanel.test_render_as_empty_field.<locals>.<listcomp>r   rë  rì  )rI   ræ  rä  rç  r”   rè  rî  r?  ©rW   r"  r  rä  ré  rð  rX   rX   rY   Útest_render_as_empty_field"  s      ÿþüz2TestSnippetChooserPanel.test_render_as_empty_fieldc                 C   s   |   d| j ¡ ¡ d S )NzVnew SnippetChooser("id_advert", {"modalUrl": "/admin/snippets/choose/tests/advert/"});©r?  ré  rî  rV   rX   rX   rY   Útest_render_js3  s    þz&TestSnippetChooserPanel.test_render_jsc                 C   sL   t tdƒgƒ t¡}| ¡ }|ƒ }|jd j}|  |t¡ |  	|j
t¡ d S )NrÀ   )r!   r    Úbind_to_modelrI   rå  ÚfieldsÚwidgetr”  r0   rm   rW  r?   ©rW   rä  ræ  r  rø  rX   rX   rY   Útest_target_model_autodetected9  s    ÿz6TestSnippetChooserPanel.test_target_model_autodetectedN©	r—   r˜   r™   rÑ  rZ   rñ  ró  rõ  rú  rX   rX   rX   rY   rÙ     s   rÙ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetRegisteringc                 C   s   |   tt¡ d S rR   )r?  r9   r.   rV   rX   rX   rY   Útest_register_functionE  s    z-TestSnippetRegistering.test_register_functionc                 C   s   |   t¡ |  tt¡ d S rR   )rÇ   r8   r?  r.   rV   rX   rX   rY   Útest_register_decoratorH  s    
z.TestSnippetRegistering.test_register_decoratorN)r—   r˜   r™   rý  rþ  rX   rX   rX   rY   rü  D  s   rü  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetOrderingc                 C   s   t tƒ t tƒ d S rR   )r/   r>   r4   rV   rX   rX   rY   rZ   O  s    zTestSnippetOrdering.setUpc                 C   s   |   t t¡t t¡¡ d S rR   )Z
assertLessr.   Úindexr4   r>   rV   rX   rX   rY   Útest_snippets_orderingS  s     ÿz*TestSnippetOrdering.test_snippets_orderingN)r—   r˜   r™   rZ   r  rX   rX   rX   rY   rÿ  N  s   rÿ  c                   @   sr   e Zd ZdgZi fdd„Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zedddd„ ƒZdd„ ZdS )ÚTestSnippetHistoryrÇ  c                 C   s   | j  |  |d¡|¡S )NÚhistory)r]   r^   Úget_url)rW   r‘   r`   rX   rX   rY   r^   _  s    zTestSnippetHistory.getNc                 C   s(   |d krt |jƒg}t|j |¡|dS ©NrÙ   )r   r§   r   rU  rV  )rW   r‘   Úurl_namerÚ   rX   rX   rY   r  b  s    zTestSnippetHistory.get_urlc                 C   sü   |   ¡ | _tjjdd| _tjjtj 	t¡ddt
t dddddd	¡ƒd
d tjjtj 	t¡ddt
t dddddd	¡ƒd
d tjjdd| _| jj| jd| _tjjtj 	t¡ddt
t dddddd	¡ƒ| jj| jdd d| j_| jj| jdd| _d S )Nr   r'  r  r  iå  é	   é   r»   r   r)  r  zTest Advert UpdatedrP  éæ  é   é   é"   ZFoor¹   ©rU   ro  é   T©r  r…   r  r  r  rŽ  Zcontent_changedZBar©rU   Ú
log_action)rT   rU   r?   rk   r^   Únon_revisable_snippetr'   rª   r	   r  r   r  rE   Úrevisable_snippetrì   Úinitial_revisionr§   r}   Úedit_revisionrV   rX   rX   rY   rZ   g  s@    

û
û
ù	 ÿzTestSnippetHistory.setUpc                 C   s:   |   | j¡}|  |jd¡ | j|ddd |  |d¡ d S )Nrt   z<td>Created</td>Tr    z9data-w-tooltip-content-value="Sept. 30, 2021, 10:01 a.m.")r^   r  rm   rn   r‰   ro   rX   rX   rY   r‡   ˆ  s    þzTestSnippetHistory.test_simplec           	   
   C   sâ   | j | jg}|D ]Ì}| j|d¶ |  |ddi¡}|  |jd¡ | j|ddd |  |d¡ |  |j	¡}| 
d	¡}| 
d
¡}|  |jdddd¡ |  |¡ |j d¡ d¡\}}|  ||  |d¡¡ |  d|¡ W 5 Q R X qd S )N)r‘   r  rP  rt   ZEditedr   rj  ÚCreatedz.w-active-filters .w-pillz.w-pill__removeú T)Ú	separatorr~   zAction: Editzdata-w-swap-src-valueú?Zhistory_resultszaction=wagtail.edit)r  r  ZsubTestr^   rm   rn   r‰   r†   rz   r{   r|   Úget_textrÇ   rÓ   Úsplitr  rF  )	rW   r‹   r‘   rp   r   rr  Zclear_buttonr„   r`   rX   rX   rY   Útest_filters‘  s$    

þ
zTestSnippetHistory.test_filtersc                 C   s2   |   | j¡}|  | jd¡}|  |d|› d¡ d S )Nr!  rË  ú
">Edit</a>)r^   r  r  r†   )rW   rp   rî   rX   rX   rY   Ú5test_should_not_show_actions_on_non_revisable_snippet¦  s    
þzHTestSnippetHistory.test_should_not_show_actions_on_non_revisable_snippetc                 C   s„   |   | j¡}|  | jd¡}| j| jd| jj| jjgd}|  |d¡ |  |d¡ | j|d|› ddd	 | j|d|› d
dd	 d S )Nr!  Úrevisions_revertrÙ   ú<<span class="w-status w-status--primary">Live version</span>ú=<span class="w-status w-status--primary">Current draft</span>rË  r  r   rj  z">Review this version</a>)r^   r  r  r§   r  r†   r‰   )rW   rp   rî   Ú
revert_urlrX   rX   rY   Ú-test_should_show_actions_on_revisable_snippet®  s2    ý ÿ ÿ
ý
ýz@TestSnippetHistory.test_should_show_actions_on_revisable_snippetc                 C   s   t jjdd}| ¡  ¡  | ¡  d|_|jdd |  |¡}| j|dddd | j|d	ddd |  	|j
¡}| d
¡}|  |jddd¡ d S )Nrè   r¹   ré   T)r  r   r   )rk  r¡   r!  z.w-breadcrumbs__sublabel)r~   )rD   rk   rª   rì   rí   r[  r}   r^   r‰   rz   r{   r|   rm   r  )rW   r‘   rp   r   ZsublabelrX   rX   rY   Útest_with_live_and_draft_statusÍ  s*    
üü
z2TestSnippetHistory.test_with_live_and_draft_statusTrð   c                 C   s8   |   | j¡}|  |jd¡ |   | j¡}|  |jd¡ d S )Nrt   )r^   r  rm   rn   r  ro   rX   rX   rY   Útest_get_with_i18n_enabledì  s    z-TestSnippetHistory.test_get_with_i18n_enabledc              	   C   sŽ   | j }|  |¡ |  d¡ |  |¡ W 5 Q R X tdƒD ]0}|j| jdd}|d dkr8|j| jdd q8|  d¡ |  |¡ W 5 Q R X d S )Né   ro  Tr  r
  r   )r  r^   ZassertNumQueriesr©   rì   rU   rí   )rW   r‘   r¬   rŽ  rX   rX   rY   Útest_num_queriesó  s    
z#TestSnippetHistory.test_num_queries)N)r—   r˜   r™   rÑ  r^   r  rZ   r‡   r  r  r#  r$  r   r%  r'  rX   rX   rX   rY   r  \  s   
!	
r  c                   @   s†   e Zd Zedd„ ƒZdd„ Zi fdd„Zd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 )ÚTestSnippetRevisionsc                 C   s   | j dt| jjƒ| jjgdS )Nr  rÙ   )r  r   r‘   r§   r  rV   rX   rX   rY   r"    s     ÿzTestSnippetRevisions.revert_urlc                 C   s   | j  | j¡S rR   )r]   r^   r"  rV   rX   rX   rY   r^     s    zTestSnippetRevisions.getc                 C   s   | j  | j|¡S rR   )r]   rY  r"  rÖ  rX   rX   rY   rY    s    zTestSnippetRevisions.postNc                 C   s0   | j j |¡}|d kr$t| j jƒg}t||dS r  )r‘   rU  rV  r   r§   r   )rW   r  rÚ   Ú	view_namerX   rX   rY   r    s    zTestSnippetRevisions.get_urlc              
   C   s”   |   ¡ | _tdƒR tjjdd| _| jj| jd| _t	jjt
j t¡ddtƒ | jj| jdd W 5 Q R X d| j_| j ¡  | jj| jdd	| _d S )
Nz2022-05-10 11:00:00úThe original textr¹   r  r  Tr  zThe edited textr  )rT   rU   r   rH   rk   rª   r‘   rì   r  r'   r	   r  r   r§   r}   rl   r  rV   rX   rX   rY   rZ     s     


ù

zTestSnippetRevisions.setUpc                 C   sŒ   |   ¡ }|  |jd¡ tjr"d}nd}| j|d|› ddd | j|ddd d	| j› d
}|j ¡ }| j	||ddd | j|ddd d S )Nrt   zMay 10, 2022, 8 p.m.zMay 10, 2022, 11 a.m.zCYou are viewing a previous version of this Revisable model from <b>z</b> byr   rj  r*  rÞ  ú" method="POST">TrÛ  úReplace current revision)
r^   rm   rn   r   ZUSE_TZr‰   r"  r{   râ  rã  )rW   rp   Zexpected_date_stringÚform_tagr¡   rX   rX   rY   Útest_get_revert_revision-  s    
ý
z-TestSnippetRevisions.test_get_revert_revisionc                 C   s6   t jjdd}| j d|j› d¡}|  |jd¡ d S )Nrg  r¹   z%/admin/snippets/tests/advert/history/z/revisions/1/revert/r°   )r?   rk   rª   r]   r^   r§   rm   rn   )rW   r‘   rp   rX   rX   rY   Ú3test_get_revert_revision_with_non_revisable_snippetI  s
    ÿzHTestSnippetRevisions.test_get_revert_revision_with_non_revisable_snippetc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ra   rg   ro   rX   rX   rY   rq   P  s     ÿÿ
z6TestSnippetRevisions.test_get_with_limited_permissionsc                 C   sœ   t jjdd| _| j ¡ | _|  ¡ }|  |jd¡ |  	|d¡ |  
|d¡ |  
|d¡ |  
|d¡ tdt| jjƒfd	}|  |d
|› d¡ |  |d¡ d S )Nrç  r¹   rt   r-  zReplace current draftzPublish this versionz÷<button
    type="submit"
    name="action-publish"
    value="action-publish"
    class="button action-save button-longrunning warning"
    data-controller="w-progress w-kbd"
    data-action="w-progress#activate"
    data-w-kbd-key-value="mod+s"
z/wagtailsnippets_tests_draftstatemodel:unpublishrÙ   rW  rX  rá  )rD   rk   rª   r‘   rì   r  r^   rm   rn   ry   r‰   r   r   r§   r†   rY  rX   rX   rY   Ú!test_get_with_draft_state_snippet\  s(    þþ
þz6TestSnippetRevisions.test_get_with_draft_state_snippetc                 C   s  t jjdd| _| j ¡ | _d| j_| j ¡  |  ¡ }|  |j	d¡ |  
|d¡ | j|ddd |  |d¡ d	| j› d
}|j ¡ }| j||ddd | j|ddd |  d¡}|  |d¡ |  |d|› d¡ |  |j¡}| dddi¡}|  |¡ |  d|d ¡ |  d|d ¡ d S )NzPreview-enabled foor¹   zPreview-enabled barrt   r-  z*You are viewing a previous version of thisr   rj  rÞ  r+  TrÛ  r,  Zpreview_on_editzdata-side-panel="preview"zdata-action="ú"rÐ   zdata-side-panel-toggleÚpreviewzw-tooltip w-kbdzdata-controllerzmod+pzdata-w-kbd-key-value)rF   rk   rª   r‘   rì   r  r}   r^   rm   rn   ry   r‰   r"  r{   râ  rã  r  rz   rÕ   rÇ   )rW   rp   r-  r¡   Zpreview_urlr   Ztoggle_buttonrX   rX   rY   Ú!test_get_with_previewable_snippety  s2    
ý


z6TestSnippetRevisions.test_get_with_previewable_snippetc                 C   sÀ   |   ¡ }|jd jd }| j|d | jjdœd}|  || jdg d¡ | j 	¡  | j 
¡ }tjj|d ¡ }|  | jjd	¡ |  | jj ¡ d
¡ |  |jd d	¡ |  |¡ |  |jd¡ d S )Nr  r}   ú	 reverted©r}   rŽ  re  r=  rÙ   ©rŽ  zThe original text revertedrÝ   úwagtail.revert)r^   r   ÚinitialrY  r  r§   rq  r  r‘   r[  r‰  r'   rk   rr  rs  rm   r}   rŒ  rk  r{   rÇ   r  )rW   Úget_responseÚtext_from_revisionÚpost_responserì  r`  rX   rX   rY   Útest_replace_revision£  s     þÿ


z*TestSnippetRevisions.test_replace_revisionc                 C   s‚   d| j _| j j tjjddd¡ | j  ¡  | jd| j	j
dœd}|  |jd¡ | j ¡  |  | jjd¡ |  | jj ¡ d	¡ d S )
NFrb   rc   rd   rb  r5  re  rf   rÏ   )rU   rh   ri   rj   r   rk   r^   rl   rY  r  r§   rm   rn   r‘   r[  r€  r}   rŒ  rk  ro   rX   rX   rY   Ú%test_replace_with_limited_permissions¾  s"     ÿÿ
þÿ
z:TestSnippetRevisions.test_replace_with_limited_permissionsc                 C   sb  t jjddd| _| j ¡ | _d| j_| j ¡ | _|  ¡ }|j	d j
d }| j|d | jjdœd	}|  ||  d
¡¡ | j ¡  | j ¡ }tjj|d ¡ }tjjtj t ¡d| jjd}|  | jjd¡ |  | jj ¡ d¡ |  |jd d¡ |  |¡ |  |jd¡ |  | ¡ d¡ |  | jj¡ |  | jj¡ |   | jj!¡ |   | jj"¡ |   | jj#¡ d S )Nrç  Fr  úDraft-enabled Foo editedr  r}   r4  r5  re  r!  r6  r]  r^  úDraft-enabled Foo revertedrÝ   r7  r   )$rD   rk   rª   r‘   rì   r  r}   r  r^   r   r8  rY  r§   rq  r  r[  r‰  r'   rr  rs  r	   r  rm   rŒ  rk  r{   rÇ   r  r¶   r  r0  rè  rÆ   ré  rê  rë  )rW   r9  r:  r;  rì  r`  Zpublish_log_entriesrX   rX   rY   Útest_replace_draftÕ  sD     ÿþÿ


ý
z'TestSnippetRevisions.test_replace_draftc              	   C   sŠ  t jjdd| _| j ¡ | _d| j_| j ¡ | _|  ¡ }|j	d j
d }tƒ }t|ƒ" | j|d | jjddœd	}W 5 Q R X |  || jd
g d¡ | j ¡  | j ¡ }tjj|d ¡ }tjjtj t ¡d| jjd}|  | jjd¡ |  | jj ¡ d¡ |  |jd d¡ |  |¡ |  |jd¡ |  | ¡ d¡ |  | jj¡ |   | jj!¡ |  | jj"|¡ |  | jj#|¡ |  | jj$| jj%¡ d S )Nrç  r¹   r>  r  r}   r4  rî  )r}   rŽ  rî  re  r=  rÙ   r6  r7  r^  r?  rÝ   r]  r   )&rD   rk   rª   r‘   rì   r  r}   r  r^   r   r8  r   r   rY  r§   rq  r  r[  r‰  r'   rr  rs  r	   r  rm   rŒ  rk  r{   rÇ   r  r0  r  r¶   rè  ré  rê  rë  rì  )rW   r9  r:  r  r;  rì  r`  Zrevert_log_entriesrX   rX   rY   Útest_replace_publish  sD    
ýÿ


ý
z)TestSnippetRevisions.test_replace_publish)N)r—   r˜   r™   Úpropertyr"  r^   rY  r  rZ   r.  r/  rq   r0  r3  r<  r=  r@  rA  rX   rX   rX   rY   r(    s   

*0r(  c                   @   s<   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ ZdS )ÚTestCompareRevisionsc                 C   s°   t jjdd| _| j ¡ | _tt ddd¡ƒ| j_| j 	¡  d| j_
| j ¡ | _tt ddd¡ƒ| j_| j 	¡  d| j_
| j ¡ | _tt ddd	¡ƒ| j_| j 	¡  |  ¡  d S )
NzInitial revisionr¹   r	  r
  r»   z
First editr¤   zFinal revisionr  )rH   rk   rª   r‘   rì   r  r   r  Z
created_atrl   r}   r  Úfinal_revisionrT   rV   rX   rX   rY   rZ   ;  s    


zTestCompareRevisions.setUpc                 C   s&   t dt| jjƒ||fd}| j |¡S )Nz6wagtailsnippets_tests_revisablemodel:revisions_comparerÙ   )r   r   r‘   r§   r]   r^   )rW   Zrevision_a_idZrevision_b_idÚcompare_urlrX   rX   rY   r^   M  s
    þzTestCompareRevisions.getc                 C   s6   |   | jj| jj¡}|  |jd¡ | j|ddd d S )Nrt   úV<span class="deletion">Initial revision</span><span class="addition">First edit</span>Tr    )r^   r  r§   r  rm   rn   r‰   ro   rX   rX   rY   Útest_compare_revisionsT  s    ýz+TestCompareRevisions.test_compare_revisionsc                 C   s2   |   d| jj¡}|  |jd¡ | j|ddd d S )NZearliestrt   rF  Tr    )r^   r  r§   rm   rn   r‰   ro   rX   rX   rY   Útest_compare_revisions_earliest^  s    ýz4TestCompareRevisions.test_compare_revisions_earliestc                 C   s2   |   | jjd¡}|  |jd¡ | j|ddd d S )NZlatestrt   zT<span class="deletion">First edit</span><span class="addition">Final revision</span>Tr    )r^   r  Úidrm   rn   r‰   ro   rX   rX   rY   Útest_compare_revisions_latesth  s    ýz2TestCompareRevisions.test_compare_revisions_latestc                 C   sJ   d| j _| j jdgd |  | jjd¡}|  |jd¡ | j|ddd d S )	NzLive editedr}   )Zupdate_fieldsr  rt   zU<span class="deletion">Final revision</span><span class="addition">Live edited</span>Tr    )	r‘   r}   rl   r^   rD  rI  rm   rn   r‰   ro   rX   rX   rY   Útest_compare_revisions_liver  s    ýz0TestCompareRevisions.test_compare_revisions_liveN)	r—   r˜   r™   rZ   r^   rG  rH  rJ  rK  rX   rX   rX   rY   rC  8  s   


rC  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú%TestCompareRevisionsWithPerUserPanelsc                 C   sb   t jjddd| _| j ¡ | _d| j_d| j_| j ¡ | _t	dt
| jjƒ| jj| jjfd| _d S )NzFoo barzSecret text)r}   Úsecret_textzFoo bazzSecret unseen notez;wagtailsnippets_tests_revisablechildmodel:revisions_comparerÙ   )rG   rk   rª   r‘   rì   Zold_revisionr}   rM  Znew_revisionr   r   r§   rE  rV   rX   rX   rY   rZ   ‚  s     ÿþz+TestCompareRevisionsWithPerUserPanels.setUpc                 C   sH   |   ¡  | j | j¡}|  |jd¡ | j|ddd | j|ddd d S )Nrt   úFFoo <span class="deletion">bar</span><span class="addition">baz</span>Tr    zRSecret <span class="deletion">text</span><span class="addition">unseen note</span>)rT   r]   r^   rE  rm   rn   r‰   ro   rX   rX   rY   Útest_comparison_as_superuser  s    ýýzBTestCompareRevisionsWithPerUserPanels.test_comparison_as_superuserc                 C   s†   | j ddd}tjjddd}tjjddd}|j ||¡ | jddd | j | j¡}|  	|j
d	¡ | j|d
dd |  |d¡ d S )NZeditorÚpassword©ÚusernamerP  rr   Zchange_revisablechildmodelrd   rb   rc   rt   rN  Tr    zunseen note)Úcreate_userr   rk   r^   ri   rj   rT   r]   rE  rm   rn   r‰   r†   )rW   rU   rû  rÂ  rp   rX   rX   rY   Ú test_comparison_as_ordinary_userŸ  s&     ÿ ÿýzFTestCompareRevisionsWithPerUserPanels.test_comparison_as_ordinary_userN)r—   r˜   r™   rZ   rO  rT  rX   rX   rX   rY   rL    s   rL  c                   @   sp   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
edddd„ ƒZedddd„ ƒZdS )ÚTestSnippetChooserÇ  c                 C   s   |   ¡  ddg| _d S )Nrr   rÀ   )rT   Úurl_argsrV   rX   rX   rY   rZ   ¸  s    zTestSnippetChoose.setUpNc                 C   s.   | j \}}| j td|› d|› dƒ|p*i ¡S )NZwagtailsnippetchoosers_Ú_z:choose)rV  r]   r^   r   )rW   r`   Z	app_labelZ
model_namerX   rX   rY   r^   ¼  s
    
þzTestSnippetChoose.getc                 C   s,   |   ¡ }|  |d¡ |  d| ¡ d ¡ d S )Nú)wagtailadmin/generic/chooser/chooser.htmlz5<select data-chooser-modal-search-filter name="lang">r¡   )r^   ry   rF  Újsonro   rX   rX   rY   r‡   Ã  s    
þzTestSnippetChoose.test_simplec                 C   s>   t j ¡  ¡  |  ¡ }|  |d¡ | ¡ d }|  d|¡ d S )NrX  r¡   ú(href="/admin/snippets/tests/advert/add/")r?   rk   Úallr  r^   ry   rY  r?  )rW   rp   Úresponse_htmlrX   rX   rY   Útest_no_resultsÍ  s
    z!TestSnippetChoose.test_no_resultsc                 C   sf   t j ¡  ¡  tdddƒD ]}t jj|d| d q|  ¡ }|  |jd¡ |  |j	d d j
d¡ d	S ©
zZ
        Listing should be ordered by PK if no ordering has been set on the model
        r»   r   r*  r¥   r¦   rt   r  zadvert 1N)r?   rk   r[  r  r©   rª   r^   rm   rn   r   r}   r«   rX   rX   rY   r­   Ô  s    zTestSnippetChoose.test_orderingc                 C   sH   |   ddi¡}|  |jd¡ |  |d¡ |   ddi¡}|  |jd¡ d S )Nr®   r   rt   rX  r¯   r°   r±   ro   rX   rX   rY   r²   ß  s
    z(TestSnippetChoose.test_simple_paginationc                 C   s    |   |  ¡ jd j d¡¡ d S ©NZfilter_formrB  )r¶   r^   r   r÷  rV   rX   rX   rY   r·   è  s    z%TestSnippetChoose.test_not_searchableFrð   c                 C   sf   ddg| _ tjjdd}tjjdd tjjd|d |  ¡ }| ¡ d	 }|  d
|¡ |  d|¡ d S )NÚsnippetstestsÚtranslatablesnippetró   rô   úEnglish snippetr¹   úFrench snippet©r}   Úlocaler¡   ú data-chooser-modal-search-filterúname="locale")rV  r&   rk   rª   r=   r^   rY  rF  ©rW   rö   rp   r\  rX   rX   rY   Ú(test_locale_filter_requires_i18n_enabledì  s    
z:TestSnippetChoose.test_locale_filter_requires_i18n_enabledTc                 C   sè   ddg| _ tjjdd}tjjdd tjjd|d |  ¡ }| ¡ d	 }|  d
|¡ |  d|¡ |  t	|j
d ƒd¡ |  |j
d d jd¡ |  |j
d d jd¡ |  ddi¡}|  t	|j
d ƒd¡ |  |j
d d jd¡ d S )Nr`  ra  ró   rô   rb  r¹   rc  rd  r¡   rf  rg  r  rÏ   r   r   re  rø   )rV  r&   rk   rª   r=   r^   rY  r?  rm   r’   r   r}   rh  rX   rX   rY   Útest_filter_by_localeû  s    
z'TestSnippetChoose.test_filter_by_locale)N)r—   r˜   r™   rÑ  rZ   r^   r‡   r]  r­   r²   r·   r   ri  rj  rX   rX   rX   rY   rU  µ  s   

	
rU  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )ÚTestSnippetChooseResultsrÇ  c                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ     s    zTestSnippetChooseResults.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz2wagtailsnippetchoosers_tests_advert:choose_resultsr\   r_   rX   rX   rY   r^     s     ÿzTestSnippetChooseResults.getc                 C   s   |   ¡ }|  |d¡ d S )Nú$wagtailsnippets/chooser/results.html)r^   ry   ro   rX   rX   rY   r‡   !  s    z$TestSnippetChooseResults.test_simplec                 C   s2   t j ¡  ¡  |  ¡ }|  |d¡ |  |d¡ d S )Nrl  rZ  )r?   rk   r[  r  r^   ry   r‰   ro   rX   rX   rY   r]  %  s    þz(TestSnippetChooseResults.test_no_results)N)r—   r˜   r™   rÑ  rZ   r^   r‡   r]  rX   rX   rX   rY   rk    s
   
rk  c                   @   s:   e Zd Zdd„ Zedd„ ƒZddd„Zdd	„ Zd
d„ ZdS )ÚTestSnippetChooseStatusc                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ   0  s    zTestSnippetChooseStatus.setUpc                 C   sD   t jjddd| _t jjddd| _t jjddd| _| j ¡  d S )Nrg  Fr  rh  TZbaz)rD   rk   rª   r  r  Z
live_draftrì   )r  rX   rX   rY   r  3  s    z%TestSnippetChooseStatus.setUpTestDataNc                 C   s   | j  td|› ƒ|pi ¡S )Nz-wagtailsnippetchoosers_tests_draftstatemodel:r\   )rW   r)  r`   rX   rX   rY   r^   :  s    þzTestSnippetChooseStatus.getc                 C   sJ   |   d¡}| ¡ d }|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚchooser¡   ú<th>Status</th>ú#<span class="w-status">draft</span>ú4<span class="w-status w-status--primary">live</span>ú<<span class="w-status w-status--primary">live + draft</span>)r^   rY  rã  )rW   rp   r¡   rX   rX   rY   Ú$test_choose_view_shows_status_column@  s    
 ÿ ÿz<TestSnippetChooseStatus.test_choose_view_shows_status_columnc                 C   sN   |   d¡}| j|ddd | j|ddd | j|ddd | j|ddd d S )NZchoose_resultsro  Tr    rp  rq  rr  )r^   r‰   ro   rX   rX   rY   Ú,test_choose_results_view_shows_status_columnL  s    
  ÿýzDTestSnippetChooseStatus.test_choose_results_view_shows_status_column)N)	r—   r˜   r™   rZ   r2  r  r^   rs  rt  rX   rX   rX   rY   rm  /  s   

rm  c                   @   sF   e Z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 )Ú&TestSnippetChooseWithSearchableSnippetc                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r4  r7  rV   rX   rX   rY   rZ   [  s    z,TestSnippetChooseWithSearchableSnippet.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz=wagtailsnippetchoosers_snippetstests_searchablesnippet:chooser\   r_   rX   rX   rY   r^   c  s    þz*TestSnippetChooseWithSearchableSnippet.getc                 C   sR   |   ¡ }|  |d¡ t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrX  r  )	r^   ry   r=  r   r>  r?  r8  r9  r:  r@  rX   rX   rY   r‡   i  s    z2TestSnippetChooseWithSearchableSnippet.test_simplec                 C   s    |   |  ¡ jd j d¡¡ d S r_  )r0  r^   r   r÷  rV   rX   rX   rY   rD  s  s    z9TestSnippetChooseWithSearchableSnippet.test_is_searchablec                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrB  r5  r  rE  r@  rX   rX   rY   rG  w  s
    z8TestSnippetChooseWithSearchableSnippet.test_search_helloc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrB  r6  r  rH  r@  rX   rX   rY   Útest_search_world€  s
    z8TestSnippetChooseWithSearchableSnippet.test_search_worldc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrB  zhello wor  )	r^   r=  r   r>  rF  r8  r9  r?  r:  r@  rX   rX   rY   Útest_partial_match‰  s
    z9TestSnippetChooseWithSearchableSnippet.test_partial_match)N)
r—   r˜   r™   rZ   r^   r‡   rD  rG  rv  rw  rX   rX   rX   rY   ru  Z  s   

		ru  c                   @   s*   e Zd ZdZdd„ Zd	dd„Zdd„ ZdS )
Ú5TestSnippetChooseWithNonAutocompleteSearchableSnippetrK  c                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r4  rL  rV   rX   rX   rY   rZ   ›  s    ÿz;TestSnippetChooseWithNonAutocompleteSearchableSnippet.setUpNc                 C   s   | j  tdƒ|pi ¡S )NzLwagtailsnippetchoosers_snippetstests_nonautocompletesearchablesnippet:chooser\   r_   rX   rX   rY   r^   ¥  s    ÿüz9TestSnippetChooseWithNonAutocompleteSearchableSnippet.getc              	   C   sd   |   td¡ |  ddi¡}W 5 Q R X t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )NrM  rB  r5  r  rN  r@  rX   rX   rY   rG  ­  s     ÿzGTestSnippetChooseWithNonAutocompleteSearchableSnippet.test_search_hello)NrQ  rX   rX   rX   rY   rx  “  s   

rx  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )ÚTestSnippetChosenrÇ  c                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ   ½  s    zTestSnippetChosen.setUpNc                 C   s   | j  td|fd|pi ¡S )Nz*wagtailsnippetchoosers_tests_advert:chosenrÙ   r\   ©rW   r§   r`   rX   rX   rY   r^   À  s    þzTestSnippetChosen.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S ©Nr   r'  ÚstepZchosen)
r^   r?   rk   r[  r§   rY  Úloadsr{   râ  rm   ©rW   rp   Zresponse_jsonrX   rX   rY   Útest_choose_a_pageÆ  s    z$TestSnippetChosen.test_choose_a_pagec                 C   s   |   d¡}|  |jd¡ d S )Nr4  r°   )r^   rm   rn   ro   rX   rX   rY   Útest_choose_a_non_existing_pageË  s    
z1TestSnippetChosen.test_choose_a_non_existing_page)N)r—   r˜   r™   rÑ  rZ   r^   r  r€  rX   rX   rX   rY   ry  º  s
   
ry  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestAddOnlyPermissionsrÇ  c                 C   s`   t jjdd| _| jdddd}tjjddd	}tjjd
dd	}|j ||¡ | jddd d S )Nr   r'  Zaddonlyzaddonly@example.comrP  ©rR  ÚemailrP  rr   Z
add_advertrd   rb   rc   rQ  ©	r?   rk   r^   r"  rS  r   ri   rj   rT   )rW   rU   rû  rÂ  rX   rX   rY   rZ   Ó  s       ÿ ÿ ÿzTestAddOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S ©Nrw   rt   r›   r³   r_  ro   rX   rX   rY   Útest_get_indexã  s    z%TestAddOnlyPermissions.test_get_indexc                 C   s@   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |jd d¡ d S )Nr¢   rt   r[  rœ   r‘   )r]   r^   r   rm   rn   ry   r   ro   rX   rX   rY   Útest_get_addë  s    z#TestAddOnlyPermissions.test_get_addc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S ©Nr3  rÙ   rÁ  ©r]   r^   r   r   r"  r§   rq  ro   rX   rX   rY   Útest_get_editñ  s    þÿz$TestAddOnlyPermissions.test_get_editc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S ©NrØ   rÙ   rÁ  r‰  ro   rX   rX   rY   Útest_get_deleteû  s    þÿz&TestAddOnlyPermissions.test_get_deleteN©	r—   r˜   r™   rÑ  rZ   r†  r‡  rŠ  rŒ  rX   rX   rX   rY   r  Ð  s   
r  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestEditOnlyPermissionsrÇ  c                 C   s`   t jjdd| _| jdddd}tjjddd	}tjjd
dd	}|j ||¡ | jddd d S )Nr   r'  Z
changeonlyzchangeonly@example.comrP  r‚  rr   rŸ   rd   rb   rc   rQ  r„  ©rW   rU   Zchange_permissionrÂ  rX   rX   rY   rZ   	  s       ÿ ÿ ÿzTestEditOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S r…  ©r]   r^   r   rm   rn   ry   r†   ro   rX   rX   rY   r†    s    z&TestEditOnlyPermissions.test_get_indexc                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S ©Nr¢   rÁ  ©r]   r^   r   rq  ro   rX   rX   rY   r‡  !  s    z$TestEditOnlyPermissions.test_get_addc                 C   sN   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  |j	d d¡ d S )Nr3  rÙ   rt   r-  rœ   r‘   ©
r]   r^   r   r   r"  r§   rm   rn   ry   r   ro   rX   rX   rY   rŠ  &  s    þÿz%TestEditOnlyPermissions.test_get_editc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S r‹  r‰  ro   rX   rX   rY   rŒ  1  s    þÿz'TestEditOnlyPermissions.test_get_deleteNr  rX   rX   rX   rY   rŽ    s   rŽ  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestDeleteOnlyPermissionsrÇ  c                 C   s^   t jjdd| _| jddd}tjjddd}tjjd	d
d}|j ||¡ | jddd d S )Nr   r'  Z
deleteonlyrP  rQ  rr   Zdelete_advertrd   rb   rc   r„  r  rX   rX   rY   rZ   ?  s     ÿ ÿzTestDeleteOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S r…  r  ro   rX   rX   rY   r†  M  s    z(TestDeleteOnlyPermissions.test_get_indexc                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S r‘  r’  ro   rX   rX   rY   r‡  U  s    z&TestDeleteOnlyPermissions.test_get_addc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S rˆ  r‰  ro   rX   rX   rY   rŠ  Z  s    þÿz'TestDeleteOnlyPermissions.test_get_editc                 C   sN   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  |j	d d¡ d S )NrØ   rÙ   rt   rË  rœ   r‘   r“  ro   rX   rX   rY   rŒ  d  s    þÿz)TestDeleteOnlyPermissions.test_get_deleteNr  rX   rX   rX   rY   r”  <  s   
r”  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetEditHandlersc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rR   )r"   r;   rå  r0  Ú
issubclassr   r¶   r3   ©rW   rä  ræ  rX   rX   rY   Útest_standard_edit_handlerq  s    z2TestSnippetEditHandlers.test_standard_edit_handlerc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rR   )r"   r5   rå  r0  r–  r   r3   r—  rX   rX   rY   Útest_fancy_edit_handlerw  s    z/TestSnippetEditHandlers.test_fancy_edit_handlerN)r—   r˜   r™   r˜  r™  rX   rX   rX   rY   r•  p  s   r•  c                   @   s   e Zd ZdZdd„ ZdS )ÚTestInlinePanelMediaz_
    Test that form media required by InlinePanels is correctly pulled in to the edit page
    c                 C   s6   |   ¡  | j tdƒ¡}|  |jd¡ |  |d¡ d S )Nz=wagtailsnippets_snippetstests_multisectionrichtextsnippet:addrt   zwagtailadmin/js/draftail.js)rT   r]   r^   r   rm   rn   r‰   ro   rX   rX   rY   Útest_inline_panel_mediaƒ  s    ÿz,TestInlinePanelMedia.test_inline_panel_mediaN)r—   r˜   r™   rR  r›  rX   rX   rX   rY   rš  ~  s   rš  c                   @   sZ   e Zd Zdg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 )ÚTestSnippetChooserBlockrÇ  c                 C   s>   t tƒ}tjjdd}|  | |¡|j¡ |  | d¡¡ dS )úQThe value of a SnippetChooserBlock (a snippet instance) should serialize to an IDro  r¹   N)r-   r?   rk   r^   rm   Úget_prep_valuerI  rÆ   ©rW   Úblockro  rX   rX   rY   Útest_serialize  s    z&TestSnippetChooserBlock.test_serializec                 C   s>   t tƒ}tjjdd}|  | |j¡|¡ |  | d¡¡ dS )ú^The serialized value of a SnippetChooserBlock (an ID) should deserialize to a snippet instancero  r¹   N)r-   r?   rk   r^   rm   Ú	to_pythonrI  rÆ   rŸ  rX   rX   rY   Útest_deserializeš  s    z(TestSnippetChooserBlock.test_deserializec                 C   s.   t dƒ}tjjdd}|  | |j¡|¡ d S )Nztests.Advertro  r¹   )r-   r?   rk   r^   rm   r£  rI  rŸ  rX   rX   rY   Útest_reference_model_by_string¤  s    z6TestSnippetChooserBlock.test_reference_model_by_stringc                 C   s|   t tdd}| d¡ tƒ  |¡}|  |d d¡ |  |d t¡ |  |d jt¡ |  |d ddd	dd
dddidœ¡ d S ©Nzpick an advert, any advert)Ú	help_textZtest_snippetchooserblockr   r   rÏ   zTest snippetchooserblockTr‘   zBw-field w-field--model_choice_field w-field--admin_snippet_chooserZADD_COMMENTzAdd Comment)r…   Úrequiredrm  ZhelpTextr­  ZshowAddCommentButtonÚstrings)	r-   r?   Úset_namer$   Újs_argsrm   r”  r0   rW  ©rW   r   r«  rX   rX   rY   Ú
test_adapt©  s"    
ùþz"TestSnippetChooserBlock.test_adaptc                 C   sZ   t tƒ}tjjdd}| dt|jƒii d¡}|  ||¡ | ddii d¡}|  |¡ d S )Nro  r¹   rÀ   r‚   )	r-   r?   rk   r^   Úvalue_from_datadictrw  rI  rm   rÆ   ©rW   r   ro  rÄ  Zempty_valuerX   rX   rY   Útest_form_response¿  s    z*TestSnippetChooserBlock.test_form_responsec              	   C   sz   t tƒ}t tdd}tjjdd}|  | |¡|¡ |  t¡ | d ¡ W 5 Q R X |  | |¡|¡ |  | d ¡¡ d S )NF©r¨  ro  r¹   )	r-   r?   rk   r^   rm   ÚcleanÚassertRaisesr   rÆ   ©rW   Zrequired_blockZnonrequired_blockro  rX   rX   rY   Ú
test_cleanÉ  s    z"TestSnippetChooserBlock.test_cleanc                 C   sH   t tdd}| ¡ \}}}|  |d¡ |  |tf¡ |  |ddi¡ d S )NFr±  z+wagtail.snippets.blocks.SnippetChooserBlockr¨  )r-   r?   Zdeconstructrm   )rW   r   ÚpathrÚ   ÚkwargsrX   rX   rY   Útest_deconstructÕ  s
    z(TestSnippetChooserBlock.test_deconstructc                 C   sV   t tƒ}tjjdd}|  t| |¡ƒtt|jƒddfg¡ |  t| d ¡ƒg ¡ d S )Nro  r¹   r‚   )	r-   r?   rk   r^   ZassertListEqualr=  Zextract_referencesrw  rI  rŸ  rX   rX   rY   Útest_extract_referencesÜ  s    þz/TestSnippetChooserBlock.test_extract_referencesc              	   C   s(   |   t¡ ttƒ}|j W 5 Q R X d S rR   )r³  r   r-   r&   rø  )rW   r   rX   rX   rY   Ú#test_exception_on_non_snippet_modelè  s    z;TestSnippetChooserBlock.test_exception_on_non_snippet_modelN)r—   r˜   r™   rÑ  r¡  r¤  r¥  r­  r°  rµ  r¸  r¹  rº  rX   rX   rX   rY   rœ    s   


rœ  c                   @   s   e Zd Zdd„ ZdS )ÚTestAdminSnippetChooserWidgetc                 C   sX   t tƒ}tƒ  |¡}|  t|ƒd¡ |  d|d ¡ |  d|d ¡ |  |d d¡ d S )NrÝ   z1<input type="hidden" name="__NAME__" id="__ID__">r   rë  r   Z__ID__)r0   r?   r1   r«  rm   r’   ZassertInHTMLr?  )rW   rø  r«  rX   rX   rY   r­  ï  s     ÿz(TestAdminSnippetChooserWidget.test_adaptN)r—   r˜   r™   r­  rX   rX   rX   rY   r»  î  s   r»  c                   @   s(   e Zd Zdd„ Zi fdd„Zdd„ ZdS )Ú'TestSnippetListViewWithCustomPrimaryKeyc                 C   sB   |   ¡  tjjddd| _tjjddd| _tjjddd| _d S )Nú
snippet/01r5  ©Ú
snippet_idr}   ú
snippet/02z
snippet/03)rT   r<   rk   rª   r8  r9  r:  rV   rX   rX   rY   rZ   ý  s     ÿ ÿ ÿz-TestSnippetListViewWithCustomPrimaryKey.setUpc                 C   s   | j  tdƒ|¡S )NúFwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:listr\   r_   rX   rX   rY   r^     s    ÿüz+TestSnippetListViewWithCustomPrimaryKey.getc                 C   s`   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nrt   r›   r¨   )r^   rm   rn   ry   r=  r   r>  r?  r8  r9  r:  r@  rX   rX   rY   r‡     s    z3TestSnippetListViewWithCustomPrimaryKey.test_simpleN)r—   r˜   r™   rZ   r^   r‡   rX   rX   rX   rY   r¼  ü  s   r¼  c                       s   e Zd ZdgZ‡ fdd„Zi fdd„Zi fdd„Zi ef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‡  ZS )Ú#TestSnippetViewWithCustomPrimaryKeyrÇ  c                    s(   t ƒ  ¡  |  ¡  tjjddd| _d S )Nr½  r5  r¾  )r*  rZ   rT   r<   rk   rª   r8  rV   r+  rX   rY   rZ   "  s    
 ÿz)TestSnippetViewWithCustomPrimaryKey.setUpc                 C   s*   t |jƒg}| j t|j d¡|d|¡S r   )r   r§   r]   r^   r   rU  rV  )rW   r‘   r`   rÚ   rX   rX   rY   r^   )  s
    þz'TestSnippetViewWithCustomPrimaryKey.getc                 C   s*   t |jƒg}| j t|j d¡|d|¡S r   )r   r§   r]   rY  r   rU  rV  )rW   r‘   rZ  rÚ   rX   rX   rY   rY  0  s
    þz(TestSnippetViewWithCustomPrimaryKey.postc                 C   s   | j  t|j d¡ƒ|¡S rT  rX  )rW   r‘   rZ  rW  rX   rX   rY   rª   7  s    þz*TestSnippetViewWithCustomPrimaryKey.createc                 C   s*   |   | j¡}|  |jd¡ |  |d¡ d S )Nrt   r-  )r^   r8  rm   rn   ry   ro   rX   rX   rY   Útest_show_edit_view=  s    z7TestSnippetViewWithCustomPrimaryKey.test_show_edit_viewc                 C   s0   | j | jddid}|  |d¡ |  |d¡ d S )Nrg  rh  re  zNThe standard snippet with custom primary key could not be saved due to errors.r;  )rY  r8  r‰   ro   rX   rX   rY   r7  B  s    þz5TestSnippetViewWithCustomPrimaryKey.test_edit_invalidc                 C   sV   | j | jdddœd}|  |tdƒ¡ tj ¡ }|  | ¡ d¡ |  | 	¡ j
d¡ d S )NzEdited snippetZsnippet_id_edited©r}   r¿  re  rÁ  rÏ   )rY  r8  rq  r   r<   rk   r[  rm   rk  rc  r¿  rt  rX   rX   rY   r:  J  s    þÿþ
z-TestSnippetViewWithCustomPrimaryKey.test_editc                 C   sV   | j | jdddœd}|  |tdƒ¡ tj ¡ }|  | ¡ d¡ |  | 	¡ j
d¡ d S )Nztest snippetrÀ  rÄ  re  rÁ  rÏ   )rª   r8  rq  r   r<   rk   r[  rm   rk  rc  r}   rt  rX   rX   rY   ru  Z  s    þÿþ
z/TestSnippetViewWithCustomPrimaryKey.test_createc                 C   s<   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ d S )NúHwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:deleterÙ   rt   rË  )	r]   r^   r   r   r8  r§   rm   rn   ry   ro   rX   rX   rY   rŒ  j  s    þÿz3TestSnippetViewWithCustomPrimaryKey.test_get_deletec                 C   sj   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  	|d¡ |  	|tdt| jjƒgdd ¡ d S )NrÅ  rÙ   rt   rË  zCThis standard snippet with custom primary key is referenced 0 timeszGwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:usagerÅ  )
r]   r^   r   r   r8  r§   rm   rn   ry   r‰   ro   rX   rX   rY   rÍ  t  s*    þÿþþüþz3TestSnippetViewWithCustomPrimaryKey.test_usage_linkc              	   C   s8   |   td¡ | j d¡}W 5 Q R X | j|ddd d S )NzL`/<pk>/` edit view URL pattern has been deprecated in favour of /edit/<pk>/.zO/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/snippet_2F01/zT/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/edit/snippet_2F01/é-  ©rn   ©rO  rO   r]   r^   rq  ro   rX   rX   rY   Útest_redirect_to_editŠ  s    þÿýz9TestSnippetViewWithCustomPrimaryKey.test_redirect_to_editc              	   C   s8   |   td¡ | j d¡}W 5 Q R X | j|ddd d S )NzW`/<pk>/delete/` delete view URL pattern has been deprecated in favour of /delete/<pk>/.zV/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/snippet_2F01/delete/zV/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/delete/snippet_2F01/rÆ  rÇ  rÈ  ro   rX   rX   rY   Útest_redirect_to_delete˜  s    þÿýz;TestSnippetViewWithCustomPrimaryKey.test_redirect_to_deletec              	   C   s8   |   td¡ | j d¡}W 5 Q R X | j|ddd d S )NzT`/<pk>/usage/` usage view URL pattern has been deprecated in favour of /usage/<pk>/.zU/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/snippet_2F01/usage/zU/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/usage/snippet_2F01/rÆ  rÇ  rÈ  ro   rX   rX   rY   Útest_redirect_to_usage¦  s    þÿýz:TestSnippetViewWithCustomPrimaryKey.test_redirect_to_usage)r—   r˜   r™   rÑ  rZ   r^   rY  r?   rª   rÃ  r7  r:  ru  rŒ  rÍ  rÉ  rÊ  rË  rE  rX   rX   r+  rY   rÂ    s   
rÂ  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú+TestSnippetChooserBlockWithCustomPrimaryKeyrÇ  c                 C   s>   t tƒ}tjjdd}|  | |¡|j¡ |  | d¡¡ dS )r  ú	advert/01r'  N)r-   r@   rk   r^   rm   rž  r§   rÆ   rŸ  rX   rX   rY   r¡  ¸  s    z:TestSnippetChooserBlockWithCustomPrimaryKey.test_serializec                 C   s>   t tƒ}tjjdd}|  | |j¡|¡ |  | d¡¡ dS )r¢  rÍ  r'  N)r-   r@   rk   r^   rm   r£  r§   rÆ   rŸ  rX   rX   rY   r¤  Â  s    z<TestSnippetChooserBlockWithCustomPrimaryKey.test_deserializec                 C   s|   t tdd}| d¡ tƒ  |¡}|  |d d¡ |  |d t¡ |  |d jt¡ |  |d ddd	dd
dddidœ¡ d S r¦  )	r-   r@   rª  r$   r«  rm   r”  r0   rW  r¬  rX   rX   rY   r­  Ì  s(     ÿ
ùþz6TestSnippetChooserBlockWithCustomPrimaryKey.test_adaptc                 C   sZ   t tƒ}tjjdd}| dt|jƒii d¡}|  ||¡ | ddii d¡}|  |¡ d S )NrÍ  r'  Úadvertwithcustomprimarykeyr‚   )	r-   r@   rk   r^   r®  rw  r§   rm   rÆ   r¯  rX   rX   rY   r°  ä  s    ý  ÿz>TestSnippetChooserBlockWithCustomPrimaryKey.test_form_responsec              	   C   sz   t tƒ}t tdd}tjjdd}|  | |¡|¡ |  t¡ | d ¡ W 5 Q R X |  | |¡|¡ |  | d ¡¡ d S )NFr±  rÍ  r'  )	r-   r@   rk   r^   rm   r²  r³  r   rÆ   r´  rX   rX   rY   rµ  ô  s     ÿz6TestSnippetChooserBlockWithCustomPrimaryKey.test_cleanN)	r—   r˜   r™   rÑ  r¡  r¤  r­  r°  rµ  rX   rX   rX   rY   rÌ  µ  s   

rÌ  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú+TestSnippetChooserPanelWithCustomPrimaryKeyrÇ  c                 C   s’   t ƒ  d¡| _tƒ }|| j_t}d| _|jjt	jjd| jdd}t
|ƒ| _| j ¡ | _| j|d}| jj||| jd}dd	„ |jD ƒd
 | _d S )Nr1  rÚ  z	advert/02)Z	advert_idr}   )rÎ  rÛ  rÜ  c                 S   s    g | ]}t |d dƒdkr|‘qS ©rÞ  NrÎ  rß  rá  rX   rX   rY   r     s   þzETestSnippetChooserPanelWithCustomPrimaryKey.setUp.<locals>.<listcomp>r   )r   r^   r”   r   rU   rJ   rã  rk   rª   r@   r"   rä  rå  ræ  rç  rè  ré  rê  rX   rX   rY   rZ     s0     ÿÿ
  ÿþüz1TestSnippetChooserPanelWithCustomPrimaryKey.setUpc                 C   s4   | j  ¡ }|  | j|¡ |  d|¡ |  d|¡ d S )Nú%Choose advert with custom primary keyú-Choose another advert with custom primary keyrí  rï  rX   rX   rY   rñ     s    
z<TestSnippetChooserPanelWithCustomPrimaryKey.test_render_htmlc                 C   s^   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ d S )NrÛ  rÜ  c                 S   s    g | ]}t |d dƒdkr|‘qS rÐ  rß  rá  rX   rX   rY   r   -  s   þzZTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_field.<locals>.<listcomp>r   rÑ  rÒ  )rJ   ræ  rä  rç  r”   rè  rî  r?  rò  rX   rX   rY   ró  &  s      ÿþüzFTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_fieldc                 C   s   |   d| j ¡ ¡ d S )Nz~new SnippetChooser("id_advertwithcustomprimarykey", {"modalUrl": "/admin/snippets/choose/tests/advertwithcustomprimarykey/"});rô  rV   rX   rX   rY   rõ  7  s    þz:TestSnippetChooserPanelWithCustomPrimaryKey.test_render_jsc                 C   sL   t tdƒgƒ t¡}| ¡ }|ƒ }|jd j}|  |t¡ |  	|j
t¡ d S )NrÎ  )r!   r    rö  rJ   rå  r÷  rø  r”  r0   rm   rW  r@   rù  rX   rX   rY   rú  =  s    ÿþzJTestSnippetChooserPanelWithCustomPrimaryKey.test_target_model_autodetectedNrû  rX   rX   rX   rY   rÏ    s   rÏ  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )Ú%TestSnippetChooseWithCustomPrimaryKeyrÇ  c                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ   K  s    z+TestSnippetChooseWithCustomPrimaryKey.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chooser\   r_   rX   rX   rY   r^   N  s    þz)TestSnippetChooseWithCustomPrimaryKey.getc                 C   s<   |   ¡ }|  |d¡ |  |jd d¡ |  |jd d¡ d S )NrX  rœ   r‘   rm  )r^   ry   rm   r   ro   rX   rX   rY   r‡   T  s    z1TestSnippetChooseWithCustomPrimaryKey.test_simplec                 C   sf   t j ¡  ¡  tdddƒD ]}t jj|d| d q|  ¡ }|  |jd¡ |  |j	d d j
d¡ d	S r^  )r@   rk   r[  r  r©   rª   r^   rm   rn   r   r}   r«   rX   rX   rY   r­   Z  s    z3TestSnippetChooseWithCustomPrimaryKey.test_ordering)N)r—   r˜   r™   rÑ  rZ   r^   r‡   r­   rX   rX   rX   rY   rÓ  H  s
   
rÓ  c                   @   s,   e Zd ZdgZdd„ Zd	dd„Zdd„ ZdS )
Ú%TestSnippetChosenWithCustomPrimaryKeyrÇ  c                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ   i  s    z+TestSnippetChosenWithCustomPrimaryKey.setUpNc                 C   s    | j  tdt|ƒfd|pi ¡S )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chosenrÙ   ©r]   r^   r   r   rz  rX   rX   rY   r^   l  s    þûz)TestSnippetChosenWithCustomPrimaryKey.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S r{  )
r^   r@   rk   r[  r§   rY  r}  r{   râ  rm   r~  rX   rX   rY   r  u  s    z8TestSnippetChosenWithCustomPrimaryKey.test_choose_a_page)N©r—   r˜   r™   rÑ  rZ   r^   r  rX   rX   rX   rY   rÔ  f  s   
	rÔ  c                   @   s,   e Zd ZdgZdd„ Zd	dd„Zdd„ ZdS )
Ú)TestSnippetChosenWithCustomUUIDPrimaryKeyrÇ  c                 C   s   |   ¡  d S rR   r  rV   rX   rX   rY   rZ   ~  s    z/TestSnippetChosenWithCustomUUIDPrimaryKey.setUpNc                 C   s    | j  tdt|ƒfd|pi ¡S )NzBwagtailsnippetchoosers_tests_advertwithcustomuuidprimarykey:chosenrÙ   rÕ  rz  rX   rX   rY   r^     s    þûz-TestSnippetChosenWithCustomUUIDPrimaryKey.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S r{  )
r^   rA   rk   r[  r§   rY  r}  r{   râ  rm   r~  rX   rX   rY   r  Š  s    z<TestSnippetChosenWithCustomUUIDPrimaryKey.test_choose_a_page)NrÖ  rX   rX   rX   rY   r×  {  s   
	r×  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPanelConfigurationChecksc                    s   dˆ _ ‡ fdd„}|ˆ _d S )Núwagtailadmin.W002c                     s    t jdgd} ‡ fdd„| D ƒS )NZpanels)rz  c                    s   g | ]}|j ˆ jkr|‘qS rX   )rI  Ú
warning_id)r   ÚwarningrV   rX   rY   r   —  s     zQTestPanelConfigurationChecks.setUp.<locals>.get_checks_result.<locals>.<listcomp>)r
   Z
run_checks)Zchecks_resultrV   rX   rY   Úget_checks_result”  s    
ÿz=TestPanelConfigurationChecks.setUp.<locals>.get_checks_result)rÚ  rÜ  )rW   rÜ  rX   rV   rY   rZ   ‘  s    z"TestPanelConfigurationChecks.setUpc                 C   sB   t dƒgt_tjddtdd}|  ¡ }|  |g|¡ ttdƒ d S )Nr}   zFStandardSnippet.content_panels will have no effect on snippets editingzúEnsure that StandardSnippet uses `panels` instead of `content_panels`or set up an `edit_handler` if you want a tabbed editing interface.
There are no default tabs on non-Page models so there will be no Content tab for the content_panels to render in.rÙ  )ÚhintÚobjrI  Úcontent_panels)r    r;   rß  r
   ÚWarningrÜ  rm   Údelattr)rW   rÛ  Zchecks_resultsrX   rX   rY   Ú(test_model_with_single_tabbed_panel_only  s    ù
zETestPanelConfigurationChecks.test_model_with_single_tabbed_panel_onlyN)r—   r˜   r™   rZ   râ  rX   rX   rX   rY   rØ    s   rØ  )¬r  rY  Úior   Zunittestr   Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr	   Zdjango.corer
   r   Zdjango.core.exceptionsr   r   Zdjango.core.files.baser   Zdjango.core.files.uploadedfiler   Zdjango.core.handlers.wsgir   Zdjango.httpr   r   Zdjango.testr   r   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utils.timezoner   r   Z	freezegunr   Ztaggit.modelsr   Zwagtailr   Zwagtail.admin.admin_url_finderr   Zwagtail.admin.formsr   Zwagtail.admin.menur   Zwagtail.admin.panelsr    r!   r"   Zwagtail.admin.widgets.buttonr#   Zwagtail.blocks.field_blockr$   Zwagtail.coreutilsr%   Zwagtail.modelsr&   r'   r(   Zwagtail.signalsr)   r*   Zwagtail.snippets.action_menur+   r,   Zwagtail.snippets.blocksr-   Zwagtail.snippets.modelsr.   r/   Zwagtail.snippets.widgetsr0   r1   r2   Zwagtail.test.snippets.formsr3   Zwagtail.test.snippets.modelsr4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   Zwagtail.test.testapp.modelsr?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Zwagtail.test.utilsrL   Z!wagtail.test.utils.template_testsrM   Zwagtail.test.utils.timestampsrN   Zwagtail.utils.deprecationrO   Zwagtail.utils.timestampsrP   rQ   rš   rñ   r
  r  r3  rJ  rS  r¾  rÆ  rÒ  r  r&  rF  rG  rI  rO  rR  r˜  r¤  r­  rº  rÙ  rü  rÿ  r  r(  rC  rL  rU  rk  rm  ru  rx  ry  r  rŽ  r”  r•  rš  rœ  r»  r¼  rÂ  rÌ  rÏ  rÓ  rÔ  r×  rØ  rX   rX   rX   rY   Ú<module>   sþ   4<N   a A
 ÿ' } H   10 b(          S Z  Z TD
 +  4I4a+9
 ÿ'664a# NE