o
    ÌÉh…~ ã                   @   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l7m8Z8 d dl9m:Z:m;Z;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZDmEZEmFZF d dlGmHZHmIZI d d lJmKZKmLZLmMZM d d!lNmOZO d d"lPmQZQmRZR d d#lSmTZTmUZUmVZV d d$lWmXZX d d%lYmZZZm[Z[m\Z\m]Z]m^Z^m_Z_m`Z`maZambZbmcZcmdZd d d&lemfZfmgZgmhZhmiZimjZjmkZkmlZlmmZmmnZnmoZompZpmqZqmrZrmsZsmtZt d d'lumvZv d d(lwmxZx d d)lymzZz d d*l{m|Z| d d+l}m~Z~ G d,d-„ d-exeve"ƒZG d.d/„ d/eve"ƒZ€e%d0d1G d2d3„ d3eve"ƒƒZG d4d5„ d5eve"ƒZ‚G d6d7„ d7eve"ƒZƒG d8d9„ d9eve#ƒZ„G d:d;„ d;eve#ƒZ…G d<d=„ d=eve"ƒZ†G d>d?„ d?eve"ƒZ‡e%d0d1G d@dA„ dAeve"ƒƒZˆG dBdC„ dCeve"ƒZ‰G dDdE„ dEeve"ƒZŠG dFdG„ dGeŠƒZ‹G dHdI„ dIeŠƒZŒG dJdK„ dKeŠƒZe%d0d1G dLdM„ dMeŠƒƒZŽG dNdO„ dOeŠƒZG dPdQ„ dQeŠƒZG dRdS„ dSeŠƒZ‘G dTdU„ dUeve"ƒZ’G dVdW„ dWeve"ƒZ“G dXdY„ dYeve"ƒZ”G dZd[„ d[eve"ƒZ•G d\d]„ d]e"ƒZ–G d^d_„ d_e"ƒZ—G d`da„ daeve"ƒZ˜G dbdc„ dceve"ƒZ™G ddde„ deexeve"ƒZšG dfdg„ dgeve"ƒZ›G dhdi„ dieve"ƒZœG djdk„ dkeve"ƒZG dldm„ dmeve"ƒZžG dndo„ doeve#ƒZŸG dpdq„ dqeve#ƒZ G drds„ dseve"ƒZ¡G dtdu„ dueve"ƒZ¢G dvdw„ dweve"ƒZ£G dxdy„ dyeve"ƒZ¤G dzd{„ d{eve"ƒZ¥G d|d}„ d}eve"ƒZ¦G d~d„ de"ƒZ§G d€d„ deve"ƒZ¨G d‚dƒ„ dƒeve"ƒZ©G d„d…„ d…eve"ƒZªG d†d‡„ d‡e"ƒZ«G dˆd‰„ d‰eve"ƒZ¬G dŠd‹„ d‹eve"ƒZ­G dŒd„ deve"ƒZ®G dŽd„ deve"ƒZ¯G dd‘„ d‘eve"ƒ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)Ú
SearchForm)Ú
admin_menu)Ú
FieldPanelÚ
ObjectListÚget_edit_handler)ÚButtonWithDropdown)ÚFieldBlockAdapter)Úget_dummy_request)ÚLocaleÚModelLogEntryÚRevision)Ú	publishedÚunpublished)ÚActionMenuItemÚDeleteMenuItemÚ"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ÚCustomPreviewSizesModelÚDraftStateCustomPrimaryKeyModelÚDraftStateModelÚFullFeaturedSnippetÚMultiPreviewModesModelÚPreviewableModelÚRevisableChildModelÚRevisableModelÚSnippetChooserModelÚ'SnippetChooserModelWithCustomPrimaryKeyÚVariousOnDeleteModel)ÚWagtailTestUtils)ÚAdminTemplateTestUtils)Úsubmittable_timestamp)ÚRemovedInWagtail70Warning)Úrender_timestampc                   @   óH   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   ó   |   ¡ | _d S ©N©ÚloginÚuser©Úself© r^   úd/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/snippets/tests/test_snippets.pyÚsetUpV   ó   zTestSnippetIndexView.setUpc                 C   ó   | j  tdƒ|¡S )Núwagtailsnippets:index©ÚclientÚgetr   ©r]   Úparamsr^   r^   r_   rf   Y   ó   zTestSnippetIndexView.getc                 C   óF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ©NFÚwagtailadminÚaccess_admin©Úcontent_type__app_labelÚcodenameé.  ©
r[   Úis_superuserÚuser_permissionsÚaddr   Úobjectsrf   ÚsaveÚassertEqualÚstatus_code©r]   Úresponser^   r^   r_   Ú!test_get_with_limited_permissions\   ó   ÿÿ
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 )NFrl   rm   rn   ÚtestsÚview_advertéÈ   ú!wagtailadmin/generic/listing.htmlztr td aÚhrefú!wagtailsnippets_tests_advert:listÚAdverts)r[   rs   rt   ru   r   rv   rf   rw   rx   ry   ÚassertTemplateUsedÚget_soupÚcontentÚ
select_oner   ÚtextÚstrip)r]   r{   ÚsoupÚlinkr^   r^   r_   Ú#test_get_with_only_view_permissionsh   s"   ÿÿü

z8TestSnippetIndexView.test_get_with_only_view_permissionsc                 C   sH   |   ¡ }|  |jd¡ |  |d¡ |  dddœg|j¡ |  |d¡ d S )Nr€   r   Ú ÚSnippets©ÚurlÚlabelzdata-locale-selector)rf   rx   ry   r…   ÚassertBreadcrumbsItemsRenderedr‡   ÚassertNotContainsrz   r^   r^   r_   Útest_simple|   s   
þz TestSnippetIndexView.test_simplec                 C   ó   |   |  ¡ d¡ d S )Nr„   ©ÚassertContainsrf   r\   r^   r^   r_   Útest_displays_snippetˆ   ó   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 )NFrl   rm   rn   r~   r   c                 S   s   g | ]	}|j d kr|‘qS )Úsnippets)Úname)Ú.0Úitemr^   r^   r_   Ú
<listcomp>š   ó    z`TestSnippetIndexView.test_snippets_menu_item_shown_with_only_view_permission.<locals>.<listcomp>é   r   r›   r   Úsnippetrc   )r[   rs   rt   ru   r   rv   rf   rw   r&   r    Úmenu_items_for_requestrx   Úlenrœ   r’   Ú	icon_namer‘   r   )r]   ÚrequestÚ
menu_itemsr›   rž   r^   r^   r_   Ú7test_snippets_menu_item_shown_with_only_view_permission‹   s(   ÿÿü

zLTestSnippetIndexView.test_snippets_menu_item_shown_with_only_view_permissionN)
Ú__name__Ú
__module__Ú__qualname__r`   rf   r|   r   r•   r™   r¨   r^   r^   r^   r_   rV   U   s    rV   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 rX   )rZ   r   rv   rf   r[   )r]   Ú
user_modelr^   r^   r_   r`   ¤   s   zTestSnippetListView.setUpc                 C   rb   )Nrƒ   rd   rg   r^   r^   r_   rf   ©   ri   zTestSnippetListView.getc                 C   s8   |   ¡ }|  |jd¡ |  |d¡ |  |jd d¡ d S )Nr€   ú#wagtailsnippets/snippets/index.htmlÚheader_iconr¢   )rf   rx   ry   r…   Úcontextrz   r^   r^   r_   r•   ¬   s   zTestSnippetListView.test_simplec                 C   rj   rk   rr   rz   r^   r^   r_   Úget_with_limited_permissions²   r}   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 )NFrl   rm   rn   r~   Úchange_advertr€   z'<p>There are no adverts to display.</p>T©Úhtmlú wagtailsnippets_tests_advert:add)r[   rs   rt   ru   r   rv   rf   rw   rx   ry   r˜   r”   r   rz   r^   r^   r_   Ú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‰   r€   Úpage_objr   z	advert 10N)	ÚrangerA   rv   Úcreaterf   rx   ry   r°   r‰   ©r]   Úir{   r^   r^   r_   Útest_orderingÓ   s
   z!TestSnippetListView.test_orderingc                 C   s>   g d¢}|D ]}|   d|i¡}|  |jd¡ |  |d¡ qd S )N)Ú0Ú1z-1Ú9999z
Not a pageÚpr€   r®   ©rf   rx   ry   r…   )r]   ÚpagesÚpager{   r^   r^   r_   Útest_simple_paginationÝ   s   ýz*TestSnippetListView.test_simple_paginationc                 C   r–   )Nú
Add advertr—   r\   r^   r^   r_   Útest_displays_add_buttonä   rš   z,TestSnippetListView.test_displays_add_buttonc                 C   s   |   |  ¡ j d¡¡ d S ©NÚsearch_form)ÚassertFalserf   r°   r\   r^   r^   r_   Útest_not_searchableç   ó   z'TestSnippetListView.test_not_searchablec                    sÀ   t jjdd‰ d‡ ‡fdd„	}t d|¡ ˆ ¡ }W d   ƒ n1 s$w   Y  ˆ |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 )Nrƒ   ú&Another useless snippet listing buttonz/custom-urlé
   ©Úpriority)rx   r[   r   r4   ©r¢   r[   Únext_url©Úadvertr]   r^   r_   Úsnippet_listing_buttonsí   s   €ÿz_TestSnippetListView.test_register_snippet_listing_buttons_hook.<locals>.snippet_listing_buttonsÚ register_snippet_listing_buttonsr€   ú wagtailadmin/shared/buttons.htmlútbody tr td ul.actionszli > a[href='/custom-url']z7li [data-controller='w-dropdown'] a[href='/custom-url']rÒ   rX   )rA   rv   r½   r   Úregister_temporarilyrf   rx   ry   r…   r†   r‡   rˆ   ÚassertIsNoneÚassertIsNotNoner‰   rŠ   )r]   rÚ   r{   r‹   ÚactionsÚtop_level_custom_buttonÚcustom_buttonr^   rØ   r_   Ú*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 d   ƒ n1 s$w   Y  ˆ |jd¡ ˆ |d¡ ˆ 	|j
¡}| d¡}| d	¡}ˆ |¡ | d
¡}ˆ t|ƒd¡ d }|D ]}d|j ¡ v rg|}q\ˆ |¡ ˆ | d¡j ¡ d¡ |jdddid}	ˆ |	¡ ˆ |	j ¡ d¡ d S )NrÐ   rÑ   c                 3   sJ    ˆ  | ˆ ¡ ˆ  |ˆj¡ ˆ  |tdƒ¡ tdtddddgdV  d S )Nrƒ   ú	Moar pls!ÚAlrightyú/cheersrÓ   rÔ   )r’   Úbuttons)rx   r[   r   r$   r4   rÖ   rØ   r^   r_   rÚ     s   €þzmTestSnippetListView.test_register_snippet_listing_buttons_hook_with_dropdown.<locals>.snippet_listing_buttonsrÛ   r€   rÜ   rÝ   z@li [data-controller='w-dropdown'] [data-controller='w-dropdown']z#li > [data-controller='w-dropdown']é   rå   ÚbuttonÚar‚   rç   ©Úattrsræ   rX   )rA   rv   r½   r   rÞ   rf   rx   ry   r…   r†   r‡   rˆ   rß   Úselectr¤   r‰   rŠ   rà   Úfind)
r]   rÚ   r{   r‹   rá   Únested_dropdownÚdropdown_buttonsÚcustom_dropdownrê   rã   r^   rØ   r_   Ú8test_register_snippet_listing_buttons_hook_with_dropdown  s6   	ÿ
ý
ÿ

€

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Ñ   r€   rÜ   z<tbody tr td ul.actions > li > [data-controller='w-dropdown']r¡   r   rë   r‚   z/dummy-buttonrì   zDummy Button)rA   rv   r½   rf   rx   ry   r…   r†   r‡   rî   r¤   rï   rà   r‰   rŠ   )r]   r{   r‹   Ú	dropdownsÚmore_dropdownÚdummy_buttonr^   r^   r_   Ú+test_construct_snippet_listing_buttons_hook3  s   ÿ
z?TestSnippetListView.test_construct_snippet_listing_buttons_hookc                    sŽ   t jjdd}tdt|jƒgd‰ ‡ ‡fdd„}t d|¡ ˆ ¡ }W d   ƒ n1 s-w   Y  ˆ 	|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 r^   )r‘   )r   rê   )Ú
delete_urlr^   r_   rŸ   P  r    zšTestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttons.<locals>.hide_delete_button_for_lovely_advert.<locals>.<listcomp>é   ©rx   r¤   ©rè   r¢   r[   ©rü   r]   r^   r_   Ú$hide_delete_button_for_lovely_advertM  s   z†TestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttons.<locals>.hide_delete_button_for_lovely_advertÚ!construct_snippet_listing_buttonsr€   rÜ   )rA   rv   r½   r   r   rº   r   rÞ   rf   rx   ry   r…   r”   )r]   rÙ   r  r{   r^   r   r_   ÚDtest_construct_snippet_listing_buttons_hook_contains_default_buttonsG  s   ÿþ
üzXTestSnippetListView.test_construct_snippet_listing_buttons_hook_contains_default_buttonsc              	      sš   t jjdd‰ ‡ ‡fdd„}t d|¡" ˆ td¡ ˆ ¡ }W d   ƒ n1 s*w   Y  W d   ƒ n1 s9w   Y  ˆ |j	d¡ ˆ 
|d¡ d S )	NrÐ   rÑ   c                    s*   ˆ  |ˆ ¡ ˆ  |ˆj¡ ˆ  |i ¡ d S rX   )rx   r[   )rè   r¢   r[   r°   rØ   r^   r_   Ú$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 argumentr€   rÜ   )rA   rv   r½   r   rÞ   ÚassertWarnsMessagerS   rf   rx   ry   r…   )r]   r  r{   r^   rØ   r_   Ú>test_construct_snippet_listing_buttons_hook_deprecated_context]  s"   þþý
ù€ 	zRTestSnippetListView.test_construct_snippet_listing_buttons_hook_deprecated_contextc                    sr   t jjdd ‡ fdd„}t d|¡ ˆ  ¡ }W d   ƒ n1 s"w   Y  ˆ  |j¡}| d¡}ˆ  	|¡ d S )NrÐ   rÑ   c                    s    g | d d …< ˆ   t| ƒd¡ d S )Nr   rþ   rÿ   r\   r^   r_   Úremove_all_buttonst  s   zfTestSnippetListView.test_dropdown_not_rendered_when_no_child_buttons_exist.<locals>.remove_all_buttonsr  rÝ   )
rA   rv   r½   r   rÞ   rf   r†   r‡   rˆ   rß   )r]   r  r{   r‹   rá   r^   r\   r_   Ú6test_dropdown_not_rendered_when_no_child_buttons_existq  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³   )rG   rv   r½   Úsave_revisionÚpublishr‰   re   rf   r   r   rº   r˜   )r]   r¢   r{   Úedit_urlr^   r^   r_   Útest_use_latest_draft_as_title‚  s(   ÿ
þÿþ
÷z2TestSnippetListView.test_use_latest_draft_as_titleN)r©   rª   r«   r`   rf   r•   r±   r¶   rÀ   rÈ   rÊ   rÎ   rä   ró   r÷   r  r  r  r  r^   r^   r^   r_   r¬   £   s"    
!(r¬   T©ÚWAGTAIL_I18N_ENABLEDc                   @   sL   e Zd Zdd„ Zeg d¢ddd„ ƒZdd„ Zed	d
dd„ ƒZdd„ ZdS )ÚTestLocaleSelectorOnListc                 C   ó   t jjdd| _|  ¡ | _d S ©NÚfr©Úlanguage_code©r'   rv   r½   Ú	fr_localerZ   r[   r\   r^   r^   r_   r`   ¡  ó   zTestLocaleSelectorOnList.setUp))ÚarÚArabic)ÚenÚEnglish)r  ÚFrench)Ú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³   )re   rf   r   r†   r‡   rˆ   rß   rà   rî   rx   r¤   r˜   )r]   r{   r‹   Úarabic_inputÚfrench_inputÚadd_urlÚadd_buttonsr^   r^   r_   Ú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  Údeletere   rf   r   r†   r‡   rˆ   rß   )r]   r{   r‹   Úlocale_inputÚfilters_drilldownr^   r^   r_   Ú*test_no_locale_filter_when_only_one_localeÈ  s   
ÿ


zCTestLocaleSelectorOnList.test_no_locale_filter_when_only_one_localeFr  c                 C   ó‚   | 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³   ©re   rf   r   r†   r‡   rˆ   rß   rî   rx   r¤   r˜   ©r]   r{   r‹   Úinput_elementr+  r,  r^   r^   r_   Ú3test_locale_selector_not_present_when_i18n_disabled×  s"   ÿ

ÿ
üzLTestLocaleSelectorOnList.test_locale_selector_not_present_when_i18n_disabledc                 C   r3  )Nrƒ   r.  rµ   r%  r&  ré   zA<p>There are no adverts to display.
            Why not <a href="r(  Tr³   r4  r5  r^   r^   r_   Ú<test_locale_selector_not_present_on_non_translatable_snippetí  s   

ÿ
üzUTestLocaleSelectorOnList.test_locale_selector_not_present_on_non_translatable_snippetN)	r©   rª   r«   r`   r   r-  r2  r7  r8  r^   r^   r^   r_   r  Ÿ  s    ÿ

r  c                   @   ó$   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¼   rD   rv   r½   rZ   )r]   r¿   r^   r^   r_   r`     s   zTestModelOrdering.setUpc                 C   ó:   | j  tdƒ¡}|  |jd¡ |  |jd d jd¡ d S )Nz4wagtailsnippets_tests_advertwithtabbedinterface:listr€   r»   r   r;  ©re   rf   r   rx   ry   r°   r‰   rz   r^   r^   r_   Ú$test_listing_respects_model_ordering  ó
   ÿz6TestModelOrdering.test_listing_respects_model_orderingc                 C   r<  )Nz=wagtailsnippetchoosers_tests_advertwithtabbedinterface:chooser€   Úresultsr   r;  r=  rz   r^   r^   r_   Ú$test_chooser_respects_model_ordering  r?  z6TestModelOrdering.test_chooser_respects_model_orderingN)r©   rª   r«   r`   r>  rA  r^   r^   r^   r_   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 ]<}tjj|d › d|› d}tjj|d › d|› dd	}|d
 dkrAt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¼   rA   rv   r½   rG   r(   r	   Úget_for_modelr   rº   r  r  )Úclsr¿   rÙ   Údraftr^   r^   r_   ÚsetUpTestData  s   
û€õz"TestListViewOrdering.setUpTestDatac                 C   ó   |   ¡  d S rX   ©rZ   r\   r^   r^   r_   r`   '  ó   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 )Nrƒ   ú?ordering=_updated_atú?ordering=liver€   ú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   re   rf   rx   ry   r…   r˜   r”   ©r]   Úlist_urlr{   Úsort_updated_urlÚsort_live_urlr^   r^   r_   Ú,test_listing_orderable_columns_with_no_mixin*  ó    
ý

ý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  rT  rU  r€   rV  rW  rX  Tr³   rY  )r   re   rf   rx   ry   r…   r˜   rZ  r^   r^   r_   Ú5test_listing_orderable_columns_with_draft_state_mixin@  r_  zJTestListViewOrdering.test_listing_orderable_columns_with_draft_state_mixinc                 C   óÚ   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ƒ   rT  r€   r»   r   éÿÿÿÿzaaaaaaaadvert 8ú?ordering=-_updated_at©r   re   rf   rx   ry   rß   r°   Ú_updated_atr‰   rà   r˜   ©r]   r[  r{   r^   r^   r_   Ú&test_order_by_updated_at_with_no_mixinV  ó   z;TestListViewOrdering.test_order_by_updated_at_with_no_mixinc                 C   ra  )	Nr  rT  r€   r»   r   rb  zddddddddraft 8rc  rd  rf  r^   r^   r_   Ú/test_order_by_updated_at_with_draft_state_mixinp  rh  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  rU  r€   r»   r   rb  z?ordering=-live)
r   re   rf   rx   ry   rÍ   r°   rE  Ú
assertTruer˜   rf  r^   r^   r_   Útest_order_by_liveŠ  s   z'TestListViewOrdering.test_order_by_liveN)r©   rª   r«   ÚclassmethodrP  r`   r^  r`  rg  ri  rk  r^   r^   r^   r_   rB    s    
rB  c                   @   rU   )Ú(TestSnippetListViewWithSearchableSnippetc                 C   ó<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S ©NÚHellorÑ   ÚWorldzHello World©rZ   r<   rv   r½   Ú	snippet_aÚ	snippet_bÚ	snippet_cr\   r^   r^   r_   r`   ¦  ó   z.TestSnippetListViewWithSearchableSnippet.setUpc                 C   rb   )Nz4wagtailsnippets_snippetstests_searchablesnippet:listrd   rg   r^   r^   r_   rf   ®  ó   þz,TestSnippetListViewWithSearchableSnippet.getc                 C   sl   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ |  |d¡ d S )Nr€   r®   r»   úThis field is required.©rf   rx   ry   r…   Úlistr°   Úobject_listÚassertInrs  rt  ru  r”   ©r]   r{   Úitemsr^   r^   r_   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Ž   r€   r®   r»   rx  ry  r}  r^   r^   r_   Útest_empty_qÂ  s   z5TestSnippetListViewWithSearchableSnippet.test_empty_qc                 C   s   |   |  ¡ jd t¡ d S rË   )ÚassertIsInstancerf   r°   r   r\   r^   r^   r_   Útest_is_searchableÐ  rÏ   z;TestSnippetListViewWithSearchableSnippet.test_is_searchablec                 C   óL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )Nr  rp  r»   ©	rf   rz  r°   r{  r|  rs  ÚassertNotInrt  ru  r}  r^   r^   r_   Útest_search_helloÓ  ó
   z:TestSnippetListViewWithSearchableSnippet.test_search_helloc                 C   óL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )Nr  Úworr»   ©	rf   rz  r°   r{  r…  rs  r|  rt  ru  r}  r^   r^   r_   Útest_search_world_autocompleteÜ  r‡  zGTestSnippetListViewWithSearchableSnippet.test_search_world_autocompleteN)
r©   rª   r«   r`   rf   r•   r€  r‚  r†  r‹  r^   r^   r^   r_   rm  ¥  s    	rm  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   rn  ro  ©rZ   r9   rv   r½   rs  rt  ru  r\   r^   r^   r_   r`   î  ó   ÿz=TestSnippetListViewWithNonAutocompleteSearchableSnippet.setUpc                 C   rb   )NzCwagtailsnippets_snippetstests_nonautocompletesearchablesnippet:listrd   rg   r^   r^   r_   rf   ø  ó   ÿüz;TestSnippetListViewWithNonAutocompleteSearchableSnippet.getc                 C   óx   |   td¡ |  ddi¡}W d   ƒ n1 sw   Y  t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nú'does not specify any AutocompleteFieldsr  rp  r»   ©ÚassertWarnsRegexÚRuntimeWarningrf   rz  r°   r{  r|  rs  r…  rt  ru  r}  r^   r^   r_   r†     ó   ÿýzITestSnippetListViewWithNonAutocompleteSearchableSnippet.test_search_helloN©r©   rª   r«   Ú__doc__r`   rf   r†  r^   r^   r^   r_   rŒ  æ  s
    
rŒ  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   rW   rX   rY   r\   r^   r^   r_   r`     ra   zTestSnippetCreateView.setUpc                 C   ó   | j  t|j d¡ƒ|¡S ©Nru   )re   rf   r   Úsnippet_viewsetÚget_url_name)r]   rh   Úmodelr^   r^   r_   rf     ó   ÿzTestSnippetCreateView.getc                 C   rš  r›  ©re   Úpostr   rœ  r  )r]   Ú	post_datarž  r^   r^   r_   r¡    rŸ  zTestSnippetCreateView.postc                 C   rj   rk   rr   rz   r^   r^   r_   r|     r}   z7TestSnippetCreateView.test_get_with_limited_permissionsc                 C   sÎ   |   ¡ }|  |jd¡ |  |d¡ | j|ddd |  |j¡}| d¡}|  |¡ |  	d|j
  d¡ ¡ ¡ |  h d	£ |j
  d
¡ ¡ ¡¡ |  |j
  d¡d¡ |  |j
  d¡d¡ |  	d|j
  d¡ ¡ ¡ d S )Nr€   ú$wagtailsnippets/snippets/create.htmlúrole="tablist"Tr³   ú#w-editor-formú	w-unsavedúdata-controller¾   úw-unsaved#submitúkeyup->w-unsaved#checkúchange->w-unsaved#checkú&beforeunload@window->w-unsaved#confirmúdata-actionú!data-w-unsaved-confirmation-valueÚtrueúdata-w-unsaved-force-valueÚfalseÚeditsúdata-w-unsaved-watch-value)rf   rx   ry   r…   r”   r†   r‡   rˆ   rà   r|  rí   Úsplitrj  Úissubset©r]   r{   r‹   Úeditor_formr^   r^   r_   r•   '  s0   

ú
þ
þþz!TestSnippetCreateView.test_simplec                 C   sj   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )	Nz3wagtailsnippets_tests_advertwithtabbedinterface:addr€   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©re   rf   r   rx   ry   r…   r˜   rz   r^   r^   r_   Ú"test_snippet_with_tabbed_interfaceH  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 ©
NFrl   rm   rn   ú	test textúhttp://www.example.com/©r‰   r‘   ©r¢  rq   )r[   rs   rt   ru   r   rv   rf   rw   r¡  rx   ry   rz   r^   r^   r_   Ú$test_create_with_limited_permissions[  s   ÿÿ
ÿz:TestSnippetCreateView.test_create_with_limited_permissionsc                 C   óØ   | j ddid}|  |d¡ | j|ddd | j|ddd |  |j¡}| d	¡}|  |¡ |  d
|j d¡ 	¡ ¡ |  
h d£ |j d¡ 	¡ ¡¡ |  |j d¡d¡ |  |j d¡d¡ |  d|j d¡ 	¡ ¡ d S )NÚfooÚbarrÀ  z.The advert could not be created due to errors.úerror-messager¡   ©ÚcountúThis field is requiredr¥  r¦  r§  r¨  r­  r®  r¯  r°  r²  r³  ©r¡  r˜   r†   r‡   rˆ   rà   r|  rí   rf   r´  rj  rµ  rx   r¶  r^   r^   r_   Útest_create_invalidi  ó0   

ú
þ
ýþz)TestSnippetCreateView.test_create_invalidc                 C   óV   | j dddœd}|  |tdƒ¡ tjjdd}|  | ¡ d¡ |  | ¡ j	d¡ d S )NÚtest_advertr¾  r¿  rÀ  rƒ   rÑ   r¡   ©
r¡  ÚassertRedirectsr   rA   rv   Úfilterrx   rÇ  Úfirstr‘   ©r]   r{   r›   r^   r^   r_   Útest_create‹  s   ÿz!TestSnippetCreateView.test_createc                 C   ó„   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ÚworldrÍ  zhttp://example.com/ú, ©r‰   r‘   ÚtagsrÀ  rƒ   rÑ   rœ   ©Úname__inré   ©r¡  ÚjoinrÏ  r   rA   rv   rf   rz  r   Úorder_byrÐ  rx   r¤   rÙ  ©r]   rÙ  r{   r¢   Úexpected_tagsr^   r^   r_   Útest_create_with_tags•  ó   ýÿ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©rž  úenctype="multipart/form-data"Úfileútest.txts   Uploaded file©rž  r¢  ú4wagtailsnippets_snippetstests_fileuploadsnippet:list)rf   r8   r˜   r¡  r   rÏ  r   rv   rx   rå  Úread©r]   r{   r¢   r^   r^   r_   Ú!test_create_file_upload_multipart§  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‰   Úcreate_revisablerç  ú)wagtailsnippets_tests_revisablemodel:listrÑ   r¡   rG  ©rJ  )r¡  rL   rÏ  r   rv   rÐ  rÑ  rx   rÇ  Ú	revisionsr‡   r(   Úfor_instanceÚrevision)r]   r{   r›   r¢   rï  rñ  Úlog_entriesr^   r^   r_   Útest_create_with_revision¶  s$   ÿÿÿz/TestSnippetCreateView.test_create_with_revisionc                    ó`   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W d   ƒ n1 sw   Y  ˆ  |jd¡ ˆ  |jd¡ d S )Nc                    ó    ˆ   | t¡ ˆ  |t¡ tdƒS ©NúOverridden!©r  r   rx   rA   r   ©r¦   rž  r\   r^   r_   Ú	hook_funcÐ  ó   zLTestSnippetCreateView.test_before_create_snippet_hook_get.<locals>.hook_funcÚbefore_create_snippetr€   ó   Overridden!©Úregister_hookrf   rx   ry   r‡   ©r]   rú  r{   r^   r\   r_   Ú#test_before_create_snippet_hook_getÏ  s   
ÿz9TestSnippetCreateView.test_before_create_snippet_hook_getc                    ó~   ‡ fdd„}ˆ   d|¡ dddœ}ˆ j|d}W d   ƒ n1 s"w   Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ ¡ d S )
Nc                    rõ  rö  rø  rù  r\   r^   r_   rú  Ü  rû  zMTestSnippetCreateView.test_before_create_snippet_hook_post.<locals>.hook_funcrü  ú	Hook testr¾  r¿  rÀ  r€   rý  )	rÿ  r¡  rx   ry   r‡   rÍ   rA   rv   Úexists©r]   rú  r¢  r{   r^   r\   r_   Ú$test_before_create_snippet_hook_postÛ  s   
þz:TestSnippetCreateView.test_before_create_snippet_hook_postc                    r  )
Nc                    ó0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS )Nr  r¾  r÷  ©r  r   rx   r‰   r‘   r   ©r¦   Úinstancer\   r^   r_   rú  ì  ó   zGTestSnippetCreateView.test_after_create_snippet_hook.<locals>.hook_funcÚafter_create_snippetr  r¾  r¿  rÀ  r€   rý  )	rÿ  r¡  rx   ry   r‡   rj  rA   rv   r  r  r^   r\   r_   Útest_after_create_snippet_hookë  s   
þz4TestSnippetCreateView.test_after_create_snippet_hookc                    ót   G dd„ dt ƒ‰ ‡ fdd„}|  d|¡ t ¡  |  ¡ }W d   ƒ n1 s'w   Y  t ¡  | j|ddd d S )	Nc                   @   ó$   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úcustom-classc                 S   ó   dS ©NTr^   ©r]   r°   r^   r^   r_   Úis_shown  ó   zhTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownN©r©   rª   r«   r’   rœ   r¥   Ú	classnamer  r^   r^   r^   r_   ÚTestSnippetActionMenuItemý  ó    r  c                    ó
   ˆ ddS ©Nr   ©Úorderr^   rã  ©r  r^   r_   rú    ó   
zOTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.hook_funcÚ!register_snippet_action_menu_itemú±<button type="submit" name="test" value="Test" class="button custom-class"><svg class="icon icon-check icon" aria-hidden="true"><use href="#icon-check"></use></svg>Test</button>Tr³   ©r,   rÿ  r.   Úcache_clearrf   r˜   r   r^   r!  r_   Ú&test_register_snippet_action_menu_itemü  ó   	
ý
ýz<TestSnippetCreateView.test_register_snippet_action_menu_itemc                 C   s^   dd„ }|   d|¡ t ¡  |  ¡ }W d   ƒ n1 sw   Y  t ¡  |  |jd¡ d S )Nc                 S   s   d S rX   r^   rã  r^   r^   r_   rú    r  zWTestSnippetCreateView.test_register_snippet_action_menu_item_as_none.<locals>.hook_funcr#  r€   )rÿ  r.   r&  rf   rx   ry   r   r^   r^   r_   Ú.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 d   ƒ n1 s$w   Y  ˆ |j¡}| d¡}ˆ |¡ |jddid	}ˆ |¡ ˆ 	|j
 ¡ d
¡ ˆ 	|j d¡ddg¡ | d¡}ˆ |¡ | d¡}ˆ |¡ | d¡}ˆ |¡ | d¡}	ˆ |	¡ d S )Nc                   @   s2   e Zd ZdZdZdZdZdd„ ZG dd„ dƒZd	S )
z[TestSnippetCreateView.test_construct_snippet_action_menu.<locals>.TestSnippetActionMenuItemr  r  r  r  c                 S   r  r  r^   r  r^   r^   r_   r  )  r  zdTestSnippetCreateView.test_construct_snippet_action_menu.<locals>.TestSnippetActionMenuItem.is_shownc                   @   s   e Zd ZdgZddgiZdS )zaTestSnippetCreateView.test_construct_snippet_action_menu.<locals>.TestSnippetActionMenuItem.Mediazjs/some-default-item.jsÚallzcss/some-default-item.cssN)r©   rª   r«   ÚjsÚcssr^   r^   r^   r_   ÚMedia,  s    r-  N)	r©   rª   r«   r’   rœ   r¥   r  r  r-  r^   r^   r^   r_   r  #  s    r  c                    sP   ˆ  | t¡ ˆ  |t¡ ˆ |d d¡ ˆ |d t¡ ˆ ddg| d d …< d S )NÚviewr½   rž  r   r  )r  rz  r   rx   rA   ©r§   r¦   r°   ©r  r]   r^   r_   rú  0  s
   zKTestSnippetCreateView.test_construct_snippet_action_menu.<locals>.hook_funcÚconstruct_snippet_action_menuzform button[name='test']Úclassz
w-dropdownrì   r  rê   r  zsvg use[href='#icon-check']z-script[src='/static/js/some-default-item.js']z.link[href='/static/css/some-default-item.css']zform button[name='action-save'])r,   rÿ  rf   r†   r‡   rˆ   rà   Úfind_parentrß   rx   r‰   rŠ   rí   )
r]   rú  r{   r‹   Úcustom_actionÚdropdown_parentÚiconr+  r,  Ú	save_itemr^   r0  r_   Ú"test_construct_snippet_action_menu"  s(   	
ÿ









z8TestSnippetCreateView.test_construct_snippet_action_menuN)r©   rª   r«   r`   rA   rf   r¡  r|   r•   r»  rÁ  rÊ  rÓ  rá  rë  ró  r  r  r  r'  r)  r8  r^   r^   r^   r_   r™    s&    !"
r™  c                   @   r9  )ÚTestSnippetCopyViewc                 C   s:   t jjdd| _tt j d¡| jjfd| _|  	¡ | _
d S )NúTest snippetrÑ   Úcopyrù   )r=   rv   r½   r¢   r   rœ  r  rº   r‘   rZ   r[   r\   r^   r^   r_   r`   U  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 )NFrl   rm   rn   rq   Úwagtailadmin_home)r[   rs   rw   r   rv   rf   rt   ru   re   r‘   rx   ry   rÏ  r   )r]   Úadmin_permissionr{   r^   r^   r_   Útest_without_permission]  s   
ÿz+TestSnippetCopyView.test_without_permissionc                 C   sV   | j  | j¡}|  |jd¡ |  |d¡ |  |j¡}| d¡}|  |j	 d¡d¡ d S )Nr€   r£  zinput[name="text"]Úvaluer:  )
re   rf   r‘   rx   ry   r…   r†   r‡   rˆ   rí   )r]   r{   r‹   Ú
text_inputr^   r^   r_   Útest_form_is_prefilledi  s   
z*TestSnippetCopyView.test_form_is_prefilledN)r©   rª   r«   r`   r>  rA  r^   r^   r^   r_   r9  T  s    r9  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   r  r  r  r\   r^   r^   r_   r`   x  r  z TestLocaleSelectorOnCreate.setUpc                 C   ó@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S ©Nr#  úSwitch localesú
?locale=frú	<a href="ú" lang="fr">©re   rf   r   r˜   ©r]   r{   Úswitch_to_french_urlr^   r^   r_   r-  |  s   ÿÿÿ
þz/TestLocaleSelectorOnCreate.test_locale_selectorc                 C   sD   | j  tdƒd ¡}|  |d¡ tdƒd }|  |d|› d¡ d S )Nr#  rG  rF  r$  rH  z" lang="en">rJ  )r]   r{   Úswitch_to_english_urlr^   r^   r_   Ú)test_locale_selector_with_existing_localeŒ  s   ÿÿÿÿ
þzDTestLocaleSelectorOnCreate.test_locale_selector_with_existing_localeFr  c                 C   rD  rE  ©re   rf   r   r”   rK  r^   r^   r_   r7    s   ÿÿÿ
þzNTestLocaleSelectorOnCreate.test_locale_selector_not_present_when_i18n_disabledc                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S )Nrµ   rF  r#  rG  rH  rI  rO  rK  r^   r^   r_   r8  ®  s   ÿÿ
þzWTestLocaleSelectorOnCreate.test_locale_selector_not_present_on_non_translatable_snippetN)
r©   rª   r«   Úfixturesr`   r-  rN  r   r7  r8  r^   r^   r^   r_   rB  t  s    
rB  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   rW   rX   rY   r\   r^   r^   r_   r`   Ã  ra   z!TestCreateDraftStateSnippet.setUpc                 C   s   | j  tdƒ¡S ©Nú)wagtailsnippets_tests_draftstatemodel:addrd   r\   r^   r^   r_   rf   Æ  ó   zTestCreateDraftStateSnippet.getc                 C   rb   rS  )re   r¡  r   ©r]   r¢  r^   r^   r_   r¡  É  rw  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 )NrT  r€   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©rÇ  Ú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   rf   rx   ry   r…   r˜   r‡   ÚdecodeÚassertTagInHTMLr†   rˆ   rà   r”   )r]   r+  r{   r´   r‹   ÚdialogÚunpublish_urlr^   r^   r_   Útest_getÏ  sZ   þþ
ü
ÿ

üüÿ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 FoorÀ  rÑ   r  rù   )r¡  rG   rv   rf   rÏ  r   rº   rx   r‰   rÍ   rE  rj  Úhas_unpublished_changesrß   Úfirst_published_atÚlast_published_atÚlive_revisionrà   Úlatest_revisionr‡   rê  r^   r^   r_   Útest_save_draft  s   þz+TestCreateDraftStateSnippet.test_save_draftc              	   C   sL  t  ¡ }t |¡ z–tƒ }t|ƒ | jdddœd}W d   ƒ n1 s%w   Y  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 t |¡ d S t |¡ w )Nr	  úaction-publish©r‰   rn  rÀ  rÑ   r  r‰   r¡   r   ré   Úsenderr
  )r   Ú	MagicMockr*   Úconnectr   r   r¡  rG   rv   rf   rÏ  r   rx   r‰   rj  rE  rÍ   rh  ri  rj  rà   rk  rl  r‡   Ú
call_countÚ
mock_callsr  Ú
disconnect)r]   Úmock_handlerrK  r{   r¢   Ú	mock_callr^   r^   r_   Ú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
 |¡ zT| 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 t
 |¡ d S t
 |¡ w )NFr~   Úadd_draftstatemodelrn   Úchange_draftstatemodelrl   rm   rg  rn  ro  rÀ  rÑ   r  rù   r‰   r   )r[   rs   r   rv   rf   rt   ru   rw   r   rq  r*   rr  r¡  rG   rÏ  r   rº   rx   r‰   rÍ   rE  rj  rh  rà   rl  rß   rk  r‡   rs  ru  )r]   Úadd_permissionÚedit_permissionr=  rv  r{   r¢   r^   r^   r_   Ú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 d   ƒ n1 sOw   Y  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 t
 !|¡ d S t
 !|¡ w )NFr~   ry  rn   Úpublish_draftstatemodelrl   rm   r	  rn  ro  rÀ  rÑ   r  r‰   r¡   r   ré   rp  r
  )"r[   rs   r   rv   rf   rt   ru   rw   r   rq  r*   rr  r   r   r¡  rG   rÏ  r   rx   r‰   rj  rE  rÍ   rh  ri  rj  rà   rk  rl  r‡   rs  rt  r  ru  )	r]   r{  Úpublish_permissionr=  rv  rK  r{   r¢   rw  r^   r^   r_   Ú$test_publish_with_publish_permissionž  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_atrÀ  rÑ   r  rù   FrO  T©Úapproved_go_live_at__isnull)r   ÚdatetimeÚ	timedeltar¡  rR   rG   rv   rf   rÏ  r   rº   rx   r…  Údater†  ÚassertIsÚexpiredÚstatus_stringrÍ   r)   rð  Úexcluder  ©r]   r…  r†  r{   r¢   r^   r^   r_   Útest_create_scheduledä  s.   ýÿþ
ÿýz1TestCreateDraftStateSnippet.test_create_scheduledc                 C   ó¢   | 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„  rÀ  r€   Ú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©r¡  rR   r   r‰  rŠ  rx   ry   ÚassertFormErrorr°   r˜   ÚassertRegexr‡   rb  ÚSTATUS_TOGGLE_BADGE_REGEX©r]   r{   r–  r^   r^   r_   Ú+test_create_scheduled_go_live_before_expiry  ó6   ýÿýýýþzGTestCreateDraftStateSnippet.test_create_scheduled_go_live_before_expiryc                 C   óz   | 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ƒ  rb  r  )r‰   r†  rÀ  r€   r”  r†  z&Expiry date/time must be in the futurer•  Tr³   r¡   r–  r—  r›  r^   r^   r_   Ú(test_create_scheduled_expire_in_the_past)  ó*   þÿýýþ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ƒ  rX  ©r‰   rn  r…  r†  rÀ  r  rÑ   FTr‡  Ú	scheduled)r   r‰  rŠ  r¡  rR   rÏ  r   rG   rv   rf   rx   r…  r‹  r†  rŒ  r  rj  r)   rð  r  r  rÍ   rE  ri  rŽ  r  r^   r^   r_   Ú"test_create_post_publish_scheduledH  s2   üÿ
ÿ
ÿýz>TestCreateDraftStateSnippet.test_create_post_publish_scheduledN)r©   rª   r«   rš  r`   rf   r¡  rf  rm  rx  r}  r€  r‘  rœ  r   r¤  r^   r^   r^   r_   rQ  ½  s    ÿC1BF %rQ  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   rœ  r  )r]   r¢   rú   r^   r^   r_   Úget_edit_urll  s   z$BaseTestSnippetEditView.get_edit_urlc                 C   ó   | j  |  ¡ |¡S rX   )re   rf   r©  rg   r^   r^   r_   rf   q  ri   zBaseTestSnippetEditView.getc                 C   rª  rX   )re   r¡  r©  rV  r^   r^   r_   r¡  t  ri   zBaseTestSnippetEditView.postc                 C   rW   rX   rY   r\   r^   r^   r_   r`   w  ra   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‡   rb  rc  r†   rˆ   rà   r©  )r]   r{   r’   r´   r‹   rd  r^   r^   r_   ÚassertSchedulingDialogRenderedz  s0   

ü
ÿ
ü
üz6BaseTestSnippetEditView.assertSchedulingDialogRenderedN)r«  )r©   rª   r«   r©  rf   r¡  r`   r¬  r^   r^   r^   r_   r¥  k  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dd„ Zd d!„ Zd"d#„ Z‡  ZS )$ÚTestSnippetEditViewrC  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º   rF  rG  rý   )ÚweeksrÂ   )rI  r’   rJ  rK  r[   rL  )Úsuperr`   rA   rv   rf   r¨  r(   r½   r	   rM  r   r‰  rŠ  r[   r\   ©Ú	__class__r^   r_   r`   ž  s   


úzTestSnippetEditView.setUpc                 C   rj   rk   rr   rz   r^   r^   r_   r|   ª  r}   z5TestSnippetEditView.test_get_with_limited_permissionsc           	      C   sv  |   ¡ }|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 |  |j¡}| d¡}|  |¡ |  d|j  d¡ ¡ ¡ |  h d£ |j  d¡ ¡ ¡¡ |  |j  d¡d¡ |  |j  d¡d¡ |  d|j  d¡ ¡ ¡ t| jƒ}d| j	j
 }|  | | j	¡|¡ d S )Nr€   ú"wagtailsnippets/snippets/edit.htmlr¤  rZ  z$wagtailsnippets_tests_advert:historyrù   ré   rÆ  ú"wagtailsnippets_tests_advert:usageu   3Â weeks agorH  z9" aria-describedby="status-sidebar-live">View history</a>T©r\  r¥  r¦  r§  r¨  r­  r®  r¯  r°  r±  r²  r³  z%/admin/snippets/tests/advert/edit/%d/)rf   r‡   rb  rx   ry   r…   r”   r   r   r¨  rº   r˜   rc  r†   rˆ   rà   r|  rí   r´  rj  rµ  r   r[   r©  )	r]   r{   r´   Úhistory_urlÚ	usage_urlr‹   r·  Ú
url_finderÚexpected_urlr^   r^   r_   r•   ¶  sV   
ÿÿ
ý

ú
þ
þþ
zTestSnippetEditView.test_simplec                 C   s.   | j  dt| jjƒ› d¡}|  |jd¡ d S )Nz/admin/snippets/tests/foo/edit/ú/é”  )re   rf   r   r¨  rº   rx   ry   rz   r^   r^   r_   Ú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»  )re   rf   r   rx   ry   rz   r^   r^   r_   Ú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 r¼  )r[   rs   rt   ru   r   rv   rf   rw   r¡  rx   ry   r   rß   r©  r¨  )r]   r{   r¸  r^   r^   r_   Ú"test_edit_with_limited_permissionsÿ  s   ÿÿ
ÿ
z6TestSnippetEditView.test_edit_with_limited_permissionsc                 C   rÂ  )NrÃ  rÄ  rÀ  z,The advert could not be saved due to errors.rÅ  r¡   rÆ  rÈ  r¥  r¦  r§  r¨  r­  r®  r¯  r°  r²  r³  rÉ  r¶  r^   r^   r_   Útest_edit_invalid  rË  z%TestSnippetEditView.test_edit_invalidc                 C   rÌ  )NÚedited_test_advertúhttp://www.example.com/editedr¿  rÀ  rƒ   rÑ   r¡   rÎ  rÒ  r^   r^   r_   Ú	test_edit2  s   þÿzTestSnippetEditView.test_editc                 C   rÔ  )NrÕ  rÖ  rÂ  rÃ  r×  rØ  rÀ  rƒ   rÑ   rœ   rÚ  ré   rÜ  rß  r^   r^   r_   Útest_edit_with_tags?  râ  z'TestSnippetEditView.test_edit_with_tagsc                    rô  )Nc                    r  ©NrÍ  úhttp://www.example.comr÷  r  r	  r\   r^   r_   rú  R  r  zHTestSnippetEditView.test_before_edit_snippet_hook_get.<locals>.hook_funcÚbefore_edit_snippetr€   rý  rþ  r   r^   r\   r_   Ú!test_before_edit_snippet_hook_getQ  s   
ÿz5TestSnippetEditView.test_before_edit_snippet_hook_getc                    s~   ‡ fdd„}ˆ   d|¡ ˆ jdddœd}W d   ƒ n1 s w   Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd
¡ d S )Nc                    r  rÆ  r  r	  r\   r^   r_   rú  _  r  zITestSnippetEditView.test_before_edit_snippet_hook_post.<locals>.hook_funcrÈ  úEdited and runs hookú*http://www.example.com/hook-enabled-editedr¿  rÀ  r€   rý  rÍ  ©	rÿ  r¡  rx   ry   r‡   rA   rv   rf   r‰   r   r^   r\   r_   Ú"test_before_edit_snippet_hook_post^  ó   þÿÿz6TestSnippetEditView.test_before_edit_snippet_hook_postc                    s~   ‡ fdd„}ˆ   d|¡ ˆ jdddœd}W d   ƒ n1 s w   Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd¡ d S )
Nc                    r  )NrÊ  rË  r÷  r  r	  r\   r^   r_   rú  t  r  zCTestSnippetEditView.test_after_edit_snippet_hook.<locals>.hook_funcÚafter_edit_snippetrÊ  rË  r¿  rÀ  r€   rý  rÌ  r   r^   r\   r_   Útest_after_edit_snippet_hooks  rÎ  z0TestSnippetEditView.test_after_edit_snippet_hookc                    r  )	Nc                   @   r  )z]TestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItemr  r  r  r  c                 S   r  r  r^   r  r^   r^   r_   r    r  zfTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownNr  r^   r^   r^   r_   r  ‰  r  r  c                    r  r  r^   rã  r!  r^   r_   rú  ’  r"  zMTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.hook_funcr#  r$  Tr³   r%  r   r^   r!  r_   r'  ˆ  r(  z:TestSnippetEditView.test_register_snippet_action_menu_itemc                    sP   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W d   ƒ n1 sw   Y  ˆ  |d¡ d S )Nc                    sT   ˆ   | t¡ ˆ   |t¡ ˆ  |d d¡ ˆ  |d ˆ j¡ ˆ  |d t¡ | d= d S )Nr.  r§  r
  rž  r   )r  rz  r   rx   r¨  rA   r/  r\   r^   r_   rú  £  s   
zITestSnippetEditView.test_construct_snippet_action_menu.<locals>.hook_funcr1  z<em>Save</em>)rÿ  rf   r”   r   r^   r\   r_   r8  ¢  s
   

ÿz6TestSnippetEditView.test_construct_snippet_action_menuc              	   C   s´   dd„ }t  ¡  |  d|¡" |  td¡ |  ¡ }W d   ƒ n1 s$w   Y  W d   ƒ n1 s3w   Y  t  ¡  t| jj 	d¡t
| jjƒfd}| j|d|› dd	d
 d S )Nc                 S   s
   t ddS )Ni„  r  )r-   rã  r^   r^   r_   rú  ³  r"  zPTestSnippetEditView.test_register_deprecated_delete_menu_item.<locals>.hook_funcr#  zgDeleteMenuItem is deprecated. The delete option is now provided via EditView.get_header_more_buttons().r/  rù   ú<a class="button" href="za"><svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>Delete</a>Tr³   )r.   r&  rÿ  r  rS   rf   r   r¨  rœ  r  r   rº   r˜   )r]   rú  r{   rü   r^   r^   r_   Ú)test_register_deprecated_delete_menu_item²  s0   ÿþþ
ù€ 	þ

ýz=TestSnippetEditView.test_register_deprecated_delete_menu_itemc                 C   s’   t jjdd| _|  ¡ }|  |jd¡ |  |j¡}| 	d¡}|  t
|ƒd¡ |  g d¢dd„ |D ƒ¡ |  d	|d
 d ¡ |  |d
  d¡¡ d S )NzPreview-enabled snippetrÑ   r€   ú(input[type="radio"][name="preview-size"]rý   )zPreview in mobile sizezPreview in tablet sizezPreview in desktop sizec                 S   s   g | ]}|d  ‘qS )ú
aria-labelr^   )r   Úradior^   r^   r_   rŸ   Ý  s    z@TestSnippetEditView.test_previewable_snippet.<locals>.<listcomp>Ú375r   údata-device-widthÚchecked)rJ   rv   r½   r¨  rf   rx   ry   r†   r‡   rî   r¤   rj  Úhas_attr©r]   r{   r‹   Úradiosr^   r^   r_   Útest_previewable_snippetÌ  s   ÿ
ú	z,TestSnippetEditView.test_previewable_snippetc                 C   sÈ   t jjdd| _|  ¡ }|  |jd¡ |  |j¡}| 	d¡}|  t
|ƒd¡ |  d|d d ¡ |  d	|d d
 ¡ |  |d  d¡¡ |  d|d d ¡ |  d|d d
 ¡ |  |d  d¡¡ d S )Nz!Preview-enabled with custom sizesrÑ   r€   rÓ  ré   Ú412r   r×  zCustom mobile previewrÔ  rØ  Ú1280r¡   zOriginal desktop)rE   rv   r½   r¨  rf   rx   ry   r†   r‡   rî   r¤   rÍ   rÙ  rj  rÚ  r^   r^   r_   Útest_custom_preview_sizesã  s   ÿ
z-TestSnippetEditView.test_custom_preview_sizes)r©   rª   r«   rP  r`   r|   r•   r¼  r¿  rÀ  rÁ  rÄ  rÅ  rÉ  rÍ  rÐ  r'  r8  rÒ  rÜ  rß  Ú__classcell__r^   r^   r±  r_   r­  ›  s&    ="r­  c                       ó$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditTabbedSnippetc                    ó"   t ƒ  ¡  tjjdddd| _d S )NrÍ  rÇ  zModel with tabbed interface)r‰   r‘   Úsomething_else)r°  r`   rD   rv   r½   r¨  r\   r±  r^   r_   r`   ù  s   
ýzTestEditTabbedSnippet.setUpc                 C   sJ   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nr€   r³  r¤  r¸  r¹  )rf   rx   ry   r…   r˜   rz   r^   r^   r_   r»    s   þþz8TestEditTabbedSnippet.test_snippet_with_tabbed_interface)r©   rª   r«   r`   r»  rà  r^   r^   r±  r_   râ  ø  s    râ  c                       rá  )ÚTestEditFileUploadSnippetc                    s$   t ƒ  ¡  tjjtddƒd| _d S )Ns   Simple text documentræ  )rå  )r°  r`   r8   rv   r½   r   r¨  r\   r±  r^   r_   r`     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 documentrÀ  rè  )rf   r˜   r¡  r   rÏ  r   r8   rv   rx   rå  ré  rê  r^   r^   r_   Útest_edit_file_upload_multipart  s   
ÿÿþ
z9TestEditFileUploadSnippet.test_edit_file_upload_multipart)r©   rª   r«   r`   ræ  rà  r^   r^   r±  r_   rå    s    rå  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 )ÚTestLocaleSelectorOnEditrC  rF  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°  r`   r?   rv   r½   r¨  r'   r  Úcopy_for_translationÚtest_snippet_frrw   r\   r±  r^   r_   r`   0  s
   
zTestLocaleSelectorOnEdit.setUpc                 C   ó(   |   ¡ }|  || j¡ |  || j¡ d S rX   )rf   r˜   ÚLOCALE_SELECTOR_LABELÚLOCALE_INDICATOR_HTMLrz   r^   r^   r_   r-  7  s   z-TestLocaleSelectorOnEdit.test_locale_selectorc                 C   s>   | j  ¡  |  ¡ }|  || j¡ |  || j¡ |  |d¡ d S )NzNo other translations)ré  r/  rf   r”   rë  r˜   rì  rz   r^   r^   r_   Ú(test_locale_selector_without_translation<  s
   
zATestLocaleSelectorOnEdit.test_locale_selector_without_translationFr  c                 C   rê  rX   )rf   r”   rë  rì  rz   r^   r^   r_   r7  E  s   zLTestLocaleSelectorOnEdit.test_locale_selector_not_present_when_i18n_disabledc                 C   s8   t jjdd| _|  ¡ }|  || j¡ |  || j¡ d S ©Nr¡   r®  )rA   rv   rf   r¨  r”   rë  rì  rz   r^   r^   r_   r8  K  s   zUTestLocaleSelectorOnEdit.test_locale_selector_not_present_on_non_translatable_snippet)r©   rª   r«   rP  rë  rì  r`   r-  rí  r   r7  r8  rà  r^   r^   r±  r_   rç  )  s    	
rç  c                       rá  )ÚTestEditRevisionSnippetc                    s   t ƒ  ¡  tjjdd| _d S )NrÃ  rÑ   )r°  r`   rL   rv   r½   r¨  r\   r±  r^   r_   r`   S  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‰   rÄ  rÀ  rí  rÑ   r¡   úwagtail.editrî  )r¡  rÏ  r   rL   rv   rÐ  rx   rÇ  r¨  rï  rÑ  r‡   r(   rð  rñ  )r]   r{   r›   rï  rñ  rò  r^   r^   r_   Útest_edit_snippet_with_revisionW  s   ÿÿz7TestEditRevisionSnippet.test_edit_snippet_with_revision)r©   rª   r«   r`   rñ  rà  r^   r^   r±  r_   rï  R  s    rï  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ÚTestEditDraftStateSnippetrR  c                    rã  )Núcustom/1rg  F©Ú	custom_idr‰   rE  )r°  r`   rF   rv   r½   r¨  r\   r±  r^   r_   r`   u  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 )Nr€   r³  rW  rX  rY  rZ  zSet schedule)r’   zRChoose when this draft state custom primary key model should go live and/or expireú?wagtailsnippets_tests_draftstatecustomprimarykeymodel:unpublishrù   rÑ  ú">ra  )rf   rx   ry   r…   r˜   r¬  r   r   r¨  rº   r”   ©r]   r{   re  r^   r^   r_   rf  {  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 BarrÀ  r¡   )r¡  r¨  Úrefresh_from_dbr)   rv   rð  rl  rÏ  r©  rx   r‰   rÍ   rE  rj  rh  rß   ri  rj  rk  rÇ  rÑ  r‡   )r]   r{   rï  rl  r^   r^   r_   rm  ¢  s   
z)TestEditDraftStateSnippet.test_save_draftc           	   	   C   sÀ  t  ¡ }t |¡ zÐtƒ }t|ƒ | jdddœd}W d   ƒ n1 s%w   Y  | 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 t %|¡ d S t %|¡ w )NúDraft-enabled Bar, Publishedrn  ro  rÀ  úwagtail.publish©rI  rJ  rL  ú:wagtailsnippets_tests_draftstatecustomprimarykeymodel:listr¡   r‰   r   ré   rp  r
  )&r   rq  r*   rr  r   r   r¡  r¨  rú  r)   rv   rð  rl  r(   rÐ  r	   rM  rF   rº   rÑ  rÏ  r   rx   r‰   rj  rE  rÍ   rh  ri  rj  rk  rÇ  r‡   rK  rs  rt  r  ru  )	r]   rv  rK  r{   rï  rl  rò  Ú	log_entryrw  r^   r^   r_   rx  »  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
 |¡ zT| 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 t
 |¡ d S t
 |¡ w )NFr~   Ú&change_draftstatecustomprimarykeymodelrn   rl   rm   zEdited draft Foorn  ro  rÀ  r‰   r   )r[   rs   r   rv   rf   rt   ru   rw   r   rq  r*   rr  r¡  r¨  rú  rÏ  r©  rx   r‰   rÍ   rE  rj  rh  rà   rl  rß   rk  r‡   rs  ru  )r]   r|  r=  rv  r{   r^   r^   r_   r}   	  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 d   ƒ n1 sOw   Y  | 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 t
 ,|¡ d S t
 ,|¡ w )NFr~   r   rn   Ú'publish_draftstatecustomprimarykeymodelrl   rm   rû  rn  ro  rÀ  rü  rý  rþ  r¡   r‰   r   ré   rp  r
  )-r[   rs   r   rv   rf   rt   ru   rw   r   rq  r*   rr  r   r   r¡  r¨  rú  r)   rð  rl  r(   rÐ  r	   rM  rF   rº   rÑ  rÏ  r   rx   r‰   rj  rE  rÍ   rh  ri  rj  rk  rÇ  r‡   rK  rs  rt  r  ru  )r]   r|  r  r=  rv  rK  r{   rï  rl  rò  rÿ  rw  r^   r^   r_   r€  4	  s„   þþÿý


þÿÿ
ÿûþþÿz>TestEditDraftStateSnippet.test_publish_with_publish_permissionc                 C   sH  t ƒ }t|ƒ d| j_| j ¡  W d   ƒ n1 sw   Y  t ƒ }t|ƒ | jdddœd}W d   ƒ n1 s;w   Y  | 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 Publishedrn  ro  rÀ  rº   rþ  ré   r‰   )r   r   r¨  r‰   r  r¡  rú  r)   rv   rð  rÞ  rl  rÏ  r   rx   rj  rE  rÍ   rh  ri  rj  rk  rÇ  Úlastr‡   )r]   Úsave_timestampÚpublish_timestampr{   rï  rl  r^   r^   r_   Útest_save_draft_then_publish	  s@   
þ
þÿÿ
þþz6TestEditDraftStateSnippet.test_save_draft_then_publishc                 C   sN  t ƒ }t|ƒ d| j_| j ¡  ¡  W d   ƒ n1 sw   Y  t ƒ }t|ƒ | jddid}W d   ƒ n1 s<w   Y  | 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 DraftrÀ  rº   ré   )r   r   r¨  r‰   r  r  r¡  rú  r)   rv   rð  rÞ  rl  rÏ  r©  rx   rj  rE  rh  ri  rj  rk  rÑ  rÇ  r  r‡   )r]   r  r  r{   rï  rl  r^   r^   r_   Útest_publish_then_save_draft¹	  s6   
þ
ÿÿ
þz6TestEditDraftStateSnippet.test_publish_then_save_draftc                 C   s\  t ƒ }t|ƒ d| j_| j ¡  ¡  W d   ƒ n1 sw   Y  t ƒ tjdd }t|ƒ | jdddœd}W d   ƒ n1 sCw   Y  | 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 Twicern  ro  rÀ  rº   rþ  ré   r‰   )r   r   r¨  r‰   r  r  r‰  rŠ  r¡  rú  r)   rv   rð  rÞ  rl  rÏ  r   rx   rj  rE  rÍ   rh  ri  rj  rk  r  rÇ  r‡   )r]   Úfirst_timestampÚsecond_timestampr{   rï  rl  r^   r^   r_   Ú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‰   rù  rÀ  r€   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>rö  rù   rÑ  r÷  ra  )r¡  rf   rx   ry   r…   r”   r˜   r   r   r¨  rº   rø  r^   r^   r_   Útest_get_after_save_draft
  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û  rn  ro  rÀ  r€   r³  r
  Tr³   r  rö  rù   rÑ  r÷  ra  )r¡  rf   rx   ry   r…   r˜   r”   r   r   r¨  rº   rø  r^   r^   r_   Útest_get_after_publish3
  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û  rn  ro  rÀ  r‰   r
  r€   r³  r
  Tr³   r  rö  rù   rÑ  r÷  ra  z#header-titlezsvg user‚   z#icon-snippetz<<textarea name="text">Draft-enabled Bar, In Draft</textarea>rµ  )r¡  rf   r‡   rb  rx   ry   r…   r˜   r   r   r¨  rº   r†   rˆ   rà   r‰   rŠ   rc  )r]   r{   r´   re  r‹   Úh2r6  r^   r^   r_   Ú%test_get_after_publish_and_save_draftW
  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„  rÀ  ú:wagtailsnippets_tests_draftstatecustomprimarykeymodel:editrù   Tr‡  ©Úcontent__go_live_at__startswith©Úcontent__expire_at__startswithú;<div class="w-label-3 w-text-primary">Once published:</div>r¡   ©r´   rÇ  ú.<span class="w-text-grey-600">Go-live:</span> ú-<span class="w-text-grey-600">Expiry:</span> )r¨  r  r  r   r‰  rŠ  r¡  rR   rÏ  r   r   rº   rú  rj  rE  rÍ   r)   rv   rð  r  r  rÐ  Ústrr‹  rf   r˜   rT   r¬  ©r]   r…  r†  r{   r^   r^   r_   Útest_edit_post_scheduledŒ
  st   ýÿ	þþ
ÿý
þû
þû	üüüz2TestEditDraftStateSnippet.test_edit_post_scheduledc                 C   r’  r“  r—  r›  r^   r^   r_   Ú)test_edit_scheduled_go_live_before_expiryØ
  r  zCTestEditDraftStateSnippet.test_edit_scheduled_go_live_before_expiryc                 C   rž  rŸ  r—  r›  r^   r^   r_   Ú&test_edit_scheduled_expire_in_the_pastý
  r¡  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„  rÀ  r€   r  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  r¡  rR   rx   ry   rú  rÍ   rE  Úlatest_revision_idrº   r”   r‡   rb  rc  r˜   r™  rš  )r]   rl  r…  r†  r{   r´   r–  r^   r^   r_   Ú<test_edit_post_invalid_schedule_with_existing_draft_schedule  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!rn  )r‰   rn  ri  rÀ  éýÿÿÿN)r¨  r  r  rú  ri  r   r‰  rŠ  r¡  rR   ÚassertNotEqualr‚  rx   )r]   Úinitial_deltari  Ú	new_deltar^   r^   r_   Ú 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ƒ  rX  r¢  rÀ  rþ  Tr‡  úRAn object scheduled for future publishing should have has_unpublished_changes=True©Úmsgr£  r  r³   r  r  r  )r   r‰  rŠ  r¡  rR   rÏ  r   r¨  rú  rÍ   rE  rj  r)   rv   rð  r  r  rh  rx   rŽ  rf   r”   r˜   rT   r¬  r  r^   r^   r_   Ú,test_edit_post_publish_scheduled_unpublishedy  sZ   üÿ
þ
ÿýþýüü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ƒ  rX  r¢  rÀ  rþ  r£  Tr‡  rŽ   ©r‰   rn  r…  )r   r‰  rŠ  r¡  rR   rÏ  r   r¨  rú  rÍ   rE  rx   rŽ  rj  r)   rv   rð  r  r  rf   r¬  r  r^   r^   r_   Ú;test_edit_post_publish_now_an_already_scheduled_unpublished¶  sT   üÿ
þ
ÿýýÿ	þ
ÿý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"  rX  r¢  rÀ  rþ  r®  úlive + scheduledTr‡  r(  r)  zcAn object scheduled for future publishing should have a new revision, that is not the live revisionrg  zNA live object with a scheduled revision should still have the original contentr  r³   r  r  r  ) r¨  r  r  rú  rk  r   r‰  rŠ  r¡  rR   rÏ  r   rF   rv   rf   rº   rj  rE  rx   rŽ  r)   rð  r  r  rh  r$  Úget_latest_revisionr‰   r”   r˜   rT   r¬  )r]   rk  r…  r†  r{   r^   r^   r_   Ú*test_edit_post_publish_scheduled_publishedõ  sx   
üÿ
þÿÿýþýýýüü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ƒ  rX  r¢  rÀ  rþ  Tr‡  rg  zIA live object with scheduled revisions should still have original contentzI've been updated!rŽ   r,  )r¨  r  r  r   r‰  rŠ  r¡  rR   rÏ  r   rú  rj  rE  r)   rv   rð  r  r  rx   r‰   rÍ   r  r^   r^   r_   Ú9test_edit_post_publish_now_an_already_scheduled_publishedE  s\   üÿ
þ
ÿýýýÿ	þ
ÿý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 )Nr  r  rƒ  rX  ©r‰   rn  r†  rÀ  rþ  rE  r   ©ÚsecondÚmicrosecondrÓ   é   r„  r  rù   Tr‡  r  r  r  r¡   r  r  r  )r   r‰  rŠ  r¡  rR   rÏ  r   r¨  rú  rj  rE  rx   rŽ  r†  Úreplacer   rº   rÍ   r)   rv   rð  r  r  rÐ  r  r‹  rf   r˜   rT   r¬  ©r]   r†  r{   r…  Únew_expire_atr^   r^   r_   Ú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 )Nr  r  rƒ  rX  r2  rÀ  rþ  rE  r   r3  rÓ   r6  r¢  r®  r.  Tr‡  r  r³   r  r  r¡   r  )r   r‰  rŠ  r¡  rR   rÏ  r   r¨  rú  rj  rE  rx   rŽ  r†  r7  rF   rv   rf   rº   r)   rð  r  r  r”   rT   r˜   r¬  r8  r^   r^   r_   Ú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 )Nr  r  rƒ  rX  r2  rÀ  rþ  rE  r   r3  é   é   r¢  r®  r.  Tr‡  r  r¡   r  r  r³   r  )r   r‰  rŠ  r¡  rR   rÏ  r   r¨  rú  rj  rE  rx   rŽ  r†  r7  rF   rv   rf   rº   r)   rð  r  r  r˜   rT   r”   r¬  r8  r^   r^   r_   Ú8test_edit_post_publish_schedule_after_a_scheduled_expireT  s†   ýÿ	þ
þüÿ
þÿÿýüýüüzRTestEditDraftStateSnippet.test_edit_post_publish_schedule_after_a_scheduled_expire)r©   rª   r«   rš  r`   rf  rm  rx  r}  r€  r  r  r	  r  r  r  r  r  r  r!  r'  r+  r-  r0  r1  r:  r;  r>  rà  r^   r^   r±  r_   rò  o  s6    ÿ'E4Y,*1$5L%B=?PEj`rò  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 )Nrg  FrD  r¡   r  r"  )r°  r`   rG   rv   r½   r¨  r   r‰  rŠ  r…  r‰   r  rl  r  rú  r\   r±  r^   r_   r`   ¹  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 )NFr~   rz  rn   r~  rl   rm   r  Tr³   r  r¡   r  úYDraft state model 'I&#x27;ve been edited!' is locked and has been scheduled to go live atrÆ  ú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>©r[   rs   r   rv   rf   rt   ru   rw   r”   r˜   rT   r…  r‡   rb  rc  r   r¨  rº   rl  )r]   r|  r  r=  r{   r´   Úunschedule_urlr^   r^   r_   Ú>test_edit_get_scheduled_for_publishing_with_publish_permissionÅ  sr   ÿÿÿý
ýüýü
üþ

ü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 )NFr~   rz  rn   rl   rm   r  Tr³   r  r¡   r  r@  rÆ  rA  rB  r  r   r[  rC  rù   rD  rE  rF  )r]   r|  r=  r{   r´   rG  r^   r^   r_   ÚAtest_edit_get_scheduled_for_publishing_without_publish_permission  sd   ÿÿ
ýüýü
üþ

ü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…  rÀ  r‰   r"  z8The draft state model could not be saved as it is lockedr¡   rÆ  r@  rA  rB  Tr  r  r   r[  rC  rù   rD  rE  )r¡  rR   r…  r¨  rú  rx   rl  r‡   r˜   r”   rb  rc  r   rº   )r]   r{   r´   rG  r^   r^   r_   Ú'test_edit_post_scheduled_for_publishingR  sX   þÿ
þýþü
üþ

üzCTestScheduledForPublishLock.test_edit_post_scheduled_for_publishing)r©   rª   r«   r`   rH  rI  rJ  rà  r^   r^   r±  r_   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 )
Nró  rg  Frô  r¡   r  r"  zJwagtailsnippets_tests_draftstatecustomprimarykeymodel:revisions_unschedulerù   )rZ   r[   rF   rv   r½   r¨  r   r‰  rŠ  r…  r‰   r  rl  r  rú  r   r   rº   rG  r\   r^   r^   r_   r`   ’  s   
ÿ


þzTestSnippetUnschedule.setUpc                 C   s^   d| j _tjjdddtjjdddg}|r!| tjjddd¡ | j jj|Ž  | j  ¡  d S )NFr~   r   rn   rl   rm   r  )	r[   rs   r   rv   rf   Úappendrt   ru   rw   )r]   Úset_publish_permissionÚpermissionsr^   r^   r_   Úset_permissions¢  s$   þÿû
þÿz%TestSnippetUnschedule.set_permissionsc                 C   s6   |   d¡ | j | j¡}|  |jd¡ |  |d¡ d S )NTr€   z5wagtailadmin/shared/revisions/confirm_unschedule.html)rO  re   rf   rG  rx   ry   r…   rz   r^   r^   r_   Ú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<  )rO  re   rf   rG  rÏ  r   rz   r^   r^   r_   Ú(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‡  )rO  re   r¡  rG  rÏ  r   r   r¨  rº   rú  rl  rß   Úapproved_go_live_atrÍ   r)   rv   rð  r  r  rz   r^   r^   r_   Ú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‡  )rO  re   r¡  rG  rÏ  r   r¨  rú  rl  rà   rR  rj  r)   rv   rð  r  r  rz   r^   r^   r_   Ú)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 )NTr  rù   z?next=r‡  )rO  r   r   r¨  rº   re   r¡  rG  rÏ  rú  rl  rß   rR  rÍ   r)   rv   rð  r  r  )r]   r  r{   r^   r^   r_   Ú'test_post_unschedule_view_with_next_url  s    
þ

ÿýz=TestSnippetUnschedule.test_post_unschedule_view_with_next_urlN)
r©   rª   r«   r`   rO  rP  rQ  rS  rT  rU  r^   r^   r^   r_   rK  ‘  s    	rK  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 )Nró  zto be unpublished)rõ  r‰   rö  rù   )
rZ   r[   rF   rv   r½   r¢   r   r   rº   re  r\   r^   r^   r_   r`     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
        r€   z+wagtailadmin/generic/confirm_unpublish.htmlN)re   rf   re  rx   ry   r…   rz   r^   r^   r_   Ú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
        rö  i90  rù   r»  N)re   rf   r   r   rx   ry   rz   r^   r^   r_   Útest_unpublish_view_invalid_pk3  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
        Frl   rm   rn   rq   N)r[   rs   rt   ru   r   rv   rf   rw   re   re  rx   ry   rz   r^   r^   r_   Ú'test_unpublish_view_get_bad_permissionsB  s   ÿÿ
z<TestSnippetUnpublish.test_unpublish_view_get_bad_permissionsc              	   C   s¢   t  ¡ }t |¡ zAd| j_| jj tj	j
ddd¡ | j ¡  | j | j¡}|  |tdƒ¡ |  tj	j
| jjdj¡ |  |jd¡ W t |¡ dS t |¡ w )	rY  Frl   rm   rn   r<  r®  r   N)r   rq  r+   rr  r[   rs   rt   ru   r   rv   rf   rw   re   r¡  re  rÏ  r   rj  rF   r¢   rº   rE  rx   rs  ru  )r]   rv  r{   r^   r^   r_   Ú(test_unpublish_view_post_bad_permissionsU  s"   
ÿÿ
ÿz=TestSnippetUnpublish.test_unpublish_view_post_bad_permissionsc              	   C   s
  t  ¡ }t |¡ zud| 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 t |¡ dS t |¡ w )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
        Fr~   r   rn   r  rl   rm   rþ  r®  r¡   r   ré   rp  r
  N)r   rq  r+   rr  r[   rs   r   rv   rf   rt   ru   rw   re   r¡  re  rÏ  r   rÍ   rF   r¢   rº   rE  rx   rs  rt  r  ru  )r]   rv  r|  r  r=  r{   rw  r^   r^   r_   Ú0test_unpublish_view_post_with_publish_permissionw  sJ   
þþÿý
þÿÿzETestSnippetUnpublish.test_unpublish_view_post_with_publish_permissionc              	   C   s¶   t  ¡ }t |¡ zK| j | j¡}|  |tdƒ¡ |  	t
jj| jjdj¡ |  |jd¡ |jd d }|  |d t
¡ |  |d | j¡ |  |d t
¡ W t |¡ dS t |¡ w )	z]
        This posts to the unpublish view and checks that the object was unpublished
        rþ  r®  r¡   r   ré   rp  r
  N)r   rq  r+   rr  re   r¡  re  rÏ  r   rÍ   rF   rv   rf   r¢   rº   rE  rx   rs  rt  r  ru  )r]   rv  r{   rw  r^   r^   r_   Útest_unpublish_view_post¯  s&   
þÿÿz-TestSnippetUnpublish.test_unpublish_view_postc                    ó†   ‡ fdd„}ˆ   d|¡ i }ˆ j ˆ j|¡}W d   ƒ n1 s!w   Y  ˆ  |jd¡ ˆ  |jd¡ ˆ j ¡  ˆ  ˆ jj	d¡ d S )Nc                    ó&   ˆ   | t¡ ˆ  |jˆ jj¡ tdƒS rö  ©r  r   rx   rº   r¢   r   ©r¦   r¢   r\   r^   r_   rú  Ó  ó   zATestSnippetUnpublish.test_after_unpublish_hook.<locals>.hook_funcÚafter_unpublishr€   rý  rO  ©
rÿ  re   r¡  re  rx   ry   r‡   r¢   rú  rŽ  r  r^   r\   r_   Útest_after_unpublish_hookÒ  s   þ
z.TestSnippetUnpublish.test_after_unpublish_hookc                    r^  )Nc                    r_  rö  r`  ra  r\   r^   r_   rú  ä  rb  z=TestSnippetUnpublish.test_before_unpublish.<locals>.hook_funcÚbefore_unpublishr€   rý  rE  rd  r  r^   r\   r_   Útest_before_unpublishã  s   þ
z*TestSnippetUnpublish.test_before_unpublishN)r©   rª   r«   r`   rW  rX  rZ  r[  r\  r]  re  rg  r^   r^   r^   r_   rV    s    
"8#rV  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 )ÚTestSnippetDeleterC  c                 C   r  rî  )rA   rv   rf   r¨  rZ   r[   r\   r^   r^   r_   r`   ù  r  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 ©NFrl   rm   rn   rø   rù   rq   )r[   rs   rt   ru   r   rv   rf   rw   re   r   r   r¨  rº   rx   ry   rz   r^   r^   r_   Ú(test_delete_get_with_limited_permissionsý  ó   ÿÿ
þÿz:TestSnippetDelete.test_delete_get_with_limited_permissionsc                 C   óL   t dt| jjƒgd}| j |¡}|  |jd¡ |  |d¡ |  ||¡ d S ©Nrø   rù   r€   úYes, delete©	r   r   r¨  rº   re   rf   rx   ry   r˜   ©r]   rü   r{   r^   r^   r_   Útest_delete_get  s   þz!TestSnippetDelete.test_delete_getTr  c                 C   rl  rm  ro  rp  r^   r^   r_   Ú!test_delete_get_with_i18n_enabled  s   þz3TestSnippetDelete.test_delete_get_with_i18n_enabledc                 C   sÄ   | j dd tjjd| jd W d   ƒ n1 sw   Y  tdt| jjƒgd}| j 	|¡}|  
|jd¡ |  |d¡ |  |d	¡ |  |td
t| jjƒgdd ¡ |  |d¡ |  ||¡ d S )NT©ÚexecuteÚUndeletable©r‰   Úon_delete_protectrø   rù   r€   z!This advert is referenced 1 time.zDOne or more references to this advert prevent it from being deleted.r´  ú?describe_on_delete=1rn  )ÚcaptureOnCommitCallbacksrO   rv   r½   r¨  r   r   rº   re   rf   rx   ry   r˜   r”   rp  r^   r^   r_   Ú(test_delete_get_with_protected_reference#  s6   ÿÿþþþüþ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 ri  )r[   rs   rt   ru   r   rv   rf   rw   re   r¡  r   r   r¨  rº   rx   ry   rz   r^   r^   r_   Ú)test_delete_post_with_limited_permissions>  rk  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ù   rƒ   rÍ  rÑ   r   )re   r¡  r   r   r¨  rº   rÏ  rx   rA   rv   rÐ  rÇ  rz   r^   r^   r_   Útest_delete_postO  s   þÿz"TestSnippetDelete.test_delete_postc                 C   sž   | j dd tjjd| jd W d   ƒ n1 sw   Y  tdt| jjƒgd}| j 	|¡}|  
|jd¡ |  |tdƒ¡ |  tjj| jjd	 ¡ ¡ d S )
NTrs  ru  rv  rø   rù   rq   r<  r®  )ry  rO   rv   r½   r¨  r   r   rº   re   r¡  rx   ry   rÏ  rj  rA   rÐ  r  rp  r^   r^   r_   Ú)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 )
NÚrebuild_references_index)Ústdoutrø   rù   r€   ú(wagtailadmin/generic/confirm_delete.htmlz!This advert is referenced 2 timesr´  rx  )r   r   Úcall_commandre   rf   r   r   r¨  rº   rx   ry   r…   r˜   )r]   Úoutputr{   r^   r^   r_   Útest_usage_linko  s(   þÿþüþz!TestSnippetDelete.test_usage_linkc                    s„   t jjddd}‡ fdd„}ˆ  d|¡ ˆ j tdt|jƒgd¡}W d   ƒ n1 s-w   Y  ˆ  	|j
d	¡ ˆ  	|jd
¡ d S )Nr¾  ú	Test hook©r‘   r‰   c                    ó&   ˆ   | t¡ ˆ j|dgtd tdƒS ©Nz<Advert: Test hook>)Ú	transformr÷  ©r  r   ÚassertQuerySetEqualÚreprr   ©r¦   Ú	instancesr\   r^   r_   rú  ‹  ó   zHTestSnippetDelete.test_before_delete_snippet_hook_get.<locals>.hook_funcÚbefore_delete_snippetrø   rù   r€   rý  )rA   rv   r½   rÿ  re   rf   r   r   rº   rx   ry   r‡   ©r]   rÙ   rú  r{   r^   r\   r_   Ú#test_before_delete_snippet_hook_get…  s   þÿÿz5TestSnippetDelete.test_before_delete_snippet_hook_getc                    óž   t jjddd}‡ fdd„}ˆ  d|¡ ˆ j tdt|jƒgd¡}W d   ƒ n1 s-w   Y  ˆ  	|j
d	¡ ˆ  	|jd
¡ ˆ  t jj|jd ¡ ¡ d S )Nr¾  r„  r…  c                    r†  r‡  r‰  rŒ  r\   r^   r_   rú  ž  rŽ  zITestSnippetDelete.test_before_delete_snippet_hook_post.<locals>.hook_funcr  rø   rù   r€   rý  r®  )rA   rv   r½   rÿ  re   r¡  r   r   rº   rx   ry   r‡   rj  rÐ  r  r  r^   r\   r_   Ú$test_before_delete_snippet_hook_post˜  ó    þ
þÿÿz6TestSnippetDelete.test_before_delete_snippet_hook_postc                    r’  )Nr¾  r„  r…  c                    r†  r‡  r‰  rŒ  r\   r^   r_   rú  ·  rŽ  zCTestSnippetDelete.test_after_delete_snippet_hook.<locals>.hook_funcÚafter_delete_snippetrø   rù   r€   rý  r®  )rA   rv   r½   rÿ  re   r¡  r   r   rº   rx   ry   r‡   rÍ   rÐ  r  r  r^   r\   r_   Útest_after_delete_snippet_hook±  r”  z0TestSnippetDelete.test_after_delete_snippet_hookN)r©   rª   r«   rP  r`   rj  rq  r   rr  rz  r{  r|  r}  rƒ  r‘  r“  r–  r^   r^   r^   r_   rh  ö  s    


rh  c                   @   ó:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestSnippetChooserPanelrC  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 )
Nrº  úTest advert textrÑ   )rÙ   ©r
  ©r
  r”  r¦   c                 S   ó    g | ]}t |d dƒdkr|‘qS ©Ú
field_nameNrÙ   ©Úgetattr©r   Úpanelr^   r^   r_   rŸ   à  ó
    þz1TestSnippetChooserPanel.setUp.<locals>.<listcomp>r   )r   rf   r¦   r   r[   rM   Úadvert_textrv   r½   rA   r#   Úedit_handlerÚget_form_classÚ
form_classÚget_bound_panelÚchildrenÚsnippet_chooser_panel©r]   r[   rž  r¨  r”  r¥  r^   r^   r_   r`   Î  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¤  ©r]   Ú
field_htmlr^   r^   r_   Útest_render_htmlæ  s
   
z(TestSnippetChooserPanel.test_render_htmlc                 C   ó^   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ d S )Nrš  r›  c                 S   rœ  r  rŸ  r¡  r^   r^   r_   rŸ   ô  r£  zFTestSnippetChooserPanel.test_render_as_empty_field.<locals>.<listcomp>r   r¬  r­  )rM   r§  r¥  r¨  r¦   r©  r¯  r|  ©r]   r¨  r”  r¥  rª  r±  r^   r^   r_   Útest_render_as_empty_fieldí  ó   ÿþüz2TestSnippetChooserPanel.test_render_as_empty_fieldc                 C   ó   |   d| j ¡ ¡ d S )NzVnew SnippetChooser("id_advert", {"modalUrl": "/admin/snippets/choose/tests/advert/"});©r|  rª  r¯  r\   r^   r^   r_   Útest_render_jsþ  ó   þz&TestSnippetChooserPanel.test_render_jsc                 C   óL   t tdƒgƒ t¡}| ¡ }|ƒ }|jd j}|  |t¡ |  	|j
t¡ d S )NrÙ   )r"   r!   Úbind_to_modelrM   r¦  ÚfieldsÚwidgetr  r2   rx   rž  rA   ©r]   r¥  r§  r”  r¾  r^   r^   r_   Útest_target_model_autodetected  s   ÿz6TestSnippetChooserPanel.test_target_model_autodetectedN©	r©   rª   r«   rP  r`   r²  rµ  r¹  rÀ  r^   r^   r^   r_   r˜  Ë  s    r˜  c                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetRegisteringc                 C   s   |   tt¡ d S rX   )r|  r;   r0   r\   r^   r^   r_   Útest_register_function  rU  z-TestSnippetRegistering.test_register_functionc                 C   s   |   t¡ |  tt¡ d S rX   )rà   r:   r|  r0   r\   r^   r^   r_   Útest_register_decorator  s   
z.TestSnippetRegistering.test_register_decoratorN)r©   rª   r«   rÄ  rÅ  r^   r^   r^   r_   rÃ    s    rÃ  c                   @   rÂ  )ÚTestSnippetOrderingc                 C   s   t tƒ t tƒ d S rX   )r1   r@   r6   r\   r^   r^   r_   r`     s   zTestSnippetOrdering.setUpc                 C   s   |   t t¡t t¡¡ d S rX   )Ú
assertLessr0   Úindexr6   r@   r\   r^   r^   r_   Útest_snippets_ordering  s   ÿz*TestSnippetOrdering.test_snippets_orderingN)r©   rª   r«   r`   rÉ  r^   r^   r^   r_   rÆ    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 )ÚTestSnippetHistoryrC  c                 C   s   | j  |  |d¡|¡S )NÚhistory)re   rf   Úget_url)r]   r¢   rh   r^   r^   r_   rf   *  s   zTestSnippetHistory.getNc                 C   s(   |d u r
t |jƒg}t|j |¡|dS ©Nrù   )r   rº   r   rœ  r  )r]   r¢   Úurl_namerú   r^   r^   r_   rÌ  -  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®  rF  rG  iå  é	   é   rÓ   r   rÂ   rH  zTest Advert Updatedrð  éæ  é   é   é"   ÚFoorÑ   ©r[   r  é   T©rI  r’   rJ  rK  rL  rñ  Úcontent_changedÚBar©r[   Ú
log_action)rZ   r[   rA   rv   rf   Únon_revisable_snippetr(   r½   r	   rM  r   r‰  rH   Úrevisable_snippetr  Úinitial_revisionrº   r‰   Úedit_revisionr\   r^   r^   r_   r`   2  s>   

û
û
ù	ÿzTestSnippetHistory.setUpc                 C   s:   |   | j¡}|  |jd¡ | j|ddd |  |d¡ d S )Nr€   z<td>Created</td>Tr³   z9data-w-tooltip-content-value="Sept. 30, 2021, 10:01 a.m.")rf   rÝ  rx   ry   r˜   rz   r^   r^   r_   r•   S  s   þzTestSnippetHistory.test_simplec           	   	   C   sö   | j | jg}|D ]p}| 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 d   ƒ n1 ssw   Y  qd S )N©r¢   rJ  rð  r€   ÚEditedr¡   rÆ  ÚCreatedz.w-active-filters .w-pillz.w-pill__removeú T)Ú	separatorrŠ   zAction: Editzdata-w-swap-src-valueú?Úhistory_resultszaction=wagtail.edit)rÝ  rÞ  ÚsubTestrf   rx   ry   r˜   r”   r†   r‡   rˆ   Úget_textrà   rí   r´  rÌ  r…  )	r]   r›   r¢   r{   r‹   rÐ  Úclear_buttonr‘   rh   r^   r^   r_   Útest_filters\  s*   

þ
ñ€ÿzTestSnippetHistory.test_filtersc                 C   s2   |   | j¡}|  | jd¡}|  |d|› d¡ d S )Nr§  rH  ú
">Edit</a>)rf   rÝ  rÌ  r”   )r]   r{   r  r^   r^   r_   Ú5test_should_not_show_actions_on_non_revisable_snippetq  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>rH  rì  r¡   rÆ  z">Review this version</a>)rf   rÞ  rÌ  rº   rß  r”   r˜   )r]   r{   r  Ú
revert_urlr^   r^   r_   Ú-test_should_show_actions_on_revisable_snippety  s.   ýÿÿ
ý

ý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¡   )rÇ  r´   rð  z.w-breadcrumbs__sublabel)rŠ   )rG   rv   r½   r  r  rú  r‰   rf   r˜   r†   r‡   rˆ   rx   ré  )r]   r¢   r{   r‹   Úsublabelr^   r^   r_   Ú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 )Nr€   )rf   rÝ  rx   ry   rÞ  rz   r^   r^   r_   Útest_get_with_i18n_enabled·  s   z-TestSnippetHistory.test_get_with_i18n_enabledc                 C   s¸   | j }|  |¡ |  d¡ |  |¡ W d   ƒ n1 sw   Y  tdƒD ]}|j| jdd}|d dkr>|j| jdd q&|  d¡ |  |¡ W d   ƒ d S 1 sUw   Y  d S )Né   r  TrÛ  rÒ  r   )rÞ  rf   ÚassertNumQueriesr¼   r  r[   r  )r]   r¢   r¿   rñ  r^   r^   r_   Útest_num_queries¾  s   
ÿ€"ÿz#TestSnippetHistory.test_num_queriesrX   )r©   rª   r«   rP  rf   rÌ  r`   r•   rë  rí  rò  rô  r   rõ  rø  r^   r^   r^   r_   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ß  r\   r^   r^   r_   rñ  Ò  s   ÿzTestSnippetRevisions.revert_urlc                 C   s   | j  | j¡S rX   )re   rf   rñ  r\   r^   r^   r_   rf   Ø  ra   zTestSnippetRevisions.getc                 C   s   | j  | j|¡S rX   )re   r¡  rñ  rV  r^   r^   r_   r¡  Û  rU  zTestSnippetRevisions.postNc                 C   s0   | j j |¡}|d u rt| j jƒg}t||dS rÍ  )r¢   rœ  r  r   rº   r   )r]   rÎ  rú   Ú	view_namer^   r^   r_   rÌ  Þ  s   zTestSnippetRevisions.get_urlc              
   C   s¨   |   ¡ | _tdƒ. tjjdd| _| jj| jd| _t	jjt
j t¡ddtƒ | jj| jdd W d   ƒ n1 s:w   Y  d| j_| j ¡  | jj| jdd	| _d S )
Nz2022-05-10 11:00:00úThe original textrÑ   rÖ  rG  TrØ  zThe edited textrÛ  )rZ   r[   r   rL   rv   r½   r¢   r  rß  r(   r	   rM  r   rº   r‰   rw   rà  r\   r^   r^   r_   r`   ä  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 )Nr€   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¡   rÆ  rû  r^  ú" method="POST">Tr[  úReplace current revision)
rf   rx   ry   r   ÚUSE_TZr˜   rñ  r‡   rb  rc  )r]   r{   Úexpected_date_stringÚform_tagr´   r^   r^   r_   Ú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 )NrÃ  rÑ   z%/admin/snippets/tests/advert/history/z/revisions/1/revert/r»  )rA   rv   r½   re   rf   rº   rx   ry   ©r]   r¢   r{   r^   r^   r_   Ú3test_get_revert_revision_with_non_revisable_snippet  s
   ÿzHTestSnippetRevisions.test_get_revert_revision_with_non_revisable_snippetc                 C   rj   rk   rr   rz   r^   r^   r_   r|     r}   z6TestSnippetRevisions.test_get_with_limited_permissionsc                 C   sð   t jjdd| _| j ¡ | _|  ¡ }|  |jd¡ |  	|d¡ |  
|j¡}| d¡}| d¡}|  |¡ |  |j ¡ d¡ | d¡}|  |¡ |  |j ¡ d	¡ |  t| d
¡ƒh d£¡ tdt| jjƒfd}| d|› d¡}|  |¡ d S )Nrg  rÑ   r€   r³  Úfooterz2button[type="submit"]:not([name="action-publish"])zReplace current draftz,button[type="submit"][name="action-publish"]zPublish this versionr2  >   úaction-saveúbutton-longrunningrê   z/wagtailsnippets_tests_draftstatemodel:unpublishrù   r%  r&  )rG   rv   r½   r¢   r  rß  rf   rx   ry   r…   r†   r‡   rˆ   rà   r‰   rŠ   Úsetr   r   rº   rß   )r]   r{   r‹   r  Úsave_buttonÚpublish_buttonre  Úunpublish_buttonr^   r^   r_   Ú!test_get_with_draft_state_snippet'  s6   
ÿ
ÿ
þþ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¡ |  |j¡}| d¡}|  |¡ |  | d¡|¡ | dddi¡}|  |¡ |  d|d ¡ |  d|d ¡ d S )NzPreview-enabled foorÑ   zPreview-enabled barr€   r³  z*You are viewing a previous version of thisr¡   rÆ  r^  rü  Tr[  rý  Úpreview_on_editzdata-side-panel="preview"z[data-controller="w-preview"]zdata-w-preview-url-valuerê   zdata-side-panel-toggleÚpreviewzw-tooltip w-kbdr§  zmod+pzdata-w-kbd-key-value)rI   rv   r½   r¢   r  rß  r‰   rf   rx   ry   r…   r˜   rñ  r‡   rb  rc  rÌ  r†   rˆ   rà   rï   )r]   r{   r   r´   Úpreview_urlr‹   Ú
controllerÚtoggle_buttonr^   r^   r_   Ú!test_get_with_previewable_snippetJ  s6   
ý




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ñ  rÀ  rz  rù   ©rñ  zThe original text revertedrý   úwagtail.revert)rf   r°   Úinitialr¡  rß  rº   rÏ  rÌ  r¢   rú  r/  r(   rv   rÐ  rÑ  rx   r‰   rï  rÇ  r‡   rà   rJ  )r]   Úget_responseÚtext_from_revisionÚpost_responserl  rÿ  r^   r^   r_   Útest_replace_revisionv  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 )
NFrl   rm   rn   r½  r  rÀ  rq   ré   )r[   rs   rt   ru   r   rv   rf   rw   r¡  rß  rº   rx   ry   r¢   rú  r$  r‰   rï  rÇ  rz   r^   r^   r_   Ú%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 )Nrg  FrD  úDraft-enabled Foo editedr”  r‰   r  r  rÀ  r§  r  rü  rý  úDraft-enabled Foo revertedrý   r  r   )$rG   rv   r½   r¢   r  rß  r‰   rà  rf   r°   r  r¡  rº   rÏ  rÌ  rú  r/  r(   rÐ  rÑ  r	   rM  rx   rï  rÇ  r‡   rà   rJ  rÍ   rE  rj  rh  rß   ri  rj  rk  )r]   r  r  r  rl  rÿ  Úpublish_log_entriesr^   r^   r_   Útest_replace_draft¨  sB   ÿþÿ


ý
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 d   ƒ n1 sDw   Y  |  || 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 )Nrg  rÑ   r  r”  r‰   r  rn  )r‰   rñ  rn  rÀ  rz  rù   r  r  rý  r  rý   rü  r¡   )&rG   rv   r½   r¢   r  rß  r‰   rà  rf   r°   r  r   r   r¡  rº   rÏ  rÌ  rú  r/  r(   rÐ  rÑ  r	   rM  rx   rï  rÇ  r‡   rà   rJ  rj  rE  rÍ   rh  ri  rj  rk  rl  )r]   r  r  rK  r  rl  rÿ  Úrevert_log_entriesr^   r^   r_   Útest_replace_publishØ  sF   
ýÿÿ	


ý
z)TestSnippetRevisions.test_replace_publishrX   )r©   rª   r«   Úpropertyrñ  rf   r¡  rÌ  r`   r  r  r|   r  r  r  r  r  r!  r^   r^   r^   r_   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Ó  )rL   rv   r½   r¢   r  rß  r   r‰  Ú
created_atrw   r‰   rà  Úfinal_revisionrZ   r\   r^   r^   r_   r`     s   


zTestCompareRevisions.setUpc                 C   s&   t dt| jjƒ||fd}| j |¡S )Nz6wagtailsnippets_tests_revisablemodel:revisions_comparerù   )r   r   r¢   rº   re   rf   )r]   Úrevision_a_idÚrevision_b_idÚcompare_urlr^   r^   r_   rf      s
   þzTestCompareRevisions.getc              
   C   sè   |   | jj| jj¡}|  |jd¡ | j|ddd tdg d}td| jj	fd}td| jj	fd}|  
td	ƒd
dœ|ddœ|t| jƒdœ|ddœddt| jƒdœg|j¡ |  |j¡}| d|› d¡}|  |¡ |  |j ¡ d¡ d S )Nr€   úV<span class="deletion">Initial revision</span><span class="addition">First edit</span>Tr³   rí  rù   z)wagtailsnippets_tests_revisablemodel:editz,wagtailsnippets_tests_revisablemodel:historyrc   r   r   zRevisable modelsÚHistoryrŽ   ÚCompare)r‘   r’   ró  za.w-header-button[href='z']ÚEdit)rf   rß  rº   rà  rx   ry   r˜   r   r¢   Úidr“   r  r‡   r†   rˆ   rà   r‰   rŠ   )r]   r{   Ú	index_urlr  r¶  r‹   Úedit_buttonr^   r^   r_   Útest_compare_revisions'  s:   ýþþûø
z+TestCompareRevisions.test_compare_revisionsc                 C   s2   |   d| jj¡}|  |jd¡ | j|ddd d S )NÚearliestr€   r)  Tr³   )rf   rà  rº   rx   ry   r˜   rz   r^   r^   r_   Útest_compare_revisions_earliestK  ó   
ýz4TestCompareRevisions.test_compare_revisions_earliestc                 C   s2   |   | jjd¡}|  |jd¡ | j|ddd d S )NÚlatestr€   zT<span class="deletion">First edit</span><span class="addition">Final revision</span>Tr³   )rf   rà  r-  rx   ry   r˜   rz   r^   r^   r_   Útest_compare_revisions_latestU  r3  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‰   )Úupdate_fieldsrE  r€   zU<span class="deletion">Final revision</span><span class="addition">Live edited</span>Tr³   )	r¢   r‰   rw   rf   r%  r-  rx   ry   r˜   rz   r^   r^   r_   Útest_compare_revisions_live_  s   
ýz0TestCompareRevisions.test_compare_revisions_liveN)	r©   rª   r«   r`   rf   r0  r2  r5  r7  r^   r^   r^   r_   r#    s    $

r#  c                   @   r9  )Ú%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ù   )rK   rv   r½   r¢   r  Úold_revisionr‰   r9  Únew_revisionr   r   rº   r(  r\   r^   r^   r_   r`   o  s   ÿþz+TestCompareRevisionsWithPerUserPanels.setUpc                 C   sH   |   ¡  | j | j¡}|  |jd¡ | j|ddd | j|ddd d S )Nr€   úFFoo <span class="deletion">bar</span><span class="addition">baz</span>Tr³   zRSecret <span class="deletion">text</span><span class="addition">unseen note</span>)rZ   re   rf   r(  rx   ry   r˜   rz   r^   r^   r_   Ú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 )NÚeditorÚpassword©Úusernamer?  r~   Úchange_revisablechildmodelrn   rl   rm   r€   r<  Tr³   zunseen note)Úcreate_userr   rv   rf   rt   ru   rZ   re   r(  rx   ry   r˜   r”   )r]   r[   r{  r=  r{   r^   r^   r_   Ú test_comparison_as_ordinary_userŒ  s"   ÿÿýzFTestCompareRevisionsWithPerUserPanels.test_comparison_as_ordinary_userN)r©   rª   r«   r`   r=  rD  r^   r^   r^   r_   r8  n  s    r8  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 )ÚTestSnippetChooserC  c                 C   s   |   ¡  ddg| _d S )Nr~   rÙ   )rZ   Úurl_argsr\   r^   r^   r_   r`   ¥  s   zTestSnippetChoose.setUpNc                 C   s.   | j \}}| j td|› d|› dƒ|pi ¡S )NÚwagtailsnippetchoosers_Ú_z:choose)rF  re   rf   r   )r]   rh   Ú	app_labelÚ
model_namer^   r^   r_   rf   ©  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´   )rf   r…   r…  Újsonrz   r^   r^   r_   r•   °  s   
þzTestSnippetChoose.test_simplec                 C   s>   t j ¡  ¡  |  ¡ }|  |d¡ | ¡ d }|  d|¡ d S )NrK  r´   ú(href="/admin/snippets/tests/advert/add/")rA   rv   r*  r/  rf   r…   rL  r|  )r]   r{   Úresponse_htmlr^   r^   r_   Útest_no_resultsº  s
   z!TestSnippetChoose.test_no_resultsc                 C   óf   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   rb  r¸   r¹   r€   r@  zadvert 1N)rA   rv   r*  r/  r¼   r½   rf   rx   ry   r°   r‰   r¾   r^   r^   r_   rÀ   Á  ó   zTestSnippetChoose.test_orderingc                 C   sH   |   ddi¡}|  |jd¡ |  |d¡ |   ddi¡}|  |jd¡ d S )NrÄ   r¡   r€   rK  i'  r»  rÅ   rz   r^   r^   r_   rÈ   Ì  s
   z(TestSnippetChoose.test_simple_paginationc                 C   ó    |   |  ¡ jd j d¡¡ d S ©NÚfilter_formr  )rÍ   rf   r°   r½  r\   r^   r^   r_   rÎ   Õ  ó    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")rF  r'   rv   r½   r?   rf   rL  r…  ©r]   r  r{   rN  r^   r^   r_   Ú(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 )NrW  rX  r  r  rY  rÑ   rZ  r[  r´   r]  r^  r@  ré   r   r¡   r\  r  )rF  r'   rv   r½   r?   rf   rL  r|  rx   r¤   r°   r‰   r_  r^   r^   r_   Útest_filter_by_localeè  s   
z'TestSnippetChoose.test_filter_by_localerX   )r©   rª   r«   rP  r`   rf   r•   rO  rÀ   rÈ   rÎ   r   r`  ra  r^   r^   r^   r_   rE  ¢  s    

	
rE  c                   @   ó4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )ÚTestSnippetChooseResultsrC  c                 C   rQ  rX   rR  r\   r^   r^   r_   r`     rS  zTestSnippetChooseResults.setUpNc                 C   ó   | j  tdƒ|p	i ¡S )Nz2wagtailsnippetchoosers_tests_advert:choose_resultsrd   rg   r^   r^   r_   rf   	  s   ÿzTestSnippetChooseResults.getc                 C   s   |   ¡ }|  |d¡ d S )Nú$wagtailsnippets/chooser/results.html)rf   r…   rz   r^   r^   r_   r•     s   z$TestSnippetChooseResults.test_simplec                 C   s2   t j ¡  ¡  |  ¡ }|  |d¡ |  |d¡ d S )Nre  rM  )rA   rv   r*  r/  rf   r…   r˜   rz   r^   r^   r_   rO    s   þz(TestSnippetChooseResults.test_no_resultsrX   )r©   rª   r«   rP  r`   rf   r•   rO  r^   r^   r^   r_   rc    s    
rc  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   rQ  rX   rR  r\   r^   r^   r_   r`     rS  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 )NrÃ  FrD  rÄ  TÚbaz)rG   rv   r½   rO  rE  Ú
live_draftr  )rN  r^   r^   r_   rP     s   z%TestSnippetChooseStatus.setUpTestDataNc                 C   s   | j  td|› ƒ|pi ¡S )Nz-wagtailsnippetchoosers_tests_draftstatemodel:rd   )r]   rú  rh   r^   r^   r_   rf   '  ó   þ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>)rf   rL  rc  )r]   r{   r´   r^   r^   r_   Ú$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 )NÚchoose_resultsrk  Tr³   rl  rm  rn  )rf   r˜   rz   r^   r^   r_   Ú,test_choose_results_view_shows_status_column9  s   
ÿ
ýzDTestSnippetChooseStatus.test_choose_results_view_shows_status_columnrX   )	r©   rª   r«   r`   rl  rP  rf   ro  rq  r^   r^   r^   r_   rf    s    

rf  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   rn  ro  rr  r\   r^   r^   r_   r`   H  rv  z,TestSnippetChooseWithSearchableSnippet.setUpNc                 C   rd  )Nz=wagtailsnippetchoosers_snippetstests_searchablesnippet:chooserd   rg   r^   r^   r_   rf   P  ó   þz*TestSnippetChooseWithSearchableSnippet.getc                 C   sR   |   ¡ }|  |d¡ t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrK  r@  )	rf   r…   rz  r°   r{  r|  rs  rt  ru  r}  r^   r^   r_   r•   V  s   z2TestSnippetChooseWithSearchableSnippet.test_simplec                 C   rS  rT  )rj  rf   r°   r½  r\   r^   r^   r_   r‚  `  rV  z9TestSnippetChooseWithSearchableSnippet.test_is_searchablec                 C   rƒ  )Nr  rp  r@  r„  r}  r^   r^   r_   r†  d  r‡  z8TestSnippetChooseWithSearchableSnippet.test_search_helloc                 C   rˆ  )Nr  rq  r@  rŠ  r}  r^   r^   r_   Útest_search_worldm  r‡  z8TestSnippetChooseWithSearchableSnippet.test_search_worldc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )Nr  zhello wor@  )	rf   rz  r°   r{  r…  rs  rt  r|  ru  r}  r^   r^   r_   Útest_partial_matchv  r‡  z9TestSnippetChooseWithSearchableSnippet.test_partial_matchrX   )
r©   rª   r«   r`   rf   r•   r‚  r†  rt  ru  r^   r^   r^   r_   rr  G  s    

		rr  c                   @   s*   e Zd ZdZdd„ Zd	dd„Zdd„ ZdS )
Ú5TestSnippetChooseWithNonAutocompleteSearchableSnippetr  c                 C   rn  ro  rŽ  r\   r^   r^   r_   r`   ˆ  r  z;TestSnippetChooseWithNonAutocompleteSearchableSnippet.setUpNc                 C   rd  )NzLwagtailsnippetchoosers_snippetstests_nonautocompletesearchablesnippet:chooserd   rg   r^   r^   r_   rf   ’  s   ÿüz9TestSnippetChooseWithNonAutocompleteSearchableSnippet.getc                 C   r‘  )Nr’  r  rp  r@  r“  r}  r^   r^   r_   r†  š  r–  zGTestSnippetChooseWithNonAutocompleteSearchableSnippet.test_search_hellorX   r—  r^   r^   r^   r_   rv  €  s
    

rv  c                   @   rb  )ÚTestSnippetChosenrC  c                 C   rQ  rX   rR  r\   r^   r^   r_   r`   ª  rS  zTestSnippetChosen.setUpNc                 C   s   | j  td|fd|pi ¡S )Nz*wagtailsnippetchoosers_tests_advert:chosenrù   rd   ©r]   rº   rh   r^   r^   r_   rf   ­  ri  zTestSnippetChosen.getc                 C   ó<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S ©Nr   r®  ÚstepÚchosen)
rf   rA   rv   r*  rº   rL  Úloadsr‡   rb  rx   ©r]   r{   Úresponse_jsonr^   r^   r_   Útest_choose_a_page³  ó   z$TestSnippetChosen.test_choose_a_pagec                 C   s   |   d¡}|  |jd¡ d S )Nr¾  r»  )rf   rx   ry   rz   r^   r^   r_   Útest_choose_a_non_existing_page¸  s   
z1TestSnippetChosen.test_choose_a_non_existing_pagerX   )r©   rª   r«   rP  r`   rf   r€  r‚  r^   r^   r^   r_   rw  §  s    
rw  c                   @   r—  )ÚTestAddOnlyPermissionsrC  c                 C   ó`   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®  Úaddonlyzaddonly@example.comr?  ©rA  Úemailr?  r~   Ú
add_advertrn   rl   rm   r@  ©	rA   rv   rf   r¨  rC  r   rt   ru   rZ   )r]   r[   r{  r=  r^   r^   r_   r`   À  ó   ÿÿÿzTestAddOnlyPermissions.setUpc                 C   ó:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S ©Nrƒ   r€   r®   rÉ   rº  rz   r^   r^   r_   Útest_get_indexÐ  ó   z%TestAddOnlyPermissions.test_get_indexc                 C   s@   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |jd d¡ d S )Nrµ   r€   r£  r¯   r¢   )re   rf   r   rx   ry   r…   r°   rz   r^   r^   r_   Útest_get_addØ  s   z#TestAddOnlyPermissions.test_get_addc                 C   ó2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S ©Nr½  rù   r<  ©re   rf   r   r   r¨  rº   rÏ  rz   r^   r^   r_   Útest_get_editÞ  ó   þÿz$TestAddOnlyPermissions.test_get_editc                 C   r  ©Nrø   rù   r<  r’  rz   r^   r^   r_   Útest_get_deleteè  r”  z&TestAddOnlyPermissions.test_get_deleteN©	r©   rª   r«   rP  r`   r  r  r“  r–  r^   r^   r^   r_   rƒ  ½  s    
rƒ  c                   @   r—  )ÚTestEditOnlyPermissionsrC  c                 C   r„  )Nr¡   r®  Ú
changeonlyzchangeonly@example.comr?  r†  r~   r²   rn   rl   rm   r@  r‰  ©r]   r[   Úchange_permissionr=  r^   r^   r_   r`   ö  rŠ  zTestEditOnlyPermissions.setUpc                 C   r‹  rŒ  ©re   rf   r   rx   ry   r…   r”   rz   r^   r^   r_   r    rŽ  z&TestEditOnlyPermissions.test_get_indexc                 C   ó$   | j  tdƒ¡}|  |tdƒ¡ d S ©Nrµ   r<  ©re   rf   r   rÏ  rz   r^   r^   r_   r    ó   z$TestEditOnlyPermissions.test_get_addc                 C   óN   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  |j	d d¡ d S )Nr½  rù   r€   r³  r¯   r¢   ©
re   rf   r   r   r¨  rº   rx   ry   r…   r°   rz   r^   r^   r_   r“    ó   þÿz%TestEditOnlyPermissions.test_get_editc                 C   r  r•  r’  rz   r^   r^   r_   r–    r”  z'TestEditOnlyPermissions.test_get_deleteNr—  r^   r^   r^   r_   r˜  ó  s    r˜  c                   @   r—  )ÚTestDeleteOnlyPermissionsrC  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®  Ú
deleteonlyr?  r@  r~   Údelete_advertrn   rl   rm   r‰  rš  r^   r^   r_   r`   ,  s   ÿÿzTestDeleteOnlyPermissions.setUpc                 C   r‹  rŒ  rœ  rz   r^   r^   r_   r  :  rŽ  z(TestDeleteOnlyPermissions.test_get_indexc                 C   r  rž  rŸ  rz   r^   r^   r_   r  B  r   z&TestDeleteOnlyPermissions.test_get_addc                 C   r  r‘  r’  rz   r^   r^   r_   r“  G  r”  z'TestDeleteOnlyPermissions.test_get_editc                 C   r¡  )Nrø   rù   r€   r€  r¯   r¢   r¢  rz   r^   r^   r_   r–  Q  r£  z)TestDeleteOnlyPermissions.test_get_deleteNr—  r^   r^   r^   r_   r¤  )  s    
r¤  c                   @   rÂ  )ÚTestSnippetEditHandlersc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rX   )r#   r=   r¦  rj  Ú
issubclassr   rÍ   r5   ©r]   r¥  r§  r^   r^   r_   Útest_standard_edit_handler^  ó   z2TestSnippetEditHandlers.test_standard_edit_handlerc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rX   )r#   r7   r¦  rj  r¨  r   r5   r©  r^   r^   r_   Útest_fancy_edit_handlerd  r«  z/TestSnippetEditHandlers.test_fancy_edit_handlerN)r©   rª   r«   rª  r¬  r^   r^   r^   r_   r§  ]  s    r§  c                   @   s   e Zd ZdZdd„ ZdS )Ú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:addr€   zwagtailadmin/js/draftail.js)rZ   re   rf   r   rx   ry   r˜   rz   r^   r^   r_   Útest_inline_panel_mediap  s   ÿz,TestInlinePanelMedia.test_inline_panel_mediaN)r©   rª   r«   r˜  r®  r^   r^   r^   r_   r­  k  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 )ÚTestSnippetChooserBlockrC  c                 C   ó>   t tƒ}tjjdd}|  | |¡|j¡ |  | d¡¡ dS )úQThe value of a SnippetChooserBlock (a snippet instance) should serialize to an IDrÍ  rÑ   N)r/   rA   rv   rf   rx   Úget_prep_valuer-  rß   ©r]   ÚblockrÍ  r^   r^   r_   Útest_serialize}  ó   z&TestSnippetChooserBlock.test_serializec                 C   ó>   t tƒ}tjjdd}|  | |j¡|¡ |  | d¡¡ dS )ú^The serialized value of a SnippetChooserBlock (an ID) should deserialize to a snippet instancerÍ  rÑ   N)r/   rA   rv   rf   rx   Ú	to_pythonr-  rß   r³  r^   r^   r_   Útest_deserialize‡  r¶  z(TestSnippetChooserBlock.test_deserializec                 C   s.   t dƒ}tjjdd}|  | |j¡|¡ d S )Nztests.AdvertrÍ  rÑ   )r/   rA   rv   rf   rx   r¹  r-  r³  r^   r^   r_   Útest_reference_model_by_string‘  s   z6TestSnippetChooserBlock.test_reference_model_by_stringc                 C   óˆ   t tddd}| d¡ tƒ  |¡}|  |d d¡ |  |d t¡ |  |d jt¡ |  |d ddd	d
|j	|j
ddd	ddidœ
¡ d S )Núpick an advert, any advertz)An advert to be displayed on the sidebar.©Ú	help_textÚdescriptionÚtest_snippetchooserblockr   r¡   ré   úTest snippetchooserblockTr¢   úBw-field w-field--model_choice_field w-field--admin_snippet_chooserÚADD_COMMENTúAdd Comment©
r’   rÀ  Úrequiredr6  Ú
blockDefIdÚisPreviewableÚhelpTextr  ÚshowAddCommentButtonÚstrings)r/   rA   Úset_namer%   Újs_argsrx   r  r2   rž  Údefinition_prefixÚis_previewable©r]   r´  rÎ  r^   r^   r_   Ú
test_adapt–  ó0   ý
öþz"TestSnippetChooserBlock.test_adaptc                 C   óZ   t tƒ}tjjdd}| dt|jƒii d¡}|  ||¡ | ddii d¡}|  |¡ d S )NrÍ  rÑ   rÙ   rŽ   )	r/   rA   rv   rf   Úvalue_from_datadictr  r-  rx   rß   ©r]   r´  rÍ  r?  Úempty_valuer^   r^   r_   Útest_form_response³  s   z*TestSnippetChooserBlock.test_form_responsec                 C   óŽ   t tƒ}t tdd}tjjdd}|  | |¡|¡ |  t¡ | d ¡ W d   ƒ n1 s/w   Y  |  | |¡|¡ |  | d ¡¡ d S )NF©rÇ  rÍ  rÑ   )	r/   rA   rv   rf   rx   ÚcleanÚassertRaisesr   rß   ©r]   Úrequired_blockÚnonrequired_blockrÍ  r^   r^   r_   Ú
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/   rA   Údeconstructrx   )r]   r´  Úpathrú   Úkwargsr^   r^   r_   Ú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 )NrÍ  rÑ   rŽ   )	r/   rA   rv   rf   ÚassertListEqualrz  Úextract_referencesr  r-  r³  r^   r^   r_   Útest_extract_referencesÐ  s   þz/TestSnippetChooserBlock.test_extract_referencesc                 C   s>   |   t¡ ttƒ}|j W d   ƒ d S 1 sw   Y  d S rX   )rÜ  r   r/   r'   r¾  )r]   r´  r^   r^   r_   Ú#test_exception_on_non_snippet_modelÜ  s   "þz;TestSnippetChooserBlock.test_exception_on_non_snippet_modelN)r©   rª   r«   rP  rµ  rº  r»  rÒ  rØ  rà  rä  rç  rè  r^   r^   r^   r_   r¯  z  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¡   Ú__ID__)r2   rA   r3   rÎ  rx   r¤   ÚassertInHTMLr|  )r]   r¾  rÎ  r^   r^   r_   rÒ  ã  s   ÿz(TestAdminSnippetChooserWidget.test_adaptN)r©   rª   r«   rÒ  r^   r^   r^   r_   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/01rp  ©Ú
snippet_idr‰   ú
snippet/02z
snippet/03)rZ   r>   rv   r½   rs  rt  ru  r\   r^   r^   r_   r`   ñ  s   ÿÿÿz-TestSnippetListViewWithCustomPrimaryKey.setUpc                 C   rb   )NúFwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:listrd   rg   r^   r^   r_   rf   ÿ  r  z+TestSnippetListViewWithCustomPrimaryKey.getc                 C   s`   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nr€   r®   r»   )rf   rx   ry   r…   rz  r°   r{  r|  rs  rt  ru  r}  r^   r^   r_   r•     s   z3TestSnippetListViewWithCustomPrimaryKey.test_simpleN)r©   rª   r«   r`   rf   r•   r^   r^   r^   r_   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 )Ú#TestSnippetViewWithCustomPrimaryKeyrC  c                    s:   t ƒ  ¡  |  ¡  tjjddd| _tjjddd| _d S )Nrí  rp  rî  Úabc_407269_1ÚGoodbye)r°  r`   rZ   r>   rv   r½   rs  rt  r\   r±  r^   r_   r`     s   
ÿÿz)TestSnippetViewWithCustomPrimaryKey.setUpc                 C   ó*   t |jƒg}| j t|j d¡|d|¡S r¦  )r   rº   re   rf   r   rœ  r  )r]   r¢   rh   rú   r^   r^   r_   rf      ó
   þz'TestSnippetViewWithCustomPrimaryKey.getc                 C   rõ  r¦  )r   rº   re   r¡  r   rœ  r  )r]   r¢   r¢  rú   r^   r^   r_   r¡  '  rö  z(TestSnippetViewWithCustomPrimaryKey.postc                 C   s   | j  t|j d¡ƒ|¡S r›  r   )r]   r¢   r¢  rž  r^   r^   r_   r½   .  s   þz*TestSnippetViewWithCustomPrimaryKey.createc              	   C   sf   | j | jfD ]*}| j|d |  |¡}|  |jd¡ |  |d¡ W d   ƒ n1 s+w   Y  qd S )Nrá  r€   r³  )rs  rt  rè  rf   rx   ry   r…   r  r^   r^   r_   Útest_show_edit_view4  s   
ý€ÿz7TestSnippetViewWithCustomPrimaryKey.test_show_edit_viewc                 C   s0   | j | jddid}|  |d¡ |  |d¡ d S )NrÃ  rÄ  rÀ  zNThe standard snippet with custom primary key could not be saved due to errors.rx  )r¡  rs  r˜   rz   r^   r^   r_   rÁ  ;  s   þz5TestSnippetViewWithCustomPrimaryKey.test_edit_invalidc                 C   s\   | j | jdddœd}|  |tdƒ¡ tj ¡ }|  | ¡ d¡ |  | 	d¡ 
¡ jd¡ d S )NzEdited snippetÚsnippet_id_edited©r‰   rï  rÀ  rñ  rý   rï  )r¡  rs  rÏ  r   r>   rv   r*  rx   rÇ  rÞ  r  rï  rÒ  r^   r^   r_   rÄ  C  s   þÿþ
ÿz-TestSnippetViewWithCustomPrimaryKey.test_editc                 C   s\   | j | jdddœd}|  |tdƒ¡ tj ¡ }|  | ¡ d¡ |  | 	d¡ 
¡ jd¡ d S )Nztest snippetrð  rù  rÀ  rñ  rý   rï  )r½   rs  rÏ  r   r>   rv   r*  rx   rÇ  rÞ  r  r‰   rÒ  r^   r^   r_   rÓ  U  s   þÿþ
z/TestSnippetViewWithCustomPrimaryKey.test_createc              	   C   sx   | j | jfD ]3}| j|d# | j tdt|jƒgd¡}|  |j	d¡ |  
|d¡ W d   ƒ n1 s4w   Y  qd S )Nrá  úHwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:deleterù   r€   r€  )rs  rt  rè  re   rf   r   r   rº   rx   ry   r…   r  r^   r^   r_   r–  e  s   
þÿÿø€ÿz3TestSnippetViewWithCustomPrimaryKey.test_get_deletec              	   C   s¤   | j | jfD ]I}| j|d9 | j tdt|jƒgd¡}|  |j	d¡ |  
|d¡ |  |d¡ |  |tdt|jƒgdd ¡ W d   ƒ n1 sJw   Y  qd S )	Nrá  rú  rù   r€   r€  zCThis standard snippet with custom primary key is referenced 0 timeszGwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:usagerx  )rs  rt  rè  re   rf   r   r   rº   rx   ry   r…   r˜   r  r^   r^   r_   rƒ  s  s8   
þÿÿþ
þüþñ€ÿz3TestSnippetViewWithCustomPrimaryKey.test_usage_linkc                 C   óL   |   td¡ | j d¡}W d   ƒ n1 sw   Y  | 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/é-  ©ry   ©r”  rS   re   rf   rÏ  rz   r^   r^   r_   Útest_redirect_to_edit  ó   þÿü
ýz9TestSnippetViewWithCustomPrimaryKey.test_redirect_to_editc                 C   rû  )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þ  rz   r^   r^   r_   Útest_redirect_to_delete›  r   z;TestSnippetViewWithCustomPrimaryKey.test_redirect_to_deletec                 C   rû  )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þ  rz   r^   r^   r_   Útest_redirect_to_usage©  r   z:TestSnippetViewWithCustomPrimaryKey.test_redirect_to_usage)r©   rª   r«   rP  r`   rf   r¡  rA   r½   r÷  rÁ  rÄ  rÓ  r–  rƒ  rÿ  r  r  rà  r^   r^   r±  r_   rò    s    
rò  c                   @   r—  )Ú+TestSnippetChooserBlockWithCustomPrimaryKeyrC  c                 C   r°  )r±  ú	advert/01r®  N)r/   rB   rv   rf   rx   r²  rº   rß   r³  r^   r^   r_   rµ  »  r¶  z:TestSnippetChooserBlockWithCustomPrimaryKey.test_serializec                 C   r·  )r¸  r  r®  N)r/   rB   rv   rf   rx   r¹  rº   rß   r³  r^   r^   r_   rº  Å  r¶  z<TestSnippetChooserBlockWithCustomPrimaryKey.test_deserializec                 C   r¼  )Nr½  z(An advert to be displayed on the footer.r¾  rÁ  r   r¡   ré   rÂ  Tr¢   rÃ  rÄ  rÅ  rÆ  )r/   rB   rÍ  r%   rÎ  rx   r  r2   rž  rÏ  rÐ  rÑ  r^   r^   r_   rÒ  Ï  rÓ  z6TestSnippetChooserBlockWithCustomPrimaryKey.test_adaptc                 C   rÔ  )Nr  r®  ÚadvertwithcustomprimarykeyrŽ   )	r/   rB   rv   rf   rÕ  r  rº   rx   rß   rÖ  r^   r^   r_   rØ  ì  s   ý
ÿz>TestSnippetChooserBlockWithCustomPrimaryKey.test_form_responsec                 C   rÙ  )NFrÚ  r  r®  )	r/   rB   rv   rf   rx   rÛ  rÜ  r   rß   rÝ  r^   r^   r_   rà  ü  s   ÿÿz6TestSnippetChooserBlockWithCustomPrimaryKey.test_cleanN)	r©   rª   r«   rP  rµ  rº  rÒ  rØ  rà  r^   r^   r^   r_   r  ¸  s    

r  c                   @   r—  )Ú+TestSnippetChooserPanelWithCustomPrimaryKeyrC  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 )Nrº  r™  z	advert/02)Ú	advert_idr‰   )r  rš  r›  c                 S   rœ  ©rž  Nr  rŸ  r¡  r^   r^   r_   rŸ   "  r£  zETestSnippetChooserPanelWithCustomPrimaryKey.setUp.<locals>.<listcomp>r   )r   rf   r¦   r   r[   rN   r¤  rv   r½   rB   r#   r¥  r¦  r§  r¨  r©  rª  r«  r^   r^   r_   r`     s*   ÿÿ
ÿþ
ü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°  r^   r^   r_   r²  (  s   
z<TestSnippetChooserPanelWithCustomPrimaryKey.test_render_htmlc                 C   r³  )Nrš  r›  c                 S   rœ  r  rŸ  r¡  r^   r^   r_   rŸ   5  r£  zZTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_field.<locals>.<listcomp>r   r	  r
  )rN   r§  r¥  r¨  r¦   r©  r¯  r|  r´  r^   r^   r_   rµ  .  r¶  zFTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_fieldc                 C   r·  )Nz~new SnippetChooser("id_advertwithcustomprimarykey", {"modalUrl": "/admin/snippets/choose/tests/advertwithcustomprimarykey/"});r¸  r\   r^   r^   r_   r¹  ?  rº  z:TestSnippetChooserPanelWithCustomPrimaryKey.test_render_jsc                 C   r»  )Nr  )r"   r!   r¼  rN   r¦  r½  r¾  r  r2   rx   rž  rB   r¿  r^   r^   r_   rÀ  E  s   ÿþzJTestSnippetChooserPanelWithCustomPrimaryKey.test_target_model_autodetectedNrÁ  r^   r^   r^   r_   r    s    r  c                   @   rb  )Ú%TestSnippetChooseWithCustomPrimaryKeyrC  c                 C   rQ  rX   rR  r\   r^   r^   r_   r`   S  rS  z+TestSnippetChooseWithCustomPrimaryKey.setUpNc                 C   rd  )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chooserd   rg   r^   r^   r_   rf   V  rs  z)TestSnippetChooseWithCustomPrimaryKey.getc                 C   s<   |   ¡ }|  |d¡ |  |jd d¡ |  |jd d¡ d S )NrK  r¯   r¢   r6  )rf   r…   rx   r°   rz   r^   r^   r_   r•   \  s   z1TestSnippetChooseWithCustomPrimaryKey.test_simplec                 C   rP  rQ  )rB   rv   r*  r/  r¼   r½   rf   rx   ry   r°   r‰   r¾   r^   r^   r_   rÀ   b  rR  z3TestSnippetChooseWithCustomPrimaryKey.test_orderingrX   )r©   rª   r«   rP  r`   rf   r•   rÀ   r^   r^   r^   r_   r  P  s    
r  c                   @   ó,   e Zd ZdgZdd„ Zd	dd„Zdd„ ZdS )
Ú%TestSnippetChosenWithCustomPrimaryKeyrC  c                 C   rQ  rX   rR  r\   r^   r^   r_   r`   q  rS  z+TestSnippetChosenWithCustomPrimaryKey.setUpNc                 C   ó    | j  tdt|ƒfd|pi ¡S )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chosenrù   ©re   rf   r   r   rx  r^   r^   r_   rf   t  ó   þûz)TestSnippetChosenWithCustomPrimaryKey.getc                 C   ry  rz  )
rf   rB   rv   r*  rº   rL  r}  r‡   rb  rx   r~  r^   r^   r_   r€  }  r  z8TestSnippetChosenWithCustomPrimaryKey.test_choose_a_pagerX   ©r©   rª   r«   rP  r`   rf   r€  r^   r^   r^   r_   r  n  ó
    
	r  c                   @   r  )
Ú)TestSnippetChosenWithCustomUUIDPrimaryKeyrC  c                 C   rQ  rX   rR  r\   r^   r^   r_   r`   †  rS  z/TestSnippetChosenWithCustomUUIDPrimaryKey.setUpNc                 C   r  )NzBwagtailsnippetchoosers_tests_advertwithcustomuuidprimarykey:chosenrù   r  rx  r^   r^   r_   rf   ‰  r  z-TestSnippetChosenWithCustomUUIDPrimaryKey.getc                 C   ry  rz  )
rf   rC   rv   r*  rº   rL  r}  r‡   rb  rx   r~  r^   r^   r_   r€  ’  r  z<TestSnippetChosenWithCustomUUIDPrimaryKey.test_choose_a_pagerX   r  r^   r^   r^   r_   r  ƒ  r  r  c                   @   rÂ  )ÚTestPanelConfigurationChecksc                    s   dˆ _ ‡ fdd„}|ˆ _d S )Núwagtailadmin.W002c                     s    t jdgd} ‡ fdd„| D ƒS )NÚpanels)rÙ  c                    s   g | ]
}|j ˆ jkr|‘qS r^   )r-  Ú
warning_id)r   Úwarningr\   r^   r_   rŸ   Ÿ  s    zQTestPanelConfigurationChecks.setUp.<locals>.get_checks_result.<locals>.<listcomp>)r
   Ú
run_checks)Úchecks_resultr\   r^   r_   Úget_checks_resultœ  s   
ÿz=TestPanelConfigurationChecks.setUp.<locals>.get_checks_result)r  r  )r]   r  r^   r\   r_   r`   ™  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Úobjr-  Úcontent_panels)r!   r=   r  r
   ÚWarningr  rx   Údelattr)r]   r  Úchecks_resultsr^   r^   r_   Ú(test_model_with_single_tabbed_panel_only¥  s   ù
zETestPanelConfigurationChecks.test_model_with_single_tabbed_panel_onlyN)r©   rª   r«   r`   r"  r^   r^   r^   r_   r  ˜  s    r  )±r‰  rL  Úior   Úunittestr   Údjango.confr   Údjango.contrib.admin.utilsr   Údjango.contrib.authr   Údjango.contrib.auth.modelsr   r   Ú"django.contrib.contenttypes.modelsr	   Údjango.corer
   r   Údjango.core.exceptionsr   r   Údjango.core.files.baser   Údjango.core.files.uploadedfiler   Údjango.core.handlers.wsgir   Údjango.httpr   r   Údjango.testr   r   r   Údjango.test.utilsr   Údjango.urlsr   Údjango.utils.timezoner   r   Ú	freezegunr   Útaggit.modelsr   Úwagtailr   Úwagtail.admin.admin_url_finderr   Úwagtail.admin.formsr   Úwagtail.admin.forms.searchr   Úwagtail.admin.menur    Úwagtail.admin.panelsr!   r"   r#   Úwagtail.admin.widgets.buttonr$   Úwagtail.blocks.field_blockr%   Úwagtail.coreutilsr&   Úwagtail.modelsr'   r(   r)   Úwagtail.signalsr*   r+   Úwagtail.snippets.action_menur,   r-   r.   Úwagtail.snippets.blocksr/   Úwagtail.snippets.modelsr0   r1   Úwagtail.snippets.widgetsr2   r3   r4   Úwagtail.test.snippets.formsr5   Úwagtail.test.snippets.modelsr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Úwagtail.test.testapp.modelsrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   Úwagtail.test.utilsrP   Ú!wagtail.test.utils.template_testsrQ   Úwagtail.test.utils.timestampsrR   Úwagtail.utils.deprecationrS   Úwagtail.utils.timestampsrT   rV   r¬   r  r:  rB  rm  rŒ  r™  r9  rB  rQ  r¥  r­  râ  rå  rç  rï  rò  r?  rK  rV  rh  r˜  rÃ  rÆ  rÊ  rù  r#  r8  rE  rc  rf  rr  rv  rw  rƒ  r˜  r¤  r§  r­  r¯  ré  rì  rò  r  r  r  r  r  r  r^   r^   r^   r_   Ú<module>   s    4DN }a 
Aÿ'  I H   10  _(          S Z  Z VD
 +  <c4a+
9ÿ'664h# &SE