a
    Døg…~ ã                   @   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                   @   sH   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )ÚTestSnippetIndexViewc                 C   s   |   ¡ | _d S ©N©ÚloginÚuser©Úself© r\   úc/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/snippets/tests/test_snippets.pyÚsetUpV   s    zTestSnippetIndexView.setUpc                 C   s   | j  tdƒ|¡S )Núwagtailsnippets:index©ÚclientÚgetr   ©r[   Úparamsr\   r\   r]   rb   Y   s    zTestSnippetIndexView.getc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S ©NFÚwagtailadminÚaccess_admin©Zcontent_type__app_labelÚcodenameé.  ©
rY   Úis_superuserÚuser_permissionsÚaddr   Úobjectsrb   ÚsaveÚassertEqualÚstatus_code©r[   Úresponser\   r\   r]   Ú!test_get_with_limited_permissions\   s    ÿÿ
z6TestSnippetIndexView.test_get_with_limited_permissionsc                 C   sœ   d| j _| j j tjjdddtjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ |  
|d¡ |  |j¡}| d	¡}|  |d
 tdƒ¡ |  |j ¡ d¡ d S )NFrf   rg   rh   ÚtestsÚview_advertéÈ   ú!wagtailadmin/generic/listing.htmlztr td aÚhrefú!wagtailsnippets_tests_advert:listÚAdverts)rY   rl   rm   rn   r   ro   rb   rp   rq   rr   ÚassertTemplateUsedÚget_soupÚcontentÚ
select_oner   ÚtextÚstrip)r[   rt   Ú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 )Nrx   ry   Ú ÚSnippets©ÚurlÚlabelzdata-locale-selector)rb   rq   rr   r}   ÚassertBreadcrumbsItemsRenderedr   ÚassertNotContainsrs   r\   r\   r]   Útest_simple|   s    
þz TestSnippetIndexView.test_simplec                 C   s   |   |  ¡ d¡ d S )Nr|   ©ÚassertContainsrb   rZ   r\   r\   r]   Útest_displays_snippetˆ   s    z*TestSnippetIndexView.test_displays_snippetc                 C   s¸   d| j _| j j tjjdddtjjddd¡ | j  ¡  tƒ }| j |_ t	 
|¡}dd„ |D ƒ}|  t|ƒd	¡ |d
 }|  |jd¡ |  |jd¡ |  |jd¡ |  |jtdƒ¡ d S )NFrf   rg   rh   rv   rw   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‡   Úsnippetr_   )rY   rl   rm   rn   r   ro   rb   rp   r&   r    Zmenu_items_for_requestrq   Ú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^   rb   ru   r…   r   r   r   r\   r\   r\   r]   rU   U   s   rU   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 rV   )rX   r   ro   rb   rY   )r[   Z
user_modelr\   r\   r]   r^   ¤   s    zTestSnippetListView.setUpc                 C   s   | j  tdƒ|¡S )Nr{   r`   rc   r\   r\   r]   rb   ©   s    zTestSnippetListView.getc                 C   s8   |   ¡ }|  |jd¡ |  |d¡ |  |jd d¡ d S )Nrx   ú#wagtailsnippets/snippets/index.htmlÚheader_iconr˜   )rb   rq   rr   r}   Úcontextrs   r\   r\   r]   r   ¬   s    zTestSnippetListView.test_simplec                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S re   rk   rs   r\   r\   r]   Úget_with_limited_permissions²   s    ÿÿ
z0TestSnippetListView.get_with_limited_permissionsc                 C   st   d| j _| j j tjjdddtjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ | j
|dd	d
 |  |tdƒ¡ d S )NFrf   rg   rh   rv   Úchange_advertrx   z'<p>There are no adverts to display.</p>T©Úhtmlú wagtailsnippets_tests_advert:add)rY   rl   rm   rn   r   ro   rb   rp   rq   rr   r   rŒ   r   rs   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   rx   Úpage_objr   z	advert 10N)	ÚrangerA   ro   Úcreaterb   rq   rr   r¤   r   ©r[   Úirt   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-1Z9999z
Not a pageÚprx   r¢   ©rb   rq   rr   r}   )r[   ZpagesÚpagert   r\   r\   r]   Útest_simple_paginationÝ   s
    z*TestSnippetListView.test_simple_paginationc                 C   s   |   |  ¡ d¡ d S )Nú
Add advertrŽ   rZ   r\   r\   r]   Útest_displays_add_buttonä   s    z,TestSnippetListView.test_displays_add_buttonc                 C   s   |   |  ¡ j d¡¡ d S ©NZsearch_form)ÚassertFalserb   r¤   rZ   r\   r\   r]   Útest_not_searchableç   s    z'TestSnippetListView.test_not_searchablec                    sÀ   t jjdd‰ d‡ ‡fdd„	}t d|¡ ˆ ¡ }W d   ƒ n1 sH0    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)rq   rY   r   r4   ©r˜   rY   Znext_url©Úadvertr[   r\   r]   Úsnippet_listing_buttonsí   s    ÿz_TestSnippetListView.test_register_snippet_listing_buttons_hook.<locals>.snippet_listing_buttonsÚ register_snippet_listing_buttonsrx   ú wagtailadmin/shared/buttons.htmlútbody tr td ul.actionszli > a[href='/custom-url']z7li [data-controller='w-dropdown'] a[href='/custom-url']rÂ   )N)rA   ro   r±   r   Úregister_temporarilyrb   rq   rr   r}   r~   r   r€   ÚassertIsNoneÚassertIsNotNoner   r‚   )r[   rÉ   rt   rƒ   ÚactionsZ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 sH0    Y  ˆ |jd¡ ˆ |d¡ ˆ 	|j
¡}| d¡}| d	¡}ˆ |¡ | d
¡}ˆ t|ƒd¡ d }|D ]}d|j ¡ v r¸|}q¸ˆ |¡ ˆ | d¡j ¡ d¡ |jdddid}	ˆ |	¡ ˆ |	j ¡ d¡ d S )NrÀ   rÁ   c                 3   sH   ˆ  | ˆ ¡ ˆ  |ˆj¡ ˆ  |tdƒ¡ tdtddddgdV  d S )Nr{   ú	Moar pls!ÚAlrightyú/cheersrÃ   rÄ   )rŠ   Úbuttons)rq   rY   r   r$   r4   rÆ   rÇ   r\   r]   rÉ     s    þzmTestSnippetListView.test_register_snippet_listing_buttons_hook_with_dropdown.<locals>.snippet_listing_buttonsrÊ   rx   rË   rÌ   z@li [data-controller='w-dropdown'] [data-controller='w-dropdown']z#li > [data-controller='w-dropdown']é   rÓ   ÚbuttonÚarz   rÕ   ©ÚattrsrÔ   )N)rA   ro   r±   r   rÍ   rb   rq   rr   r}   r~   r   r€   rÎ   Úselectr™   r   r‚   rÏ   Úfind)
r[   rÉ   rt   rƒ   rÐ   Znested_dropdownZdropdown_buttonsZcustom_dropdownrØ   rÑ   r\   rÇ   r]   Ú8test_register_snippet_listing_buttons_hook_with_dropdown  s2    	ÿ&
ÿ



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Á   rx   rË   z<tbody tr td ul.actions > li > [data-controller='w-dropdown']r—   r   rÙ   rz   z/dummy-buttonrÚ   zDummy Button)rA   ro   r±   rb   rq   rr   r}   r~   r   rÜ   r™   rÝ   rÏ   r   r‚   )r[   rt   rƒ   Z	dropdownsZmore_dropdownZ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 sZ0    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>é   ©rq   r™   ©rÖ   r˜   rY   ©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_buttonsrx   rË   )rA   ro   r±   r   r   r®   r   rÍ   rb   rq   rr   r}   rŒ   )r[   rÈ   ré   rt   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|¡D ˆ td¡ ˆ ¡ }W d   ƒ n1 sT0    Y  W d   ƒ n1 sr0    Y  ˆ |j	d¡ ˆ 
|d¡ d S )	NrÀ   rÁ   c                    s*   ˆ  |ˆ ¡ ˆ  |ˆj¡ ˆ  |i ¡ d S rV   )rq   rY   )rÖ   r˜   rY   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 argumentrx   rË   )rA   ro   r±   r   rÍ   ÚassertWarnsMessagerS   rb   rq   rr   r}   )r[   rì   rt   r\   rÇ   r]   Ú>test_construct_snippet_listing_buttons_hook_deprecated_context]  s    þþýDzRTestSnippetListView.test_construct_snippet_listing_buttons_hook_deprecated_contextc                    sr   t jjdd ‡ fdd„}t d|¡ ˆ  ¡ }W d   ƒ n1 sD0    Y  ˆ  |j¡}| d¡}ˆ  	|¡ d S )NrÀ   rÁ   c                    s    g | d d …< ˆ   t| ƒd¡ d S )Nr   ræ   rç   rZ   r\   r]   Úremove_all_buttonst  s    zfTestSnippetListView.test_dropdown_not_rendered_when_no_child_buttons_exist.<locals>.remove_all_buttonsrê   rÌ   )
rA   ro   r±   r   rÍ   rb   r~   r   r€   rÎ   )r[   rï   rt   rƒ   rÐ   r\   rZ   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   ro   r±   Úsave_revisionÚpublishr   ra   rb   r   r   r®   r   )r[   r˜   rt   Úedit_urlr\   r\   r]   Útest_use_latest_draft_as_title‚  s(    ÿ
þÿþ÷z2TestSnippetListView.test_use_latest_draft_as_titleN)rž   rŸ   r    r^   rb   r   r¥   rª   r´   rº   r¼   r¿   rÒ   rÞ   rß   rë   rî   rð   rø   r\   r\   r\   r]   r¡   £   s    
!(r¡   T©Z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   s   t jjdd| _|  ¡ | _d S ©NÚfr©Zlanguage_code©r'   ro   r±   Ú	fr_localerX   rY   rZ   r\   r\   r]   r^   ¡  s    zTestLocaleSelectorOnList.setUp))ÚarÚArabic)ÚenZEnglish)rü   ZFrench)ZWAGTAIL_CONTENT_LANGUAGESc                 C   sŽ   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ | d¡}|  |¡ tdƒd }| d|› d¡}|  	t
|ƒd¡ | j|d	|› d
dd d S )Nú6wagtailsnippets_snippetstests_translatablesnippet:listz input[name="locale"][value="ar"]z input[name="locale"][value="fr"]ú5wagtailsnippets_snippetstests_translatablesnippet:addú
?locale=enúa[href="ú"]r×   úO<p>There are no translatable snippets to display.
            Why not <a href="ú">add one</a>?</p>Tr§   )ra   rb   r   r~   r   r€   rÎ   rÏ   rÜ   rq   r™   r   )r[   rt   rƒ   Zarabic_inputZ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ÿ   Údeletera   rb   r   r~   r   r€   rÎ   )r[   rt   rƒ   Zlocale_inputZfilters_drilldownr\   r\   r]   Ú*test_no_locale_filter_when_only_one_localeÈ  s    
ÿ


zCTestLocaleSelectorOnList.test_no_locale_filter_when_only_one_localeFrù   c                 C   s‚   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ tdƒ}|  |j¡}| d|› d¡}|  t	|ƒd¡ | j
|d|› dd	d
 d S )Nr  r  r  r  r  r×   r  r	  Tr§   ©ra   rb   r   r~   r   r€   rÎ   rÜ   rq   r™   r   ©r[   rt   rƒ   Z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   s‚   | j  tdƒ¡}|  |j¡}| d¡}|  |¡ tdƒ}|  |j¡}| d|› d¡}|  t	|ƒd¡ | j
|d|› dd	d
 d S )Nr{   r  r©   r  r  r×   zA<p>There are no adverts to display.
            Why not <a href="r	  Tr§   r  r  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  r  r  r  r\   r\   r\   r]   rú   Ÿ  s   ÿ

rú   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestModelOrderingc                 C   s<   t ddƒD ]}tjjd| d q
tjjdd |  ¡  d S )Nr—   rÃ   r¬   rÁ   Ú	aaaadvert)r°   rD   ro   r±   rX   )r[   r³   r\   r\   r]   r^     s    zTestModelOrdering.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |jd d jd¡ d S )Nz4wagtailsnippets_tests_advertwithtabbedinterface:listrx   r¯   r   r  ©ra   rb   r   rq   rr   r¤   r   rs   r\   r\   r]   Ú$test_listing_respects_model_ordering  s
    ÿz6TestModelOrdering.test_listing_respects_model_orderingc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |jd d jd¡ d S )Nz=wagtailsnippetchoosers_tests_advertwithtabbedinterface:chooserx   Úresultsr   r  r  rs   r\   r\   r]   Ú$test_chooser_respects_model_ordering  s
    ÿz6TestModelOrdering.test_chooser_respects_model_orderingN)rž   rŸ   r    r^   r  r  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 ]x}tjj|d › d|› d}tjj|d › d|› dd	}|d
 dkr
tjjtj t¡ddtƒ |j	d | 
¡  ¡  q
d S )Nr—   rÃ   rÙ   zdvert rÁ   Údzraft F©r   Úliver×   r   úTest Advertúwagtail.create©Úcontent_typerŠ   ÚactionÚ	timestampÚ	object_id)r°   rA   ro   r±   rG   r(   r	   Úget_for_modelr   r®   rõ   rö   )Úclsr³   rÈ   Údraftr\   r\   r]   ÚsetUpTestData  s    
ûz"TestListViewOrdering.setUpTestDatac                 C   s   |   ¡  d S rV   ©rX   rZ   r\   r\   r]   r^   '  s    zTestListViewOrdering.setUpc                 C   sr   t dƒ}| j |¡}|d }|d }|  |jd¡ |  |d¡ | j|d|› ddd	 | j|d|› d
dd	 d S )Nr{   ú?ordering=_updated_atú?ordering=liverx   ú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   ra   rb   rq   rr   r}   r   rŒ   ©r[   Úlist_urlrt   Zsort_updated_urlZsort_live_urlr\   r\   r]   Ú,test_listing_orderable_columns_with_no_mixin*  s     
ý
ýzATestListViewOrdering.test_listing_orderable_columns_with_no_mixinc                 C   sr   t dƒ}| j |¡}|d }|d }|  |jd¡ |  |d¡ | j|d|› ddd	 | j|d|› d
dd	 d S )Nró   r*  r+  rx   r,  r-  r.  Tr§   r/  )r   ra   rb   rq   rr   r}   r   r0  r\   r\   r]   Ú5test_listing_orderable_columns_with_draft_state_mixin@  s     
ý
ýzJTestListViewOrdering.test_listing_orderable_columns_with_draft_state_mixinc                 C   sÚ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ | j |d ¡}|  |jd¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ d S )	Nr{   r*  rx   r¯   r   éÿÿÿÿzaaaaaaaadvert 8ú?ordering=-_updated_at©r   ra   rb   rq   rr   rÎ   r¤   Z_updated_atr   rÏ   r   ©r[   r1  rt   r\   r\   r]   Ú&test_order_by_updated_at_with_no_mixinV  s    z;TestListViewOrdering.test_order_by_updated_at_with_no_mixinc                 C   sÚ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ | j |d ¡}|  |jd¡ |  |jd d jd¡ |  	|jd d j¡ |  
||d ¡ d S )	Nró   r*  rx   r¯   r   r4  zddddddddraft 8r5  r6  r7  r\   r\   r]   Ú/test_order_by_updated_at_with_draft_state_mixinp  s    zDTestListViewOrdering.test_order_by_updated_at_with_draft_state_mixinc                 C   sÀ   t dƒ}| j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d j¡ |  	||d ¡ | j |d ¡}|  |jd¡ |  |jd d j¡ |  |jd d j¡ |  	||d ¡ d S )Nró   r+  rx   r¯   r   r4  z?ordering=-live)
r   ra   rb   rq   rr   r¾   r¤   r  Ú
assertTruer   r7  r\   r\   r]   Útest_order_by_liveŠ  s    z'TestListViewOrdering.test_order_by_liveN)rž   rŸ   r    Úclassmethodr(  r^   r2  r3  r8  r9  r;  r\   r\   r\   r]   r    s   
r  c                   @   sH   e Zd Zdd„ Zi fdd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dS )Ú(TestSnippetListViewWithSearchableSnippetc                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S ©NÚHellorÁ   ÚWorldzHello World©rX   r<   ro   r±   Ú	snippet_aÚ	snippet_bÚ	snippet_crZ   r\   r\   r]   r^   ¦  s    z.TestSnippetListViewWithSearchableSnippet.setUpc                 C   s   | j  tdƒ|¡S )Nz4wagtailsnippets_snippetstests_searchablesnippet:listr`   rc   r\   r\   r]   rb   ®  s    þz,TestSnippetListViewWithSearchableSnippet.getc                 C   sl   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ |  |d¡ d S )Nrx   r¢   r¯   úThis field is required.©rb   rq   rr   r}   Úlistr¤   Úobject_listÚassertInrB  rC  rD  rŒ   ©r[   rt   Ú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†   rx   r¢   r¯   rE  rF  rJ  r\   r\   r]   Útest_empty_qÂ  s    z5TestSnippetListViewWithSearchableSnippet.test_empty_qc                 C   s   |   |  ¡ jd t¡ d S r½   )ÚassertIsInstancerb   r¤   r   rZ   r\   r\   r]   Útest_is_searchableÐ  s    z;TestSnippetListViewWithSearchableSnippet.test_is_searchablec                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrL  r?  r¯   ©	rb   rG  r¤   rH  rI  rB  ÚassertNotInrC  rD  rJ  r\   r\   r]   Útest_search_helloÓ  s
    z:TestSnippetListViewWithSearchableSnippet.test_search_helloc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrL  Zworr¯   ©	rb   rG  r¤   rH  rQ  rB  rI  rC  rD  rJ  r\   r\   r]   Útest_search_world_autocompleteÜ  s
    zGTestSnippetListViewWithSearchableSnippet.test_search_world_autocompleteN)
rž   rŸ   r    r^   rb   r   rM  rO  rR  rT  r\   r\   r\   r]   r=  ¥  s   	r=  c                   @   s,   e Zd ZdZdd„ Zi fdd„Zdd„ ZdS )	Ú7TestSnippetListViewWithNonAutocompleteSearchableSnippetúu
    Test that searchable snippets with no AutocompleteFields defined can still be searched using
    full words
    c                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r>  ©rX   r9   ro   r±   rB  rC  rD  rZ   r\   r\   r]   r^   î  s    ÿz=TestSnippetListViewWithNonAutocompleteSearchableSnippet.setUpc                 C   s   | j  tdƒ|¡S )NzCwagtailsnippets_snippetstests_nonautocompletesearchablesnippet:listr`   rc   r\   r\   r]   rb   ø  s    ÿüz;TestSnippetListViewWithNonAutocompleteSearchableSnippet.getc                 C   sx   |   td¡ |  ddi¡}W d   ƒ n1 s00    Y  t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nú'does not specify any AutocompleteFieldsrL  r?  r¯   ©ÚassertWarnsRegexÚRuntimeWarningrb   rG  r¤   rH  rI  rB  rQ  rC  rD  rJ  r\   r\   r]   rR     s    ÿ,zITestSnippetListViewWithNonAutocompleteSearchableSnippet.test_search_helloN©rž   rŸ   r    Ú__doc__r^   rb   rR  r\   r\   r\   r]   rU  æ  s   
rU  c                   @   s¨   e Zd Zdd„ Zi efdd„Zi efdd„Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%S )&ÚTestSnippetCreateViewc                 C   s   |   ¡ | _d S rV   rW   rZ   r\   r\   r]   r^     s    zTestSnippetCreateView.setUpc                 C   s   | j  t|j d¡ƒ|¡S ©Nrn   )ra   rb   r   Úsnippet_viewsetÚget_url_name)r[   rd   Úmodelr\   r\   r]   rb     s    ÿzTestSnippetCreateView.getc                 C   s   | j  t|j d¡ƒ|¡S r_  ©ra   Úpostr   r`  ra  )r[   Ú	post_datarb  r\   r\   r]   rd    s    ÿzTestSnippetCreateView.postc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S re   rk   rs   r\   r\   r]   ru     s    ÿÿ
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 )Nrx   ú$wagtailsnippets/snippets/create.htmlúrole="tablist"Tr§   ú#w-editor-formú	w-unsavedúdata-controller¾   z&beforeunload@window->w-unsaved#confirmzw-unsaved#submitzchange->w-unsaved#checkzkeyup->w-unsaved#checkúdata-actionú!data-w-unsaved-confirmation-valueÚtrueúdata-w-unsaved-force-valueÚfalseÚeditsúdata-w-unsaved-watch-value)rb   rq   rr   r}   rŒ   r~   r   r€   rÏ   rI  rÛ   Úsplitr:  Úissubset©r[   rt   rƒ   Úeditor_formr\   r\   r]   r   '  s2    

ûÿ
þ
þþz!TestSnippetCreateView.test_simplec                 C   sj   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )	Nz3wagtailsnippets_tests_advertwithtabbedinterface:addrx   rf  rg  ú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©ra   rb   r   rq   rr   r}   r   rs   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 ©
NFrf   rg   rh   ú	test textúhttp://www.example.com/©r   r‰   ©re  rj   )rY   rl   rm   rn   r   ro   rb   rp   rd  rq   rr   rs   r\   r\   r]   Ú$test_create_with_limited_permissions[  s    ÿÿ
ÿz:TestSnippetCreateView.test_create_with_limited_permissionsc                 C   sØ   | j ddid}|  |d¡ | j|ddd | j|ddd |  |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 requiredrh  ri  rj  rk  rl  rm  rn  ro  rq  rr  ©rd  r   r~   r   r€   rÏ   rI  rÛ   rb   rs  r:  rt  rq   ru  r\   r\   r]   Útest_create_invalidi  s2    

ûÿ
þ
ýþz)TestSnippetCreateView.test_create_invalidc                 C   sV   | j dddœd}|  |tdƒ¡ tjjdd}|  | ¡ d¡ |  | ¡ j	d¡ d S )NÚtest_advertr}  r~  r  r{   rÁ   r—   ©
rd  ÚassertRedirectsr   rA   ro   Úfilterrq   r…  Úfirstr‰   ©r[   rt   r‘   r\   r\   r]   Útest_create‹  s    ÿz!TestSnippetCreateView.test_createc                 C   s„   ddg}| j ddd |¡dœd}|  |tdƒ¡ tjjdd	}ttj 	d
¡j
|dƒ}|  t|ƒd¡ |  t|j 	d
¡ƒ|¡ d S )NÚhelloÚworldr‰  zhttp://example.com/ú, ©r   r‰   Útagsr  r{   rÁ   r’   ©Zname__inr×   ©rd  Újoinr‹  r   rA   ro   rb   rG  r   Úorder_byrŒ  rq   r™   r”  ©r[   r”  rt   r˜   Zexpected_tagsr\   r\   r]   Útest_create_with_tags•  s    ýÿz+TestSnippetCreateView.test_create_with_tagsc                 C   s`   | j td}|  |d¡ | jtdtddƒid}|  |tdƒ¡ tj  ¡ }|  |j	 
¡ d¡ d S )N©rb  úenctype="multipart/form-data"Úfileútest.txts   Uploaded file©rb  re  ú4wagtailsnippets_snippetstests_fileuploadsnippet:list)rb   r8   r   rd  r   r‹  r   ro   rq   r  Úread©r[   rt   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   Zcreate_revisablerŸ  ú)wagtailsnippets_tests_revisablemodel:listrÁ   r—   r  ©r"  )rd  rL   r‹  r   ro   rŒ  r  rq   r…  Ú	revisionsr   r(   Úfor_instanceÚrevision)r[   rt   r‘   r˜   r¦  r¨  Úlog_entriesr\   r\   r]   Útest_create_with_revision¶  s$    ÿÿÿz/TestSnippetCreateView.test_create_with_revisionc                    s`   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W d   ƒ n1 s60    Y  ˆ  |jd¡ ˆ  |jd¡ d S )Nc                    s    ˆ   | t¡ ˆ  |t¡ tdƒS ©NúOverridden!©rN  r   rq   rA   r   ©r›   rb  rZ   r\   r]   Ú	hook_funcÐ  s    zLTestSnippetCreateView.test_before_create_snippet_hook_get.<locals>.hook_funcÚbefore_create_snippetrx   ó   Overridden!©Úregister_hookrb   rq   rr   r   ©r[   r¯  rt   r\   rZ   r]   Ú#test_before_create_snippet_hook_getÏ  s
    &z9TestSnippetCreateView.test_before_create_snippet_hook_getc                    s~   ‡ fdd„}ˆ   d|¡& dddœ}ˆ j|d}W d   ƒ n1 sD0    Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ ¡ d S )
Nc                    s    ˆ   | t¡ ˆ  |t¡ tdƒS r«  r­  r®  rZ   r\   r]   r¯  Ü  s    zMTestSnippetCreateView.test_before_create_snippet_hook_post.<locals>.hook_funcr°  ú	Hook testr}  r~  r  rx   r±  )	r³  rd  rq   rr   r   r¾   rA   ro   Úexists©r[   r¯  re  rt   r\   rZ   r]   Ú$test_before_create_snippet_hook_postÛ  s    
*z:TestSnippetCreateView.test_before_create_snippet_hook_postc                    s~   ‡ fdd„}ˆ   d|¡& dddœ}ˆ j|d}W d   ƒ n1 sD0    Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ ¡ d S )
Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS )Nr¶  r}  r¬  ©rN  r   rq   r   r‰   r   ©r›   ÚinstancerZ   r\   r]   r¯  ì  s    zGTestSnippetCreateView.test_after_create_snippet_hook.<locals>.hook_funcZafter_create_snippetr¶  r}  r~  r  rx   r±  )	r³  rd  rq   rr   r   r:  rA   ro   r·  r¸  r\   rZ   r]   Útest_after_create_snippet_hookë  s    
*z4TestSnippetCreateView.test_after_create_snippet_hookc                    st   G dd„ dt ƒ‰ ‡ fdd„}|  d|¡  t ¡  |  ¡ }W d   ƒ n1 sN0    Y  t ¡  | j|ddd d S )	Nc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )z_TestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItemÚTestÚtestÚcheckúcustom-classc                 S   s   dS ©NTr\   ©r[   r¤   r\   r\   r]   Úis_shown  s    zhTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownN©rž   rŸ   r    rŠ   r’   rš   Ú	classnamerÄ  r\   r\   r\   r]   ÚTestSnippetActionMenuItemý  s
   rÇ  c                    s
   ˆ ddS ©Nr   ©Úorderr\   r›  ©rÇ  r\   r]   r¯    s    zOTestSnippetCreateView.test_register_snippet_action_menu_item.<locals>.hook_funcÚ!register_snippet_action_menu_itemú±<button type="submit" name="test" value="Test" class="button custom-class"><svg class="icon icon-check icon" aria-hidden="true"><use href="#icon-check"></use></svg>Test</button>Tr§   ©r,   r³  r.   Úcache_clearrb   r   r´  r\   rË  r]   Ú&test_register_snippet_action_menu_itemü  s    	&ýz<TestSnippetCreateView.test_register_snippet_action_menu_itemc                 C   s^   dd„ }|   d|¡  t ¡  |  ¡ }W d   ƒ n1 s:0    Y  t ¡  |  |jd¡ d S )Nc                 S   s   d S rV   r\   r›  r\   r\   r]   r¯    s    zWTestSnippetCreateView.test_register_snippet_action_menu_item_as_none.<locals>.hook_funcrÌ  rx   )r³  r.   rÏ  rb   rq   rr   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 sH0    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   s   dS rÂ  r\   rÃ  r\   r\   r]   rÄ  )  s    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±   rb  r   rÉ  )rN  rG  r   rq   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³  rb   r~   r   r€   rÏ   Zfind_parentrÎ   rq   r   r‚   rÛ   )
r[   r¯  rt   rƒ   Zcustom_actionZdropdown_parentÚiconrÓ  rÔ  Z	save_itemr\   rØ  r]   Ú"test_construct_snippet_action_menu"  s&    	&









z8TestSnippetCreateView.test_construct_snippet_action_menuN)rž   rŸ   r    r^   rA   rb   rd  ru   r   rz  r€  rˆ  r  rš  r£  rª  rµ  r¹  r½  rÐ  rÑ  rÜ  r\   r\   r\   r]   r^    s$   !"
r^  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestSnippetCopyViewc                 C   s:   t jjdd| _tt j d¡| jjfd| _|  	¡ | _
d S )NúTest snippetrÁ   Úcopyrá   )r=   ro   r±   r˜   r   r`  ra  r®   r‰   rX   rY   rZ   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 )NFrf   rg   rh   rj   Úwagtailadmin_home)rY   rl   rp   r   ro   rb   rm   rn   ra   r‰   rq   rr   r‹  r   )r[   Úadmin_permissionrt   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 )Nrx   rf  zinput[name="text"]ÚvaluerÞ  )
ra   rb   r‰   rq   rr   r}   r~   r   r€   rÛ   )r[   rt   rƒ   Z
text_inputr\   r\   r]   Útest_form_is_prefilledi  s    
z*TestSnippetCopyView.test_form_is_prefilledN)rž   rŸ   r    r^   râ  rä  r\   r\   r\   r]   rÝ  T  s   rÝ  c                   @   sD   e Zd ZdgZdd„ Zdd„ Zdd„ Zedd	d
d„ ƒZdd„ Z	dS )ÚTestLocaleSelectorOnCreateú	test.jsonc                 C   s   t jjdd| _|  ¡ | _d S rû   rþ   rZ   r\   r\   r]   r^   x  s    z TestLocaleSelectorOnCreate.setUpc                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S ©Nr  úSwitch localesú
?locale=frú	<a href="ú" lang="fr">©ra   rb   r   r   ©r[   rt   Z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  ré  rè  r  rê  z" lang="en">rì  )r[   rt   Zswitch_to_english_urlr\   r\   r]   Ú)test_locale_selector_with_existing_localeŒ  s    ÿÿÿÿ
þzDTestLocaleSelectorOnCreate.test_locale_selector_with_existing_localeFrù   c                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S rç  ©ra   rb   r   rŒ   rí  r\   r\   r]   r    s    ÿÿÿ
þzNTestLocaleSelectorOnCreate.test_locale_selector_not_present_when_i18n_disabledc                 C   s@   | j  tdƒ¡}|  |d¡ tdƒd }|  |d|› d¡ d S )Nr©   rè  r  ré  rê  rë  rï  rí  r\   r\   r]   r  ®  s    ÿÿ
þzWTestLocaleSelectorOnCreate.test_locale_selector_not_present_on_non_translatable_snippetN)
rž   rŸ   r    Úfixturesr^   r  rî  r   r  r  r\   r\   r\   r]   rå  t  s   
rå  c                   @   st   e Zd ZdZdd„ Zdd„ Zi fdd„Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestCreateDraftStateSnippetú£data-side-panel-toggle="status"[^<]+<svg[^<]+<use[^<]+</use[^<]+</svg[^<]+<div data-side-panel-toggle-counter[^>]+w-bg-critical-200[^>]+>\s*%(num_errors)s\s*</div>c                 C   s   |   ¡ | _d S rV   rW   rZ   r\   r\   r]   r^   Ã  s    z!TestCreateDraftStateSnippet.setUpc                 C   s   | j  tdƒ¡S ©Nú)wagtailsnippets_tests_draftstatemodel:addr`   rZ   r\   r\   r]   rb   Æ  s    zTestCreateDraftStateSnippet.getc                 C   s   | j  tdƒ|¡S ró  )ra   rd  r   ©r[   re  r\   r\   r]   rd  É  s    þz TestCreateDraftStateSnippet.postc                 C   sø   t dƒ}|  ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ |j ¡ }| jd	|d
dd |  	|¡}| 
d¡}|  |¡ | jd|› d|d
dd | jd|d
dd |  |d¡ d}|  ||¡ |  |d¡ d S )Nrô  rx   rf  ú
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   rb   rq   rr   r}   r   r   ÚdecodeÚassertTagInHTMLr~   r€   rÏ   rŒ   )r[   r
  rt   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á   )rd  rG   ro   rb   r‹  r   r®   rq   r   r¾   r  r:  Ú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   sP  t  ¡ }t |¡ z*tƒ }t|ƒ" | jdddœd}W d   ƒ n1 sL0    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 |¡ nt |¡ 0 d S )Nrñ   úaction-publish©r   r  r  rÁ   ró   r   r—   r   r×   Úsenderr¼  )r   Ú	MagicMockr*   Úconnectr   r   rd  rG   ro   rb   r‹  r   rq   r   r:  r  r¾   r  r  r	  rÏ   r
  r  r   Ú
call_countÚ
mock_callsrN  Ú
disconnect)r[   Úmock_handlerr#  rt   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
 |¡ z¦| jdd	d
œd}tjjdd}|  |td|jgd¡ |  |jd¡ |  |j¡ |  |j¡ |  |j¡ |  |j¡ |  |jjd d¡ |  |jd¡ W t
 |¡ nt
 |¡ 0 d S )NFrv   Úadd_draftstatemodelrh   Úchange_draftstatemodelrf   rg   r  r  r  r  rÁ   rô   rá   r   r   )rY   rl   r   ro   rb   rm   rn   rp   r   r  r*   r  rd  rG   r‹  r   r®   rq   r   r¾   r  r:  r  rÏ   r  rÎ   r
  r   r  r  )r[   Úadd_permissionÚedit_permissionrá  r  rt   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 s 0    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
 !|¡ nt
 !|¡ 0 d S )NFrv   r  rh   Úpublish_draftstatemodelrf   rg   rñ   r  r  r  rÁ   ró   r   r—   r   r×   r  r¼  )"rY   rl   r   ro   rb   rm   rn   rp   r   r  r*   r  r   r   rd  rG   r‹  r   rq   r   r:  r  r¾   r  r  r	  rÏ   r
  r  r   r  r  rN  r  )	r[   r  Úpublish_permissionrá  r  r#  rt   r˜   r  r\   r\   r]   Ú$test_publish_with_publish_permissionž  sd    þþþý


þÿ$ÿ
þ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á   Fr'  T©Zapproved_go_live_at__isnull)r   ÚdatetimeÚ	timedeltard  rR   rG   ro   rb   r‹  r   r®   rq   r$  Údater%  ÚassertIsÚexpiredÚstatus_stringr¾   r)   r§  Úexcluder·  ©r[   r$  r%  rt   r˜   r\   r\   r]   Útest_create_scheduledä  s,    ýÿþÿÿz1TestCreateDraftStateSnippet.test_create_scheduledc                 C   s¢   | j dttƒ tjdd ƒttƒ tjdd ƒdœd}|  |jd¡ |  |jd d	d
¡ |  |jd dd
¡ | j	|ddd d}|  
|j ¡ | jd|i ¡ d S ©Nr"  r×   r   r—   r#  r  rx   Ú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©rd  rR   r   r'  r(  rq   rr   ZassertFormErrorr¤   r   ÚassertRegexr   r  ÚSTATUS_TOGGLE_BADGE_REGEX©r[   rt   r3  r\   r\   r]   Ú+test_create_scheduled_go_live_before_expiry  s6    ýÿýýýþzGTestCreateDraftStateSnippet.test_create_scheduled_go_live_before_expiryc                 C   sz   | j dttƒ tjdd ƒdœd}|  |jd¡ |  |jd dd	¡ | j	|d
dd d}|  
|j ¡ | jd|i ¡ d S ©Nr"  r4  r   )r   r%  r  rx   r1  r%  z&Expiry date/time must be in the futurer2  Tr§   r—   r3  r4  r7  r\   r\   r]   Ú(test_create_scheduled_expire_in_the_past)  s*    þÿýýþzDTestCreateDraftStateSnippet.test_create_scheduled_expire_in_the_pastc                 C   sâ   t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ tjj	dd	}|  
|j ¡ | ¡ ¡ |  
|j ¡ | ¡ ¡ |  |jd
¡ |  tj |¡jdd ¡ ¡ |  |j¡ |  |j¡ |  
|jd¡ d S )Nr—   r   r×   r"  r÷  ©r   r  r$  r%  r  ró   rÁ   FTr&  Ú	scheduled)r   r'  r(  rd  rR   r‹  r   rG   ro   rb   rq   r$  r)  r%  r*  r+  r:  r)   r§  r-  r·  r¾   r  r  r,  r.  r\   r\   r]   Ú"test_create_post_publish_scheduledH  s0    üÿ
ÿÿÿz>TestCreateDraftStateSnippet.test_create_post_publish_scheduledN)rž   rŸ   r    r6  r^   rb   rd  r  r  r  r  r  r/  r8  r:  r=  r\   r\   r\   r]   rñ  ½  s   ÿC1BF %rñ  c                   @   s>   e Zd Zdd„ Zi fdd„Zi fdd„Zdd„ Zdd
d„ZdS )ÚBaseTestSnippetEditViewc                 C   s&   | j }t|jƒg}t|j d¡|dS ©NÚeditrá   )Útest_snippetr   r®   r   r`  ra  )r[   r˜   râ   r\   r\   r]   Úget_edit_urll  s    z$BaseTestSnippetEditView.get_edit_urlc                 C   s   | j  |  ¡ |¡S rV   )ra   rb   rB  rc   r\   r\   r]   rb   q  s    zBaseTestSnippetEditView.getc                 C   s   | j  |  ¡ |¡S rV   )ra   rd  rB  rõ  r\   r\   r]   rd  t  s    zBaseTestSnippetEditView.postc                 C   s   |   ¡ | _d S rV   rW   rZ   r\   r\   r]   r^   w  s    zBaseTestSnippetEditView.setUpúEdit schedulec                 C   sv   |j  ¡ }| jd|› d|ddd |  |¡}| d¡}|  |¡ | jd|  ¡ › d|ddd | jd	|ddd d S )
NzI<button type="button" data-a11y-dialog-show="schedule-publishing-dialog">z	</button>r—   Trú  rü  rý  rþ  rÿ  )r   r  r  r~   r€   rÏ   rB  )r[   rt   rŠ   r¨   rƒ   r  r\   r\   r]   ÚassertSchedulingDialogRenderedz  s0    

ü
ÿ
üüz6BaseTestSnippetEditView.assertSchedulingDialogRenderedN)rC  )rž   rŸ   r    rB  rb   rd  r^   rD  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 )$ÚTestSnippetEditViewræ  c                    sN   t ƒ  ¡  tjjdd| _tjjtj 	t¡ddt
ƒ tjdd | jdd d S )	Nr—   ©r®   r  r  rå   )Úweeksr¶   )r!  rŠ   r"  r#  rY   r$  )Úsuperr^   rA   ro   rb   rA  r(   r±   r	   r%  r   r'  r(  rY   rZ   ©Ú	__class__r\   r]   r^   ž  s    

úzTestSnippetEditView.setUpc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S re   rk   rs   r\   r\   r]   ru   ª  s    ÿÿ
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 )Nrx   ú"wagtailsnippets/snippets/edit.htmlrg  rù  z$wagtailsnippets_tests_advert:historyrá   r×   r„  ú"wagtailsnippets_tests_advert:usageu   3Â weeks agorê  z9" aria-describedby="status-sidebar-live">View history</a>T©rû  rh  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  z%/admin/snippets/tests/advert/edit/%d/)rb   r   r  rq   rr   r}   rŒ   r   r   rA  r®   r   r  r~   r€   rÏ   rI  rÛ   rs  r:  rt  r   rY   rB  )	r[   rt   r¨   Úhistory_urlZ	usage_urlrƒ   rv  Ú
url_finderZexpected_urlr\   r\   r]   r   ¶  sX    
ÿÿ
ý

ûÿ
þ
þþ
zTestSnippetEditView.test_simplec                 C   s.   | j  dt| jjƒ› d¡}|  |jd¡ d S )Nz/admin/snippets/tests/foo/edit/ú/é”  )ra   rb   r   rA  r®   rq   rr   rs   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á   rQ  )ra   rb   r   rq   rr   rs   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{  )rY   rl   rm   rn   r   ro   rb   rp   rd  rq   rr   r   rÎ   rB  rA  )r[   rt   rO  r\   r\   r]   Ú"test_edit_with_limited_permissionsÿ  s    ÿÿ
ÿ
z6TestSnippetEditView.test_edit_with_limited_permissionsc                 C   sØ   | j ddid}|  |d¡ | j|ddd | j|ddd |  |j¡}| d	¡}|  |¡ |  d
|j d¡ 	¡ ¡ |  
h d£ |j d¡ 	¡ ¡¡ |  |j d¡d¡ |  |j d¡d¡ |  d|j d¡ 	¡ ¡ d S )Nr  r‚  r  z,The advert could not be saved due to errors.rƒ  r—   r„  r†  rh  ri  rj  rk  rl  rm  rn  ro  rq  rr  r‡  ru  r\   r\   r]   Útest_edit_invalid  s2    

ûÿ
þ
ýþz%TestSnippetEditView.test_edit_invalidc                 C   sV   | j dddœd}|  |tdƒ¡ tjjdd}|  | ¡ d¡ |  | ¡ j	d¡ d S )NÚedited_test_advertúhttp://www.example.com/editedr~  r  r{   rÁ   r—   rŠ  rŽ  r\   r\   r]   Ú	test_edit2  s    þÿzTestSnippetEditView.test_editc                 C   s„   ddg}| j ddd |¡dœd}|  |tdƒ¡ tjjdd	}ttj 	d
¡j
|dƒ}|  t|ƒd¡ |  t|j 	d
¡ƒ|¡ d S )Nr  r‘  rX  rY  r’  r“  r  r{   rÁ   r’   r•  r×   r–  r™  r\   r\   r]   Útest_edit_with_tags?  s    ýÿz'TestSnippetEditView.test_edit_with_tagsc                    s`   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W d   ƒ n1 s60    Y  ˆ  |jd¡ ˆ  |jd¡ d S )Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS ©Nr‰  úhttp://www.example.comr¬  rº  r»  rZ   r\   r]   r¯  R  s    zHTestSnippetEditView.test_before_edit_snippet_hook_get.<locals>.hook_funcÚbefore_edit_snippetrx   r±  r²  r´  r\   rZ   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@0    Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd
¡ d S )Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS r\  rº  r»  rZ   r\   r]   r¯  _  s    zITestSnippetEditView.test_before_edit_snippet_hook_post.<locals>.hook_funcr^  úEdited and runs hookú*http://www.example.com/hook-enabled-editedr~  r  rx   r±  r‰  ©	r³  rd  rq   rr   r   rA   ro   rb   r   r´  r\   rZ   r]   Ú"test_before_edit_snippet_hook_post^  s    þÿ$z6TestSnippetEditView.test_before_edit_snippet_hook_postc                    s~   ‡ fdd„}ˆ   d|¡" ˆ jdddœd}W d   ƒ n1 s@0    Y  ˆ  |jd¡ ˆ  |jd	¡ ˆ  tj ¡ jd¡ d S )
Nc                    s0   ˆ   | t¡ ˆ  |jd¡ ˆ  |jd¡ tdƒS )Nr`  ra  r¬  rº  r»  rZ   r\   r]   r¯  t  s    zCTestSnippetEditView.test_after_edit_snippet_hook.<locals>.hook_funcZafter_edit_snippetr`  ra  r~  r  rx   r±  rb  r´  r\   rZ   r]   Útest_after_edit_snippet_hooks  s    þÿ$z0TestSnippetEditView.test_after_edit_snippet_hookc                    st   G dd„ dt ƒ‰ ‡ fdd„}|  d|¡  t ¡  |  ¡ }W d   ƒ n1 sN0    Y  t ¡  | j|ddd d S )	Nc                   @   s$   e Zd ZdZdZdZdZdd„ ZdS )z]TestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItemr¾  r¿  rÀ  rÁ  c                 S   s   dS rÂ  r\   rÃ  r\   r\   r]   rÄ    s    zfTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.TestSnippetActionMenuItem.is_shownNrÅ  r\   r\   r\   r]   rÇ  ‰  s
   rÇ  c                    s
   ˆ ddS rÈ  r\   r›  rË  r\   r]   r¯  ’  s    zMTestSnippetEditView.test_register_snippet_action_menu_item.<locals>.hook_funcrÌ  rÍ  Tr§   rÎ  r´  r\   rË  r]   rÐ  ˆ  s    	&ýz:TestSnippetEditView.test_register_snippet_action_menu_itemc                    sP   ‡ fdd„}ˆ   d|¡ ˆ  ¡ }W d   ƒ n1 s60    Y  ˆ  |d¡ d S )Nc                    sT   ˆ   | t¡ ˆ   |t¡ ˆ  |d d¡ ˆ  |d ˆ j¡ ˆ  |d t¡ | d= d S )NrÖ  r@  r¼  rb  r   )rN  rG  r   rq   rA  rA   r×  rZ   r\   r]   r¯  £  s    zITestSnippetEditView.test_construct_snippet_action_menu.<locals>.hook_funcrÙ  z<em>Save</em>)r³  rb   rŒ   r´  r\   rZ   r]   rÜ  ¢  s    
&z6TestSnippetEditView.test_construct_snippet_action_menuc              	   C   s´   dd„ }t  ¡  |  d|¡D |  td¡ |  ¡ }W d   ƒ n1 sH0    Y  W d   ƒ n1 sf0    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¯  ³  s    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   rb   r   rA  r`  ra  r   r®   r   )r[   r¯  rt   rä   r\   r\   r]   Ú)test_register_deprecated_delete_menu_item²  s*    ÿþþDþ
ý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Á   rx   ú(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“   Zradior\   r\   r]   r•   Ý  r–   z@TestSnippetEditView.test_previewable_snippet.<locals>.<listcomp>Z375r   údata-device-widthÚchecked)rJ   ro   r±   rA  rb   rq   rr   r~   r   rÜ   r™   r:  Úhas_attr©r[   rt   rƒ   Z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Á   rx   rg  r×   Z412r   ri  zCustom mobile previewrh  rj  Z1280r—   zOriginal desktop)rE   ro   r±   rA  rb   rq   rr   r~   r   rÜ   r™   r¾   rk  r:  rl  r\   r\   r]   Útest_custom_preview_sizesã  s    ÿ
z-TestSnippetEditView.test_custom_preview_sizes)rž   rŸ   r    rð  r^   ru   r   rR  rU  rV  rW  rZ  r[  r_  rc  rd  rÐ  rÜ  rf  rm  rn  Ú__classcell__r\   r\   rI  r]   rE  ›  s$   ="rE  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditTabbedSnippetc                    s"   t ƒ  ¡  tjjdddd| _d S )Nr‰  r]  zModel with tabbed interface)r   r‰   Zsomething_else)rH  r^   rD   ro   r±   rA  rZ   rI  r\   r]   r^   ù  s    
ýzTestEditTabbedSnippet.setUpc                 C   sJ   |   ¡ }|  |jd¡ |  |d¡ |  |d¡ |  |d¡ |  |d¡ d S )Nrx   rK  rg  rw  rx  )rb   rq   rr   r}   r   rs   r\   r\   r]   rz    s    þþz8TestEditTabbedSnippet.test_snippet_with_tabbed_interface)rž   rŸ   r    r^   rz  ro  r\   r\   rI  r]   rp  ø  s   rp  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditFileUploadSnippetc                    s$   t ƒ  ¡  tjjtddƒd| _d S )Ns   Simple text documentrž  )r  )rH  r^   r8   ro   r±   r   rA  rZ   rI  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   )rb   r   rd  r   r‹  r   r8   ro   rq   r  r¡  r¢  r\   r\   r]   Útest_edit_file_upload_multipart  s    
ÿÿþ
z9TestEditFileUploadSnippet.test_edit_file_upload_multipart)rž   rŸ   r    r^   rr  ro  r\   r\   rI  r]   rq    s   rq  c                       sT   e Zd ZdgZdZdZ‡ fdd„Zdd„ Zdd	„ Ze	d
ddd„ ƒZ
dd„ Z‡  ZS )ÚTestLocaleSelectorOnEditræ  rè  z<h3 id="status-sidebar-english"c                    sH   t ƒ  ¡  tjjdd| _tjjdd| _| j | j¡| _	| j	 
¡  d S )NzThis is a testrÁ   rü   rý   )rH  r^   r?   ro   r±   rA  r'   rÿ   Zcopy_for_translationÚtest_snippet_frrp   rZ   rI  r\   r]   r^   0  s
    
zTestLocaleSelectorOnEdit.setUpc                 C   s(   |   ¡ }|  || j¡ |  || j¡ d S rV   )rb   r   ÚLOCALE_SELECTOR_LABELÚLOCALE_INDICATOR_HTMLrs   r\   r\   r]   r  7  s    z-TestLocaleSelectorOnEdit.test_locale_selectorc                 C   s>   | j  ¡  |  ¡ }|  || j¡ |  || j¡ |  |d¡ d S )NzNo other translations)rt  r  rb   rŒ   ru  r   rv  rs   r\   r\   r]   Ú(test_locale_selector_without_translation<  s
    
zATestLocaleSelectorOnEdit.test_locale_selector_without_translationFrù   c                 C   s(   |   ¡ }|  || j¡ |  || j¡ d S rV   )rb   rŒ   ru  rv  rs   r\   r\   r]   r  E  s    zLTestLocaleSelectorOnEdit.test_locale_selector_not_present_when_i18n_disabledc                 C   s8   t jjdd| _|  ¡ }|  || j¡ |  || j¡ d S ©Nr—   rF  )rA   ro   rb   rA  rŒ   ru  rv  rs   r\   r\   r]   r  K  s    zUTestLocaleSelectorOnEdit.test_locale_selector_not_present_on_non_translatable_snippet)rž   rŸ   r    rð  ru  rv  r^   r  rw  r   r  r  ro  r\   r\   rI  r]   rs  )  s   	
rs  c                       s$   e Zd Z‡ fdd„Zdd„ Z‡  ZS )ÚTestEditRevisionSnippetc                    s   t ƒ  ¡  tjjdd| _d S )Nr  rÁ   )rH  r^   rL   ro   r±   rA  rZ   rI  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¥  )rd  r‹  r   rL   ro   rŒ  rq   r…  rA  r¦  r  r   r(   r§  r¨  )r[   rt   r‘   r¦  r¨  r©  r\   r\   r]   Útest_edit_snippet_with_revisionW  s    ÿÿz7TestEditRevisionSnippet.test_edit_snippet_with_revision)rž   rŸ   r    r^   r{  ro  r\   r\   rI  r]   ry  R  s   ry  c                       sØ   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Zdd	„ Zd
d„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zd d!„ Zd"d#„ Zd$d%„ Zd&d'„ Zd(d)„ Zd*d+„ Zd,d-„ Zd.d/„ Zd0d1„ Z‡  ZS )2ÚTestEditDraftStateSnippetrò  c                    s"   t ƒ  ¡  tjjdddd| _d S )Núcustom/1r  F©Ú	custom_idr   r  )rH  r^   rF   ro   r±   rA  rZ   rI  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 )Nrx   rK  rö  r÷  rø  rù  zSet schedule)rŠ   zRChoose when this draft state custom primary key model should go live and/or expireú?wagtailsnippets_tests_draftstatecustomprimarykeymodel:unpublishrá   re  ú">r   )rb   rq   rr   r}   r   rD  r   r   rA  r®   rŒ   ©r[   rt   r  r\   r\   r]   r  {  s0    þþþ
þz"TestEditDraftStateSnippet.test_getc                 C   sÌ   | j ddid}| j ¡  tj | j¡}| jj}|  ||  ¡ ¡ |  	| jj
d¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  	| ¡ d¡ |  	|| ¡ ¡ |  	|jd d¡ d S )Nr   úDraft-enabled Barr  r—   )rd  rA  Úrefresh_from_dbr)   ro   r§  r  r‹  rB  rq   r   r¾   r  r:  r  rÎ   r  r	  r
  r…  r  r   )r[   rt   r¦  r  r\   r\   r]   r  ¢  s    
z)TestEditDraftStateSnippet.test_save_draftc           	   	   C   sÄ  t  ¡ }t |¡ zžtƒ }t|ƒ" | jdddœd}W d   ƒ n1 sL0    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 %|¡ nt %|¡ 0 d S )NúDraft-enabled Bar, Publishedr  r  r  úwagtail.publish©r!  r"  r$  ú:wagtailsnippets_tests_draftstatecustomprimarykeymodel:listr—   r   r   r×   r  r¼  )&r   r  r*   r  r   r   rd  rA  r„  r)   ro   r§  r  r(   rŒ  r	   r%  rF   r®   r  r‹  r   rq   r   r:  r  r¾   r  r  r	  r
  r…  r   r#  r  r  rN  r  )	r[   r  r#  rt   r¦  r  r©  Ú	log_entryr  r\   r\   r]   r  »  s^    

þÿ$
ÿûþþÿz&TestEditDraftStateSnippet.test_publishc              	   C   s  d| j _tjjddd}tjjddd}| j j ||¡ | j  ¡  t 	¡ }t
 |¡ z¦| jddd	œd
}| j ¡  |  ||  ¡ ¡ |  | jjd¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jj¡ |  | jjjd d¡ |  |jd¡ W t
 |¡ nt
 |¡ 0 d S )NFrv   Ú&change_draftstatecustomprimarykeymodelrh   rf   rg   zEdited draft Foor  r  r  r   r   )rY   rl   r   ro   rb   rm   rn   rp   r   r  r*   r  rd  rA  r„  r‹  rB  rq   r   r¾   r  r:  r  rÏ   r  rÎ   r
  r   r  r  )r[   r  rá  r  rt   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 s 0    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
 ,|¡ nt
 ,|¡ 0 d S )NFrv   rŠ  rh   Ú'publish_draftstatecustomprimarykeymodelrf   rg   r…  r  r  r  r†  r‡  rˆ  r—   r   r   r×   r  r¼  )-rY   rl   r   ro   rb   rm   rn   rp   r   r  r*   r  r   r   rd  rA  r„  r)   r§  r  r(   rŒ  r	   r%  rF   r®   r  r‹  r   rq   r   r:  r  r¾   r  r  r	  r
  r…  r   r#  r  r  rN  r  )r[   r  r  rá  r  r#  rt   r¦  r  r©  r‰  r  r\   r\   r]   r  4	  s‚    þþÿý


þÿ$
ÿûþþÿz>TestEditDraftStateSnippet.test_publish_with_publish_permissionc                 C   sH  t ƒ }t|ƒ" d| j_| j ¡  W d   ƒ n1 s60    Y  t ƒ }t|ƒ" | jdddœd}W d   ƒ n1 sv0    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 Publishedr  r  r  r®   rˆ  r×   r   )r   r   rA  r   rõ   rd  r„  r)   ro   r§  r˜  r  r‹  r   rq   r:  r  r¾   r  r  r	  r
  r…  Úlastr   )r[   Úsave_timestampÚpublish_timestamprt   r¦  r  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:0    Y  t ƒ }t|ƒ  | jddid}W d   ƒ n1 sx0    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   rA  r   rõ   rö   rd  r„  r)   ro   r§  r˜  r  r‹  rB  rq   r:  r  r  r  r	  r
  r  r…  rŒ  r   )r[   rŽ  r  rt   r¦  r  r\   r\   r]   Útest_publish_then_save_draft¹	  s2    
,
ÿ$
þz6TestEditDraftStateSnippet.test_publish_then_save_draftc                 C   s\  t ƒ }t|ƒ& d| j_| j ¡  ¡  W d   ƒ n1 s:0    Y  t ƒ tjdd }t|ƒ" | jdddœd}W d   ƒ n1 s†0    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 Twicer  r  r  r®   rˆ  r×   r   )r   r   rA  r   rõ   rö   r'  r(  rd  r„  r)   ro   r§  r˜  r  r‹  r   rq   r:  r  r¾   r  r  r	  r
  rŒ  r…  r   )r[   Zfirst_timestampZsecond_timestamprt   r¦  r  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  rx   rK  ú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á   re  r  r   )rd  rb   rq   rr   r}   rŒ   r   r   r   rA  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…  r  r  r  rx   rK  r’  Tr§   r“  r€  rá   re  r  r   )rd  rb   rq   rr   r}   r   rŒ   r   r   rA  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…  r  r  r  r   rò   rx   rK  r’  Tr§   r“  r€  rá   re  r  r   z#header-titlezsvg userz   z#icon-snippetz<<textarea name="text">Draft-enabled Bar, In Draft</textarea>rM  )rd  rb   r   r  rq   rr   r}   r   r   r   rA  r®   r~   r€   rÏ   r   r‚   r  )r[   rt   r¨   r  rƒ   Úh2rÛ  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&  ©Zcontent__go_live_at__startswith©Z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> )rA  rõ   rö   r   r'  r(  rd  rR   r‹  r   r   r®   r„  r:  r  r¾   r)   ro   r§  r-  r·  rŒ  Ústrr)  rb   r   rT   rD  ©r[   r$  r%  rt   r\   r\   r]   Útest_edit_post_scheduledŒ
  sj    ýÿ	þþ
ÿÿ
þÿ
þÿ	üüüz2TestEditDraftStateSnippet.test_edit_post_scheduledc                 C   s¢   | j dttƒ tjdd ƒttƒ tjdd ƒdœd}|  |jd¡ |  |jd d	d
¡ |  |jd dd
¡ | j	|ddd d}|  
|j ¡ | jd|i ¡ d S r0  r4  r7  r\   r\   r]   Ú)test_edit_scheduled_go_live_before_expiryØ
  s6    ýÿýýýþzCTestEditDraftStateSnippet.test_edit_scheduled_go_live_before_expiryc                 C   sz   | j dttƒ tjdd ƒdœd}|  |jd¡ |  |jd dd	¡ | j	|d
dd d}|  
|j ¡ | jd|i ¡ d S r9  r4  r7  r\   r\   r]   Ú&test_edit_scheduled_expire_in_the_pastý
  s*    þÿýýþz@TestEditDraftStateSnippet.test_edit_scheduled_expire_in_the_pastc                 C   s.  t ƒ tjdd | j_t ƒ tjdd | j_| j ¡ }t ƒ tjdd }t ƒ tjdd }| jdt|ƒt|ƒdœd}|  	|j
d	¡ | j ¡  |  | jj¡ |  	| jj|j¡ | j|d
dd | j|ddd | j|ddd |j ¡ }| jd|ddd | j|ddd d}|  |j ¡ | jd|i ¡ d S )Nr—   r   r×   rÃ   iìÿÿÿzSome edited contentr#  r  rx   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ú  r2  r3  )r   r'  r(  rA  r$  r%  rõ   rd  rR   rq   rr   r„  r¾   r  Zlatest_revision_idr®   rŒ   r   r  r  r   r5  r6  )r[   r  r$  r%  rt   r¨   r3  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!r  )r   r  r  r  éýÿÿÿN)rA  rõ   rö   r„  r  r   r'  r(  rd  rR   ÚassertNotEqualr!  rq   )r[   Zinitial_deltar  Z	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"  r÷  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(  rd  rR   r‹  r   rA  r„  r¾   r  r:  r)   ro   r§  r-  r·  r  rq   r,  rb   rŒ   r   rT   rD  r¡  r\   r\   r]   Ú,test_edit_post_publish_scheduled_unpublishedy  sX    üÿ
þ
ÿÿþýüüzFTestEditDraftStateSnippet.test_edit_post_publish_scheduled_unpublishedc                 C   s  t ƒ tjdd }t ƒ tjdd }| jddt|ƒt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd	¡ |  tj | j¡jd
d ¡ ¡ | jddddœd}|  |tdƒ¡ | j ¡  |  | jj
¡ |  	tj | j¡jd
d ¡ ¡ |  ¡ }|  |¡ d S )Nr—   r   r×   r"  r÷  r;  r  rˆ  r<  Tr&  r†   ©r   r  r$  )r   r'  r(  rd  rR   r‹  r   rA  r„  r¾   r  rq   r,  r:  r)   ro   r§  r-  r·  rb   rD  r¡  r\   r\   r]   Ú;test_edit_post_publish_now_an_already_scheduled_unpublished¶  sP    üÿ
þ
ÿÿýÿ	þ
ÿÿzUTestEditDraftStateSnippet.test_edit_post_publish_now_an_already_scheduled_unpublishedc                 C   sZ  | j  ¡  ¡  | j  ¡  | j j}tƒ tjdd }tƒ tjdd }| jddt	|ƒt	|ƒdœd}|  
|tdƒ¡ tjj| j jd	| _ |  | j j¡ |  | j jd
¡ |  tj | j ¡jdd ¡ ¡ | j| j jdd |  | j  ¡ |d¡ |  | j jdd¡ |  ¡ }| j|ddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nr—   r   r×   r§  r÷  r;  r  rˆ  rF  úlive + scheduledTr&  r«  r¬  zcAn object scheduled for future publishing should have a new revision, that is not the live revisionr  zNA live object with a scheduled revision should still have the original contentrœ  r§   rž  r  rŸ  ) rA  rõ   rö   r„  r
  r   r'  r(  rd  rR   r‹  r   rF   ro   rb   r®   r:  r  rq   r,  r)   r§  r-  r·  r  r©  Úget_latest_revisionr   rŒ   r   rT   rD  )r[   r
  r$  r%  rt   r\   r\   r]   Ú*test_edit_post_publish_scheduled_publishedõ  sv    
üÿ
þÿÿÿþýýýüüzDTestEditDraftStateSnippet.test_edit_post_publish_scheduled_publishedc                 C   s  | j  ¡  ¡  tƒ tjdd }tƒ tjdd }| jddt|ƒt|ƒdœd}|  |t	dƒ¡ | j  
¡  |  | j j¡ |  tj | j ¡jd	d
 ¡ ¡ |  | j jdd¡ | jddddœd}|  |t	dƒ¡ | j  
¡  |  | j j¡ |  tj | j ¡jd	d
 ¡ ¡ |  | j jd¡ d S )Nr—   r   r×   r"  r÷  r;  r  rˆ  Tr&  r  zIA live object with scheduled revisions should still have original contentzI've been updated!r†   r¯  )rA  rõ   rö   r   r'  r(  rd  rR   r‹  r   r„  r:  r  r)   ro   r§  r-  r·  rq   r   r¾   r¡  r\   r\   r]   Ú9test_edit_post_publish_now_an_already_scheduled_publishedE  sX    üÿ
þ
ÿÿýýÿ	þ
ÿÿzSTestEditDraftStateSnippet.test_edit_post_publish_now_an_already_scheduled_publishedc                 C   sÞ  t ƒ tjdd }| jddt|ƒdœd}|  |tdƒ¡ | j ¡  |  	| jj
¡ |  | jjd¡ |  | jj|jd	d	d
¡ t ƒ tjdd }t ƒ tjdd }| jdt|ƒt|ƒdœd}|  |tdt| jjƒgd¡ | j ¡  |  	| jj
¡ |  tj | j¡jdd ¡ ¡ |  	tj | j¡jt| ¡ ƒd ¡ ¡ |  	tj | j¡jt| ¡ ƒd ¡ ¡ |  ¡ }| j|dt|ƒ› ddd | j|dddd | j|dt|ƒ› ddd | j|dt|ƒ› ddd |  |¡ d S )Nr˜  r   r"  r÷  ©r   r  r%  r  rˆ  r  r   ©ÚsecondÚmicrosecondrÃ   é   r#  r™  rá   Tr&  rš  r›  rŸ  r—   r  rœ  rž  )r   r'  r(  rd  rR   r‹  r   rA  r„  r:  r  rq   r,  r%  Úreplacer   r®   r¾   r)   ro   r§  r-  r·  rŒ  r   r)  rb   r   rT   rD  ©r[   r%  rt   r$  Z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"  r÷  rµ  r  rˆ  r  r   r¶  rÃ   r¹  r;  rF  r±  Tr&  rŸ  r§   rœ  rž  r—   r  )r   r'  r(  rd  rR   r‹  r   rA  r„  r:  r  rq   r,  r%  rº  rF   ro   rb   r®   r)   r§  r-  r·  rŒ   rT   r   rD  r»  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"  r÷  rµ  r  rˆ  r  r   r¶  é   é   r;  rF  r±  Tr&  rŸ  r—   r  rœ  r§   rž  )r   r'  r(  rd  rR   r‹  r   rA  r„  r:  r  rq   r,  r%  rº  rF   ro   rb   r®   r)   r§  r-  r·  r   rT   rŒ   rD  r»  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    r6  r^   r  r  r  r  r  r  r  r‘  r”  r•  r—  r¢  r£  r¤  r¦  rª  r®  r°  r³  r´  r¼  r½  rÀ  ro  r\   r\   rI  r]   r|  o  s4   ÿ'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 )Nr  Fr  r—   r   r§  )rH  r^   rG   ro   r±   rA  r   r'  r(  r$  r   rõ   r  rö   r„  rZ   rI  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 )NFrv   r  rh   r  rf   rg   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>©rY   rl   r   ro   rb   rm   rn   rp   rŒ   r   rT   r$  r   r  r  r   rA  r®   r  )r[   r  r  rá  rt   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 )NFrv   r  rh   rf   rg   rœ  Tr§   rž  r—   r  rÂ  r„  rÃ  rÄ  r¥  r   rú  rÅ  rá   rÆ  rÇ  rÈ  )r[   r  rá  rt   r¨   rÉ  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Â  rÃ  rÄ  Tr  r¥  r   rú  rÅ  rá   rÆ  rÇ  )rd  rR   r$  rA  r„  rq   r  r   r   rŒ   r  r  r   r®   )r[   rt   r¨   rÉ  r\   r\   r]   Ú'test_edit_post_scheduled_for_publishingR  sX    þÿ
þýþü
üþ
üzCTestScheduledForPublishLock.test_edit_post_scheduled_for_publishing)rž   rŸ   r    r^   rÊ  rË  rÌ  ro  r\   r\   rI  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}  r  Fr~  r—   r   r§  zJwagtailsnippets_tests_draftstatecustomprimarykeymodel:revisions_unschedulerá   )rX   rY   rF   ro   r±   rA  r   r'  r(  r$  r   rõ   r  rö   r„  r   r   r®   rÉ  rZ   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}|rB| tjjddd¡ | j jj|Ž  | j  ¡  d S )NFrv   rŠ  rh   rf   rg   r‹  )	rY   rl   r   ro   rb   Úappendrm   rn   rp   )r[   Zset_publish_permissionZpermissionsr\   r\   r]   Úset_permissions¢  s$    þÿû
þÿz%TestSnippetUnschedule.set_permissionsc                 C   s6   |   d¡ | j | j¡}|  |jd¡ |  |d¡ d S )NTrx   z5wagtailadmin/shared/revisions/confirm_unschedule.html)rÏ  ra   rb   rÉ  rq   rr   r}   rs   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à  )rÏ  ra   rb   rÉ  r‹  r   rs   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&  )rÏ  ra   rd  rÉ  r‹  r   r   rA  r®   r„  r  rÎ   Úapproved_go_live_atr¾   r)   ro   r§  r-  r·  rs   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&  )rÏ  ra   rd  rÉ  r‹  r   rA  r„  r  rÏ   rÒ  r:  r)   ro   r§  r-  r·  rs   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&  )rÏ  r   r   rA  r®   ra   rd  rÉ  r‹  r„  r  rÎ   rÒ  r¾   r)   ro   r§  r-  r·  )r[   r÷   rt   r\   r\   r]   Ú'test_post_unschedule_view_with_next_url  s    
þ

ÿÿz=TestSnippetUnschedule.test_post_unschedule_view_with_next_urlN)
rž   rŸ   r    r^   rÏ  rÐ  rÑ  rÓ  rÔ  rÕ  r\   r\   r\   r]   rÍ  ‘  s   	rÍ  c                   @   sT   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )ÚTestSnippetUnpublishc                 C   s8   |   ¡ | _tjjddd| _tdt| jjƒfd| _	d S )Nr}  zto be unpublished)r  r   r€  rá   )
rX   rY   rF   ro   r±   r˜   r   r   r®   r  rZ   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
        rx   z+wagtailadmin/generic/confirm_unpublish.htmlN)ra   rb   r  rq   rr   r}   rs   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á   rQ  N)ra   rb   r   r   rq   rr   rs   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
        Frf   rg   rh   rj   N)rY   rl   rm   rn   r   ro   rb   rp   ra   r  rq   rr   rs   r\   r\   r]   Ú'test_unpublish_view_get_bad_permissionsB  s    ÿÿ
z<TestSnippetUnpublish.test_unpublish_view_get_bad_permissionsc              	   C   s¤   t  ¡ }t |¡ z€d| 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 |¡ nt |¡ 0 dS )	rÙ  Frf   rg   rh   rà  rF  r   N)r   r  r+   r  rY   rl   rm   rn   r   ro   rb   rp   ra   rd  r  r‹  r   r:  rF   r˜   r®   r  rq   r  r  )r[   r  rt   r\   r\   r]   Ú(test_unpublish_view_post_bad_permissionsU  s"    
ÿÿ
ÿz=TestSnippetUnpublish.test_unpublish_view_post_bad_permissionsc              	   C   s  t  ¡ }t |¡ zèd| j_tjjddd}tjjddd}tjjddd}| jj	 
|||¡ | j ¡  | j | j¡}|  |tdƒ¡ |  tjj| jjd	j¡ |  |jd
¡ |jd d }|  |d t¡ |  |d | j¡ |  |d t¡ W t |¡ nt |¡ 0 dS )z³
        This posts to the unpublish view and checks that the object was unpublished,
        using a specific publish permission instead of relying on the superuser flag
        Frv   rŠ  rh   r‹  rf   rg   rˆ  rF  r—   r   r×   r  r¼  N)r   r  r+   r  rY   rl   r   ro   rb   rm   rn   rp   ra   rd  r  r‹  r   r¾   rF   r˜   r®   r  rq   r  r  rN  r  )r[   r  r  r  rá  rt   r  r\   r\   r]   Ú0test_unpublish_view_post_with_publish_permissionw  sJ    
þþÿý
þÿÿzETestSnippetUnpublish.test_unpublish_view_post_with_publish_permissionc              	   C   s¸   t  ¡ }t |¡ z”| j | j¡}|  |tdƒ¡ |  	t
jj| jjdj¡ |  |jd¡ |jd d }|  |d t
¡ |  |d | j¡ |  |d t
¡ W t |¡ nt |¡ 0 dS )	z]
        This posts to the unpublish view and checks that the object was unpublished
        rˆ  rF  r—   r   r×   r  r¼  N)r   r  r+   r  ra   rd  r  r‹  r   r¾   rF   ro   rb   r˜   r®   r  rq   r  r  rN  r  )r[   r  rt   r  r\   r\   r]   Útest_unpublish_view_post¯  s&    
þÿÿz-TestSnippetUnpublish.test_unpublish_view_postc                    s†   ‡ fdd„}ˆ   d|¡$ i }ˆ j ˆ j|¡}W d   ƒ n1 sB0    Y  ˆ  |jd¡ ˆ  |jd¡ ˆ j ¡  ˆ  ˆ jj	d¡ d S )Nc                    s&   ˆ   | t¡ ˆ  |jˆ jj¡ tdƒS r«  ©rN  r   rq   r®   r˜   r   ©r›   r˜   rZ   r\   r]   r¯  Ó  s    zATestSnippetUnpublish.test_after_unpublish_hook.<locals>.hook_funcZafter_unpublishrx   r±  r'  ©
r³  ra   rd  r  rq   rr   r   r˜   r„  r,  r¸  r\   rZ   r]   Útest_after_unpublish_hookÒ  s    .
z.TestSnippetUnpublish.test_after_unpublish_hookc                    s†   ‡ fdd„}ˆ   d|¡$ i }ˆ j ˆ j|¡}W d   ƒ n1 sB0    Y  ˆ  |jd¡ ˆ  |jd¡ ˆ j ¡  ˆ  ˆ jj	d¡ d S )Nc                    s&   ˆ   | t¡ ˆ  |jˆ jj¡ tdƒS r«  rÞ  rß  rZ   r\   r]   r¯  ä  s    z=TestSnippetUnpublish.test_before_unpublish.<locals>.hook_funcZbefore_unpublishrx   r±  r  rà  r¸  r\   rZ   r]   Útest_before_unpublishã  s    .
z*TestSnippetUnpublish.test_before_unpublishN)rž   rŸ   r    r^   r×  rØ  rÚ  rÛ  rÜ  rÝ  rá  râ  r\   r\   r\   r]   rÖ    s   
"8#rÖ  c                   @   s|   e Zd ZdgZdd„ Zdd„ Zdd„ Zedd	d
d„ ƒZdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZdS )ÚTestSnippetDeleteræ  c                 C   s   t jjdd| _|  ¡ | _d S rx  )rA   ro   rb   rA  rX   rY   rZ   r\   r\   r]   r^   ù  s    zTestSnippetDelete.setUpc                 C   s\   d| j _| j j tjjddd¡ | j  ¡  | j t	dt
| jjƒgd¡}|  |jd¡ d S ©NFrf   rg   rh   rà   rá   rj   )rY   rl   rm   rn   r   ro   rb   rp   ra   r   r   rA  r®   rq   rr   rs   r\   r\   r]   Ú(test_delete_get_with_limited_permissionsý  s    ÿÿ
þÿz:TestSnippetDelete.test_delete_get_with_limited_permissionsc                 C   sL   t dt| jjƒgd}| j |¡}|  |jd¡ |  |d¡ |  ||¡ d S ©Nrà   rá   rx   úYes, delete©	r   r   rA  r®   ra   rb   rq   rr   r   ©r[   rä   rt   r\   r\   r]   Útest_delete_get  s    þz!TestSnippetDelete.test_delete_getTrù   c                 C   sL   t dt| jjƒgd}| j |¡}|  |jd¡ |  |d¡ |  ||¡ d S ræ  rè  ré  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 s40    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   Zon_delete_protectrà   rá   rx   z!This advert is referenced 1 time.zDOne or more references to this advert prevent it from being deleted.rL  ú?describe_on_delete=1rç  )ÚcaptureOnCommitCallbacksrO   ro   r±   rA  r   r   r®   ra   rb   rq   rr   r   rŒ   ré  r\   r\   r]   Ú(test_delete_get_with_protected_reference#  s4    ÿ$þþþüþz:TestSnippetDelete.test_delete_get_with_protected_referencec                 C   s\   d| j _| j j tjjddd¡ | j  ¡  | j 	t
dt| jjƒgd¡}|  |jd¡ d S rä  )rY   rl   rm   rn   r   ro   rb   rp   ra   rd  r   r   rA  r®   rq   rr   rs   r\   r\   r]   Ú)test_delete_post_with_limited_permissions>  s    ÿÿ
þÿz;TestSnippetDelete.test_delete_post_with_limited_permissionsc                 C   sL   | j  tdt| jjƒgd¡}|  |tdƒ¡ |  tj	j
dd ¡ d¡ d S )Nrà   rá   r{   r‰  rÁ   r   )ra   rd  r   r   rA  r®   r‹  rq   rA   ro   rŒ  r…  rs   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 s40    Y  tdt| jjƒgd}| j 	|¡}|  
|jd¡ |  |tdƒ¡ |  tjj| jjd	 ¡ ¡ d S )
NTrì  rî  rï  rà   rá   rj   rà  rF  )rñ  rO   ro   r±   rA  r   r   r®   ra   rd  rq   rr   r‹  r:  rA   rŒ  r·  ré  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 )
NZrebuild_references_index)Ústdoutrà   rá   rx   ú(wagtailadmin/generic/confirm_delete.htmlz!This advert is referenced 2 timesrL  rð  )r   r   Zcall_commandra   rb   r   r   rA  r®   rq   rr   r}   r   )r[   Úoutputrt   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 sZ0    Y  ˆ  	|j
d	¡ ˆ  	|jd
¡ d S )Nr}  ú	Test hook©r‰   r   c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS ©Nz<Advert: Test hook>)Z	transformr¬  ©rN  r   ZassertQuerySetEqualÚreprr   ©r›   Z	instancesrZ   r\   r]   r¯  ‹  s    zHTestSnippetDelete.test_before_delete_snippet_hook_get.<locals>.hook_funcÚbefore_delete_snippetrà   rá   rx   r±  )rA   ro   r±   r³  ra   rb   r   r   r®   rq   rr   r   ©r[   rÈ   r¯  rt   r\   rZ   r]   Ú#test_before_delete_snippet_hook_get…  s    þÿ"z5TestSnippetDelete.test_before_delete_snippet_hook_getc                    sž   t jjddd}‡ fdd„}ˆ  d|¡, ˆ j tdt|jƒgd¡}W d   ƒ n1 sZ0    Y  ˆ  	|j
d	¡ ˆ  	|jd
¡ ˆ  t jj|jd ¡ ¡ d S )Nr}  rú  rû  c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS rü  rý  rÿ  rZ   r\   r]   r¯  ž  s    zITestSnippetDelete.test_before_delete_snippet_hook_post.<locals>.hook_funcr   rà   rá   rx   r±  rF  )rA   ro   r±   r³  ra   rd  r   r   r®   rq   rr   r   r:  rŒ  r·  r  r\   rZ   r]   Ú$test_before_delete_snippet_hook_post˜  s    þ
þÿ"z6TestSnippetDelete.test_before_delete_snippet_hook_postc                    sž   t jjddd}‡ fdd„}ˆ  d|¡, ˆ j tdt|jƒgd¡}W d   ƒ n1 sZ0    Y  ˆ  	|j
d	¡ ˆ  	|jd
¡ ˆ  t jj|jd ¡ ¡ d S )Nr}  rú  rû  c                    s&   ˆ   | t¡ ˆ j|dgtd tdƒS rü  rý  rÿ  rZ   r\   r]   r¯  ·  s    zCTestSnippetDelete.test_after_delete_snippet_hook.<locals>.hook_funcZafter_delete_snippetrà   rá   rx   r±  rF  )rA   ro   r±   r³  ra   rd  r   r   r®   rq   rr   r   r¾   rŒ  r·  r  r\   rZ   r]   Útest_after_delete_snippet_hook±  s    þ
þÿ"z0TestSnippetDelete.test_after_delete_snippet_hookN)rž   rŸ   r    rð  r^   rå  rê  r   rë  rò  ró  rô  rõ  rù  r  r  r  r\   r\   r\   r]   rã  ö  s   


rã  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestSnippetChooserPanelræ  c                 C   s   t ƒ  d¡| _tƒ }|| j_t}d| _|jjt	jj| jdd}t
|ƒ| _| j ¡ | _| j|d}| jj||| jd}dd„ |jD ƒd	 | _d S )
NrP  úTest advert textrÁ   )rÈ   ©r¼  ©r¼  r1  r›   c                 S   s    g | ]}t |d dƒdkr|‘qS ©Ú
field_nameNrÈ   ©Úgetattr©r“   Zpanelr\   r\   r]   r•   à  s   þz1TestSnippetChooserPanel.setUp.<locals>.<listcomp>r   )r   rb   r›   r   rY   rM   Úadvert_textro   r±   rA   r#   Úedit_handlerÚget_form_classÚ
form_classÚget_bound_panelÚchildrenÚsnippet_chooser_panel©r[   rY   rb  rA  r1  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_htmlrI  r  ©r[   Ú
field_htmlr\   r\   r]   Útest_render_htmlæ  s
    
z(TestSnippetChooserPanel.test_render_htmlc                 C   s^   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ d S )Nr  r  c                 S   s    g | ]}t |d dƒdkr|‘qS r	  r  r  r\   r\   r]   r•   ô  s   þzFTestSnippetChooserPanel.test_render_as_empty_field.<locals>.<listcomp>r   r  r  )rM   r  r  r  r›   r  r  rI  ©r[   rA  r1  r  r  r  r\   r\   r]   Útest_render_as_empty_fieldí  s    ÿþüz2TestSnippetChooserPanel.test_render_as_empty_fieldc                 C   s   |   d| j ¡ ¡ d S )NzVnew SnippetChooser("id_advert", {"modalUrl": "/admin/snippets/choose/tests/advert/"});©rI  r  r  rZ   r\   r\   r]   Útest_render_jsþ  s    þz&TestSnippetChooserPanel.test_render_jsc                 C   sL   t tdƒgƒ t¡}| ¡ }|ƒ }|jd j}|  |t¡ |  	|j
t¡ d S )NrÈ   )r"   r!   Úbind_to_modelrM   r  ÚfieldsÚwidgetrN  r2   rq   rb  rA   ©r[   r  r  r1  r#  r\   r\   r]   Útest_target_model_autodetected  s    ÿz6TestSnippetChooserPanel.test_target_model_autodetectedN©	rž   rŸ   r    rð  r^   r  r  r   r%  r\   r\   r\   r]   r  Ë  s   r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetRegisteringc                 C   s   |   tt¡ d S rV   )rI  r;   r0   rZ   r\   r\   r]   Útest_register_function  s    z-TestSnippetRegistering.test_register_functionc                 C   s   |   t¡ |  tt¡ d S rV   )rÏ   r:   rI  r0   rZ   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                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetOrderingc                 C   s   t tƒ t tƒ d S rV   )r1   r@   r6   rZ   r\   r\   r]   r^     s    zTestSnippetOrdering.setUpc                 C   s   |   t t¡t t¡¡ d S rV   )Z
assertLessr0   Úindexr6   r@   rZ   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 )ÚTestSnippetHistoryræ  c                 C   s   | j  |  |d¡|¡S )NÚhistory)ra   rb   Úget_url)r[   r˜   rd   r\   r\   r]   rb   *  s    zTestSnippetHistory.getNc                 C   s(   |d u rt |jƒg}t|j |¡|dS ©Nrá   )r   r®   r   r`  ra  )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—   rF  r  r  iå  é	   é   rÃ   r   r¶   r   zTest Advert Updatedrz  éæ  é   é   é"   ZFoorÁ   ©rY   r˜  é   T©r!  rŠ   r"  r#  r$  r¨  Zcontent_changedÚBar©rY   Ú
log_action)rX   rY   rA   ro   rb   Únon_revisable_snippetr(   r±   r	   r%  r   r'  rH   Úrevisable_snippetrõ   Úinitial_revisionr®   r   Úedit_revisionrZ   r\   r\   r]   r^   2  s>    

û
û
ù	ÿzTestSnippetHistory.setUpc                 C   s:   |   | j¡}|  |jd¡ | j|ddd |  |d¡ d S )Nrx   z<td>Created</td>Tr§   z9data-w-tooltip-content-value="Sept. 30, 2021, 10:01 a.m.")rb   r>  rq   rr   r   rs   r\   r\   r]   r   S  s    þzTestSnippetHistory.test_simplec           	   	   C   sö   | j | jg}|D ]à}| j|dÀ |  |ddi¡}|  |jd¡ | j|ddd |  |d¡ |  |j	¡}| 
d	¡}| 
d
¡}|  |jdddd¡ |  |¡ |j d¡ d¡\}}|  ||  |d¡¡ |  d|¡ W d   ƒ q1 sæ0    Y  qd S )N©r˜   r"  rz  rx   ZEditedr—   r„  ÚCreatedz.w-active-filters .w-pillz.w-pill__removeú T)Ú	separatorr‚   zAction: Editzdata-w-swap-src-valueú?Zhistory_resultszaction=wagtail.edit)r>  r?  ÚsubTestrb   rq   rr   r   rŒ   r~   r   r€   Úget_textrÏ   rÛ   rs  r/  rQ  )	r[   r‘   r˜   rt   rƒ   rŒ  Zclear_buttonr‰   rd   r\   r\   r]   Útest_filters\  s$    

þ
zTestSnippetHistory.test_filtersc                 C   s2   |   | j¡}|  | jd¡}|  |d|› d¡ d S )Nr@  rê  ú
">Edit</a>)rb   r>  r/  rŒ   )r[   rt   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>rê  rJ  r—   r„  z">Review this version</a>)rb   r?  r/  r®   r@  rŒ   r   )r[   rt   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=  rM  r—   )r…  r¨   rN  z.w-breadcrumbs__sublabel)r‚   )rG   ro   r±   rõ   rö   r„  r   rb   r   r~   r   r€   rq   rH  )r[   r˜   rt   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 )Nrx   )rb   r>  rq   rr   r?  rs   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:0    Y  tdƒD ]0}|j| jdd}|d dkrL|j| jdd qL|  d¡ |  |¡ W d   ƒ n1 s¨0    Y  d S )Né   r˜  Tr<  r5  r   )r?  rb   ZassertNumQueriesr°   rõ   rY   rö   )r[   r˜   r³   r¨  r\   r\   r]   Útest_num_queries¾  s    
(z#TestSnippetHistory.test_num_queries)N)rž   rŸ   r    rð  rb   r/  r^   r   rI  rK  rP  rR  r   rS  rU  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 )NrL  rá   )r/  r   r˜   r®   r@  rZ   r\   r\   r]   rO  Ò  s    ÿzTestSnippetRevisions.revert_urlc                 C   s   | j  | j¡S rV   )ra   rb   rO  rZ   r\   r\   r]   rb   Ø  s    zTestSnippetRevisions.getc                 C   s   | j  | j|¡S rV   )ra   rd  rO  rõ  r\   r\   r]   rd  Û  s    zTestSnippetRevisions.postNc                 C   s0   | j j |¡}|d u r$t| j jƒg}t||dS r0  )r˜   r`  ra  r   r®   r   )r[   r1  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 st0    Y  d| j_| j ¡  | jj| jdd	| _d S )
Nz2022-05-10 11:00:00úThe original textrÁ   r8  r  Tr:  zThe edited textr<  )rX   rY   r   rL   ro   r±   r˜   rõ   r@  r(   r	   r%  r   r®   r   rp   rA  rZ   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 )Nrx   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„  rX  rý  ú" method="POST">Trú  úReplace current revision)
rb   rq   rr   r   ZUSE_TZr   rO  r   r  r  )r[   rt   Z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/rQ  )rA   ro   r±   ra   rb   r®   rq   rr   ©r[   r˜   rt   r\   r\   r]   Ú3test_get_revert_revision_with_non_revisable_snippet  s
    ÿzHTestSnippetRevisions.test_get_revert_revision_with_non_revisable_snippetc                 C   sF   d| j _| j j tjjddd¡ | j  ¡  |  ¡ }|  |j	d¡ d S re   rk   rs   r\   r\   r]   ru     s    ÿÿ
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 )Nr  rÁ   rx   rK  Úfooterz2button[type="submit"]:not([name="action-publish"])zReplace current draftz,button[type="submit"][name="action-publish"]zPublish this versionrÚ  >   rØ   zbutton-longrunningzaction-savez/wagtailsnippets_tests_draftstatemodel:unpublishrá   r  r  )rG   ro   r±   r˜   rõ   r@  rb   rq   rr   r}   r~   r   r€   rÏ   r   r‚   Úsetr   r   r®   rÎ   )r[   rt   rƒ   r_  Zsave_buttonZpublish_buttonr  Z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 barrx   rK  z*You are viewing a previous version of thisr—   r„  rý  rY  Trú  rZ  Z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-kbdrj  zmod+pzdata-w-kbd-key-value)rI   ro   r±   r˜   rõ   r@  r   rb   rq   rr   r}   r   rO  r   r  r  r/  r~   r€   rÏ   rÝ   )r[   rt   r[  r¨   Zpreview_urlrƒ   Ú
controllerZ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 )Nr1  r   ú	 reverted©r   r¨  r  rG  rá   ©r¨  zThe original text revertedrå   úwagtail.revert)rb   r¤   Úinitialrd  r@  r®   r‹  r/  r˜   r„  r²  r(   ro   rŒ  r  rq   r   r¦  r…  r   rÏ   r"  )r[   Úget_responseÚtext_from_revisionÚpost_responser  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 )
NFrf   rg   rh   r|  rf  r  rj   r×   )rY   rl   rm   rn   r   ro   rb   rp   rd  r@  r®   rq   rr   r˜   r„  r©  r   r¦  r…  rs   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 )Nr  Fr  úDraft-enabled Foo editedr1  r   re  rf  r  r@  rg  r†  r‡  úDraft-enabled Foo revertedrå   rh  r   )$rG   ro   r±   r˜   rõ   r@  r   rA  rb   r¤   ri  rd  r®   r‹  r/  r„  r²  r(   rŒ  r  r	   r%  rq   r¦  r…  r   rÏ   r"  r¾   r  r:  r  rÎ   r  r	  r
  )r[   rj  rk  rl  r  r‰  Z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 sˆ0    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 )Nr  rÁ   ro  r1  r   re  r  )r   r¨  r  r  rG  rá   rg  rh  r‡  rp  rå   r†  r—   )&rG   ro   r±   r˜   rõ   r@  r   rA  rb   r¤   ri  r   r   rd  r®   r‹  r/  r„  r²  r(   rŒ  r  r	   r%  rq   r¦  r…  r   rÏ   r"  r:  r  r¾   r  r  r	  r
  r  )r[   rj  rk  r#  rl  r  r‰  Zrevert_log_entriesr\   r\   r]   Útest_replace_publishØ  sD    
ýÿ$


ý
z)TestSnippetRevisions.test_replace_publish)N)rž   rŸ   r    ÚpropertyrO  rb   rd  r/  r^   r\  r^  ru   ra  rd  rm  rn  rq  rr  r\   r\   r\   r]   rV  Ñ  s   

#,0rV  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Á   r4  r5  rÃ   z
First editr«   zFinal revisionr6  )rL   ro   r±   r˜   rõ   r@  r   r'  Z
created_atrp   r   rA  Úfinal_revisionrX   rZ   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®   ra   rb   )r[   Zrevision_a_idZrevision_b_idÚcompare_urlr\   r\   r]   rb      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 )Nrx   úV<span class="deletion">Initial revision</span><span class="addition">First edit</span>Tr§   r¤  rá   z)wagtailsnippets_tests_revisablemodel:editz,wagtailsnippets_tests_revisablemodel:historyr_   r‡   rˆ   zRevisable modelsZHistoryr†   ÚCompare)r‰   rŠ   rQ  za.w-header-button[href='z']ZEdit)rb   r@  r®   rA  rq   rr   r   r   r˜   Úidr‹   r   r   r~   r€   rÏ   r   r‚   )r[   rt   Ú	index_urlr÷   rN  rƒ   Z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 )NZearliestrx   rw  Tr§   )rb   rA  r®   rq   rr   r   rs   r\   r\   r]   Útest_compare_revisions_earliestK  s    ýz4TestCompareRevisions.test_compare_revisions_earliestc                 C   s2   |   | jjd¡}|  |jd¡ | j|ddd d S )NZlatestrx   zT<span class="deletion">First edit</span><span class="addition">Final revision</span>Tr§   )rb   rA  ry  rq   rr   r   rs   r\   r\   r]   Útest_compare_revisions_latestU  s    ýz2TestCompareRevisions.test_compare_revisions_latestc                 C   sJ   d| j _| j jdgd |  | jjd¡}|  |jd¡ | j|ddd d S )	NzLive editedr   )Zupdate_fieldsr  rx   zU<span class="deletion">Final revision</span><span class="addition">Live edited</span>Tr§   )	r˜   r   rp   rb   ru  ry  rq   rr   r   rs   r\   r\   r]   Útest_compare_revisions_live_  s    ýz0TestCompareRevisions.test_compare_revisions_liveN)	rž   rŸ   r    r^   rb   r{  r|  r}  r~  r\   r\   r\   r]   rt    s   $

rt  c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )Ú%TestCompareRevisionsWithPerUserPanelsc                 C   sb   t jjddd| _| j ¡ | _d| j_d| j_| j ¡ | _t	dt
| jjƒ| jj| jjfd| _d S )NzFoo barzSecret text)r   Úsecret_textzFoo bazzSecret unseen notez;wagtailsnippets_tests_revisablechildmodel:revisions_comparerá   )rK   ro   r±   r˜   rõ   Zold_revisionr   r€  Znew_revisionr   r   r®   rv  rZ   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 )Nrx   úFFoo <span class="deletion">bar</span><span class="addition">baz</span>Tr§   zRSecret <span class="deletion">text</span><span class="addition">unseen note</span>)rX   ra   rb   rv  rq   rr   r   rs   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 )NZeditorÚpassword©Úusernamerƒ  rv   Zchange_revisablechildmodelrh   rf   rg   rx   r  Tr§   zunseen note)Úcreate_userr   ro   rb   rm   rn   rX   ra   rv  rq   rr   r   rŒ   )r[   rY   r  rá  rt   r\   r\   r]   Ú test_comparison_as_ordinary_userŒ  s"    ÿÿýzFTestCompareRevisionsWithPerUserPanels.test_comparison_as_ordinary_userN)rž   rŸ   r    r^   r‚  r‡  r\   r\   r\   r]   r  n  s   r  c                   @   sp   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
edddd„ ƒZedddd„ ƒZdS )ÚTestSnippetChooseræ  c                 C   s   |   ¡  ddg| _d S )Nrv   rÈ   )rX   Úurl_argsrZ   r\   r\   r]   r^   ¥  s    zTestSnippetChoose.setUpNc                 C   s.   | j \}}| j td|› d|› dƒ|p*i ¡S )NZwagtailsnippetchoosers_Ú_z:choose)r‰  ra   rb   r   )r[   rd   Z	app_labelZ
model_namer\   r\   r]   rb   ©  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¨   )rb   r}   rQ  Újsonrs   r\   r\   r]   r   °  s    
þzTestSnippetChoose.test_simplec                 C   s>   t j ¡  ¡  |  ¡ }|  |d¡ | ¡ d }|  d|¡ d S )Nr‹  r¨   ú(href="/admin/snippets/tests/advert/add/")rA   ro   rÒ  r  rb   r}   rŒ  rI  )r[   rt   Úresponse_htmlr\   r\   r]   Útest_no_resultsº  s
    z!TestSnippetChoose.test_no_resultsc                 C   sf   t j ¡  ¡  tdddƒD ]}t jj|d| d q|  ¡ }|  |jd¡ |  |j	d d j
d¡ d	S ©
zZ
        Listing should be ordered by PK if no ordering has been set on the model
        rÃ   r   r4  r¬   r­   rx   r  zadvert 1N)rA   ro   rÒ  r  r°   r±   rb   rq   rr   r¤   r   r²   r\   r\   r]   r´   Á  s    zTestSnippetChoose.test_orderingc                 C   sH   |   ddi¡}|  |jd¡ |  |d¡ |   ddi¡}|  |jd¡ d S )Nr·   r—   rx   r‹  i'  rQ  r¸   rs   r\   r\   r]   rº   Ì  s
    z(TestSnippetChoose.test_simple_paginationc                 C   s    |   |  ¡ jd j d¡¡ d S ©NZfilter_formrL  )r¾   rb   r¤   r"  rZ   r\   r\   r]   r¿   Õ  s    z%TestSnippetChoose.test_not_searchableFrù   c                 C   sf   ddg| _ tjjdd}tjjdd tjjd|d |  ¡ }| ¡ d	 }|  d
|¡ |  d|¡ d S )NÚsnippetstestsÚtranslatablesnippetrü   rý   úEnglish snippetrÁ   úFrench snippet©r   Úlocaler¨   ú data-chooser-modal-search-filterúname="locale")r‰  r'   ro   r±   r?   rb   rŒ  rQ  ©r[   rÿ   rt   rŽ  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 )Nr’  r“  rü   rý   r”  rÁ   r•  r–  r¨   r˜  r™  r  r×   r   r—   r—  r  )r‰  r'   ro   r±   r?   rb   rŒ  rI  rq   r™   r¤   r   rš  r\   r\   r]   Útest_filter_by_localeè  s    
z'TestSnippetChoose.test_filter_by_locale)N)rž   rŸ   r    rð  r^   rb   r   r  r´   rº   r¿   r   r›  rœ  r\   r\   r\   r]   rˆ  ¢  s   

	
rˆ  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )ÚTestSnippetChooseResultsræ  c                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^     s    zTestSnippetChooseResults.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz2wagtailsnippetchoosers_tests_advert:choose_resultsr`   rc   r\   r\   r]   rb   	  s    ÿzTestSnippetChooseResults.getc                 C   s   |   ¡ }|  |d¡ d S )Nú$wagtailsnippets/chooser/results.html)rb   r}   rs   r\   r\   r]   r     s    z$TestSnippetChooseResults.test_simplec                 C   s2   t j ¡  ¡  |  ¡ }|  |d¡ |  |d¡ d S )Nrž  r  )rA   ro   rÒ  r  rb   r}   r   rs   r\   r\   r]   r    s    þz(TestSnippetChooseResults.test_no_results)N)rž   rŸ   r    rð  r^   rb   r   r  r\   r\   r\   r]   r    s
   
r  c                   @   s:   e Zd Zdd„ Zedd„ ƒZddd„Zdd	„ Zd
d„ ZdS )ÚTestSnippetChooseStatusc                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^     s    zTestSnippetChooseStatus.setUpc                 C   sD   t jjddd| _t jjddd| _t jjddd| _| j ¡  d S )Nr  Fr  r‚  TZbaz)rG   ro   r±   r'  r  Z
live_draftrõ   )r&  r\   r\   r]   r(     s    z%TestSnippetChooseStatus.setUpTestDataNc                 C   s   | j  td|› ƒ|pi ¡S )Nz-wagtailsnippetchoosers_tests_draftstatemodel:r`   )r[   rW  rd   r\   r\   r]   rb   '  s    þzTestSnippetChooseStatus.getc                 C   sJ   |   d¡}| ¡ d }|  d|¡ |  d|¡ |  d|¡ |  d|¡ d S )NÚchooser¨   ú<th>Status</th>ú#<span class="w-status">draft</span>ú4<span class="w-status w-status--primary">live</span>ú<<span class="w-status w-status--primary">live + draft</span>)rb   rŒ  r  )r[   rt   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 )NZchoose_resultsr¡  Tr§   r¢  r£  r¤  )rb   r   rs   r\   r\   r]   Ú,test_choose_results_view_shows_status_column9  s    
ÿýzDTestSnippetChooseStatus.test_choose_results_view_shows_status_column)N)	rž   rŸ   r    r^   r<  r(  rb   r¥  r¦  r\   r\   r\   r]   rŸ    s   

rŸ  c                   @   sF   e Zd Zdd„ Zddd„Zdd„ Zdd	„ Zd
d„ Zdd„ Zdd„ Z	dS )Ú&TestSnippetChooseWithSearchableSnippetc                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r>  rA  rZ   r\   r\   r]   r^   H  s    z,TestSnippetChooseWithSearchableSnippet.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz=wagtailsnippetchoosers_snippetstests_searchablesnippet:chooser`   rc   r\   r\   r]   rb   P  s    þz*TestSnippetChooseWithSearchableSnippet.getc                 C   sR   |   ¡ }|  |d¡ t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )Nr‹  r  )	rb   r}   rG  r¤   rH  rI  rB  rC  rD  rJ  r\   r\   r]   r   V  s    z2TestSnippetChooseWithSearchableSnippet.test_simplec                 C   s    |   |  ¡ jd j d¡¡ d S r‘  )r:  rb   r¤   r"  rZ   r\   r\   r]   rO  `  s    z9TestSnippetChooseWithSearchableSnippet.test_is_searchablec                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrL  r?  r  rP  rJ  r\   r\   r]   rR  d  s
    z8TestSnippetChooseWithSearchableSnippet.test_search_helloc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrL  r@  r  rS  rJ  r\   r\   r]   Útest_search_worldm  s
    z8TestSnippetChooseWithSearchableSnippet.test_search_worldc                 C   sL   |   ddi¡}t|jd jƒ}|  | j|¡ |  | j|¡ |  | j|¡ d S )NrL  zhello wor  )	rb   rG  r¤   rH  rQ  rB  rC  rI  rD  rJ  r\   r\   r]   Útest_partial_matchv  s
    z9TestSnippetChooseWithSearchableSnippet.test_partial_match)N)
rž   rŸ   r    r^   rb   r   rO  rR  r¨  r©  r\   r\   r\   r]   r§  G  s   

		r§  c                   @   s*   e Zd ZdZdd„ Zd	dd„Zdd„ ZdS )
Ú5TestSnippetChooseWithNonAutocompleteSearchableSnippetrV  c                 C   s<   |   ¡  tjjdd| _tjjdd| _tjjdd| _d S r>  rW  rZ   r\   r\   r]   r^   ˆ  s    ÿz;TestSnippetChooseWithNonAutocompleteSearchableSnippet.setUpNc                 C   s   | j  tdƒ|pi ¡S )NzLwagtailsnippetchoosers_snippetstests_nonautocompletesearchablesnippet:chooser`   rc   r\   r\   r]   rb   ’  s    ÿüz9TestSnippetChooseWithNonAutocompleteSearchableSnippet.getc                 C   sx   |   td¡ |  ddi¡}W d   ƒ n1 s00    Y  t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )NrX  rL  r?  r  rY  rJ  r\   r\   r]   rR  š  s    ÿ,zGTestSnippetChooseWithNonAutocompleteSearchableSnippet.test_search_hello)Nr\  r\   r\   r\   r]   rª  €  s   

rª  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )ÚTestSnippetChosenræ  c                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^   ª  s    zTestSnippetChosen.setUpNc                 C   s   | j  td|fd|pi ¡S )Nz*wagtailsnippetchoosers_tests_advert:chosenrá   r`   ©r[   r®   rd   r\   r\   r]   rb   ­  s    þzTestSnippetChosen.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S ©Nr   rF  ÚstepZchosen)
rb   rA   ro   rÒ  r®   rŒ  Úloadsr   r  rq   ©r[   rt   Zresponse_jsonr\   r\   r]   Útest_choose_a_page³  s    z$TestSnippetChosen.test_choose_a_pagec                 C   s   |   d¡}|  |jd¡ d S )NrT  rQ  )rb   rq   rr   rs   r\   r\   r]   Útest_choose_a_non_existing_page¸  s    
z1TestSnippetChosen.test_choose_a_non_existing_page)N)rž   rŸ   r    rð  r^   rb   r±  r²  r\   r\   r\   r]   r«  §  s
   
r«  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestAddOnlyPermissionsræ  c                 C   s`   t jjdd| _| jdddd}tjjddd	}tjjd
dd	}|j ||¡ | jddd d S )Nr—   rF  Zaddonlyzaddonly@example.comrƒ  ©r…  Úemailrƒ  rv   Z
add_advertrh   rf   rg   r„  ©	rA   ro   rb   rA  r†  r   rm   rn   rX   )r[   rY   r  rá  r\   r\   r]   r^   À  s    ÿÿÿzTestAddOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S ©Nr{   rx   r¢   r»   ry  rs   r\   r\   r]   Útest_get_indexÐ  s    z%TestAddOnlyPermissions.test_get_indexc                 C   s@   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |jd d¡ d S )Nr©   rx   rf  r£   r˜   )ra   rb   r   rq   rr   r}   r¤   rs   r\   r\   r]   Útest_get_addØ  s    z#TestAddOnlyPermissions.test_get_addc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S ©NrS  rá   rà  ©ra   rb   r   r   rA  r®   r‹  rs   r\   r\   r]   Útest_get_editÞ  s    þÿz$TestAddOnlyPermissions.test_get_editc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S ©Nrà   rá   rà  r»  rs   r\   r\   r]   Útest_get_deleteè  s    þÿz&TestAddOnlyPermissions.test_get_deleteN©	rž   rŸ   r    rð  r^   r¸  r¹  r¼  r¾  r\   r\   r\   r]   r³  ½  s   
r³  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestEditOnlyPermissionsræ  c                 C   s`   t jjdd| _| jdddd}tjjddd	}tjjd
dd	}|j ||¡ | jddd d S )Nr—   rF  Z
changeonlyzchangeonly@example.comrƒ  r´  rv   r¦   rh   rf   rg   r„  r¶  ©r[   rY   Zchange_permissionrá  r\   r\   r]   r^   ö  s    ÿÿÿzTestEditOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S r·  ©ra   rb   r   rq   rr   r}   rŒ   rs   r\   r\   r]   r¸    s    z&TestEditOnlyPermissions.test_get_indexc                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S ©Nr©   rà  ©ra   rb   r   r‹  rs   r\   r\   r]   r¹    s    z$TestEditOnlyPermissions.test_get_addc                 C   sN   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  |j	d d¡ d S )NrS  rá   rx   rK  r£   r˜   ©
ra   rb   r   r   rA  r®   rq   rr   r}   r¤   rs   r\   r\   r]   r¼    s    þÿz%TestEditOnlyPermissions.test_get_editc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S r½  r»  rs   r\   r\   r]   r¾    s    þÿz'TestEditOnlyPermissions.test_get_deleteNr¿  r\   r\   r\   r]   rÀ  ó  s   rÀ  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚTestDeleteOnlyPermissionsræ  c                 C   s^   t jjdd| _| jddd}tjjddd}tjjd	d
d}|j ||¡ | jddd d S )Nr—   rF  Z
deleteonlyrƒ  r„  rv   Zdelete_advertrh   rf   rg   r¶  rÁ  r\   r\   r]   r^   ,  s    ÿÿzTestDeleteOnlyPermissions.setUpc                 C   s:   | j  tdƒ¡}|  |jd¡ |  |d¡ |  |d¡ d S r·  rÂ  rs   r\   r\   r]   r¸  :  s    z(TestDeleteOnlyPermissions.test_get_indexc                 C   s$   | j  tdƒ¡}|  |tdƒ¡ d S rÃ  rÄ  rs   r\   r\   r]   r¹  B  s    z&TestDeleteOnlyPermissions.test_get_addc                 C   s2   | j  tdt| jjƒgd¡}|  |tdƒ¡ d S rº  r»  rs   r\   r\   r]   r¼  G  s    þÿz'TestDeleteOnlyPermissions.test_get_editc                 C   sN   | j  tdt| jjƒgd¡}|  |jd¡ |  |d¡ |  |j	d d¡ d S )Nrà   rá   rx   r÷  r£   r˜   rÅ  rs   r\   r\   r]   r¾  Q  s    þÿz)TestDeleteOnlyPermissions.test_get_deleteNr¿  r\   r\   r\   r]   rÆ  )  s   
rÆ  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestSnippetEditHandlersc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rV   )r#   r=   r  r:  Ú
issubclassr   r¾   r5   ©r[   r  r  r\   r\   r]   Útest_standard_edit_handler^  s    z2TestSnippetEditHandlers.test_standard_edit_handlerc                 C   s4   t tƒ}| ¡ }|  t|tƒ¡ |  t|tƒ¡ d S rV   )r#   r7   r  r:  rÈ  r   r5   rÉ  r\   r\   r]   Útest_fancy_edit_handlerd  s    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:addrx   zwagtailadmin/js/draftail.js)rX   ra   rb   r   rq   rr   r   rs   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 )ÚTestSnippetChooserBlockræ  c                 C   s>   t tƒ}tjjdd}|  | |¡|j¡ |  | d¡¡ dS )úQThe value of a SnippetChooserBlock (a snippet instance) should serialize to an IDr‰  rÁ   N)r/   rA   ro   rb   rq   Úget_prep_valuery  rÎ   ©r[   Úblockr‰  r\   r\   r]   Útest_serialize}  s    z&TestSnippetChooserBlock.test_serializec                 C   s>   t tƒ}tjjdd}|  | |j¡|¡ |  | d¡¡ dS )ú^The serialized value of a SnippetChooserBlock (an ID) should deserialize to a snippet instancer‰  rÁ   N)r/   rA   ro   rb   rq   Ú	to_pythonry  rÎ   rÑ  r\   r\   r]   Útest_deserialize‡  s    z(TestSnippetChooserBlock.test_deserializec                 C   s.   t dƒ}tjjdd}|  | |j¡|¡ d S )Nztests.Advertr‰  rÁ   )r/   rA   ro   rb   rq   rÕ  ry  rÑ  r\   r\   r]   Útest_reference_model_by_string‘  s    z6TestSnippetChooserBlock.test_reference_model_by_stringc                 C   sˆ   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Û  ÚrequiredrÛ  Z
blockDefIdZisPreviewableZhelpTextrÆ  ZshowAddCommentButtonÚstrings)r/   rA   Úset_namer%   Újs_argsrq   rN  r2   rb  Údefinition_prefixÚis_previewable©r[   rÒ  rå  r\   r\   r]   Ú
test_adapt–  s0    ý
öþz"TestSnippetChooserBlock.test_adaptc                 C   sZ   t tƒ}tjjdd}| dt|jƒii d¡}|  ||¡ | ddii d¡}|  |¡ d S )Nr‰  rÁ   rÈ   r†   )	r/   rA   ro   rb   Úvalue_from_datadictr   ry  rq   rÎ   ©r[   rÒ  r‰  rã  Zempty_valuer\   r\   r]   Útest_form_response³  s    z*TestSnippetChooserBlock.test_form_responsec                 C   sŽ   t tƒ}t tdd}tjjdd}|  | |¡|¡ |  t¡ | d ¡ W d   ƒ n1 s^0    Y  |  | |¡|¡ |  | d ¡¡ d S )NF©râ  r‰  rÁ   )	r/   rA   ro   rb   rq   ÚcleanÚassertRaisesr   rÎ   ©r[   Zrequired_blockZ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   Zdeconstructrq   )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   ro   rb   ZassertListEqualrG  Zextract_referencesr   ry  rÑ  r\   r\   r]   Útest_extract_referencesÐ  s    þz/TestSnippetChooserBlock.test_extract_referencesc                 C   s<   |   t¡ ttƒ}|j W d   ƒ n1 s.0    Y  d S rV   )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    rð  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—   Z__ID__)r2   rA   r3   rå  rq   r™   ZassertInHTMLrI  )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/01r?  ©Ú
snippet_idr   ú
snippet/02z
snippet/03)rX   r>   ro   r±   rB  rC  rD  rZ   r\   r\   r]   r^   ñ  s    ÿÿÿz-TestSnippetListViewWithCustomPrimaryKey.setUpc                 C   s   | j  tdƒ|¡S )NúFwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:listr`   rc   r\   r\   r]   rb   ÿ  s    ÿüz+TestSnippetListViewWithCustomPrimaryKey.getc                 C   s`   |   ¡ }|  |jd¡ |  |d¡ t|jd jƒ}|  | j|¡ |  | j	|¡ |  | j
|¡ d S )Nrx   r¢   r¯   )rb   rq   rr   r}   rG  r¤   rH  rI  rB  rC  rD  rJ  r\   r\   r]   r     s    z3TestSnippetListViewWithCustomPrimaryKey.test_simpleN)rž   rŸ   r    r^   rb   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 )Ú#TestSnippetViewWithCustomPrimaryKeyræ  c                    s:   t ƒ  ¡  |  ¡  tjjddd| _tjjddd| _d S )Nrù  r?  rú  Zabc_407269_1ZGoodbye)rH  r^   rX   r>   ro   r±   rB  rC  rZ   rI  r\   r]   r^     s    
ÿÿz)TestSnippetViewWithCustomPrimaryKey.setUpc                 C   s*   t |jƒg}| j t|j d¡|d|¡S r?  )r   r®   ra   rb   r   r`  ra  )r[   r˜   rd   râ   r\   r\   r]   rb      s
    þz'TestSnippetViewWithCustomPrimaryKey.getc                 C   s*   t |jƒg}| j t|j d¡|d|¡S r?  )r   r®   ra   rd  r   r`  ra  )r[   r˜   re  râ   r\   r\   r]   rd  '  s
    þz(TestSnippetViewWithCustomPrimaryKey.postc                 C   s   | j  t|j d¡ƒ|¡S r_  rc  )r[   r˜   re  rb  r\   r\   r]   r±   .  s    þz*TestSnippetViewWithCustomPrimaryKey.createc              	   C   sf   | j | jfD ]T}| j|d4 |  |¡}|  |jd¡ |  |d¡ W d   ƒ q1 sV0    Y  qd S )NrB  rx   rK  )rB  rC  rG  rb   rq   rr   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.rE  )rd  rB  r   rs   r\   r\   r]   rW  ;  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 snippetZsnippet_id_edited©r   rû  r  rý  rå   rû  )rd  rB  r‹  r   r>   ro   rÒ  rq   r…  r˜  rŒ  rû  rŽ  r\   r\   r]   rZ  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±   rB  r‹  r   r>   ro   rÒ  rq   r…  r˜  rŒ  r   rŽ  r\   r\   r]   r  U  s    þÿþ
z/TestSnippetViewWithCustomPrimaryKey.test_createc              	   C   sx   | j | jfD ]f}| j|dF | j tdt|jƒgd¡}|  |j	d¡ |  
|d¡ W d   ƒ q1 sh0    Y  qd S )NrB  úHwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:deleterá   rx   r÷  )rB  rC  rG  ra   rb   r   r   r®   rq   rr   r}   r]  r\   r\   r]   r¾  e  s    
þÿÿz3TestSnippetViewWithCustomPrimaryKey.test_get_deletec              	   C   s¤   | j | jfD ]’}| j|dr | j tdt|jƒgd¡}|  |j	d¡ |  
|d¡ |  |d¡ |  |tdt|jƒgdd ¡ W d   ƒ q1 s”0    Y  qd S )	NrB  r  rá   rx   r÷  zCThis standard snippet with custom primary key is referenced 0 timeszGwagtailsnippets_snippetstests_standardsnippetwithcustomprimarykey:usagerð  )rB  rC  rG  ra   rb   r   r   r®   rq   rr   r}   r   r]  r\   r\   r]   rù  s  s2    
þÿÿþ
þüþz3TestSnippetViewWithCustomPrimaryKey.test_usage_linkc                 C   sL   |   td¡ | j d¡}W d   ƒ n1 s.0    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/é-  ©rr   ©rZ  rS   ra   rb   r‹  rs   r\   r\   r]   Útest_redirect_to_edit  s    þÿ"ýz9TestSnippetViewWithCustomPrimaryKey.test_redirect_to_editc                 C   sL   |   td¡ | j d¡}W d   ƒ n1 s.0    Y  | j|ddd d S )NzW`/<pk>/delete/` delete view URL pattern has been deprecated in favour of /delete/<pk>/.zV/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/snippet_2F01/delete/zV/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/delete/snippet_2F01/r  r  r  rs   r\   r\   r]   Útest_redirect_to_delete›  s    þÿ"ýz;TestSnippetViewWithCustomPrimaryKey.test_redirect_to_deletec                 C   sL   |   td¡ | j d¡}W d   ƒ n1 s.0    Y  | j|ddd d S )NzT`/<pk>/usage/` usage view URL pattern has been deprecated in favour of /usage/<pk>/.zU/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/snippet_2F01/usage/zU/admin/snippets/snippetstests/standardsnippetwithcustomprimarykey/usage/snippet_2F01/r  r  r  rs   r\   r\   r]   Útest_redirect_to_usage©  s    þÿ"ýz:TestSnippetViewWithCustomPrimaryKey.test_redirect_to_usage)rž   rŸ   r    rð  r^   rb   rd  rA   r±   rÿ  rW  rZ  r  r¾  rù  r  r  r  ro  r\   r\   rI  r]   rþ    s   
rþ  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú+TestSnippetChooserBlockWithCustomPrimaryKeyræ  c                 C   s>   t tƒ}tjjdd}|  | |¡|j¡ |  | d¡¡ dS )rÏ  ú	advert/01rF  N)r/   rB   ro   rb   rq   rÐ  r®   rÎ   rÑ  r\   r\   r]   rÓ  »  s    z:TestSnippetChooserBlockWithCustomPrimaryKey.test_serializec                 C   s>   t tƒ}tjjdd}|  | |j¡|¡ |  | d¡¡ dS )rÔ  r	  rF  N)r/   rB   ro   rb   rq   rÕ  r®   rÎ   rÑ  r\   r\   r]   rÖ  Å  s    z<TestSnippetChooserBlockWithCustomPrimaryKey.test_deserializec                 C   sˆ   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 )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å  rq   rN  r2   rb  ræ  rç  rè  r\   r\   r]   ré  Ï  s0    ý
öþz6TestSnippetChooserBlockWithCustomPrimaryKey.test_adaptc                 C   sZ   t tƒ}tjjdd}| dt|jƒii d¡}|  ||¡ | ddii d¡}|  |¡ d S )Nr	  rF  Úadvertwithcustomprimarykeyr†   )	r/   rB   ro   rb   rê  r   r®   rq   rÎ   rë  r\   r\   r]   rì  ì  s    ý
ÿz>TestSnippetChooserBlockWithCustomPrimaryKey.test_form_responsec                 C   sŽ   t tƒ}t tdd}tjjdd}|  | |¡|¡ |  t¡ | d ¡ W d   ƒ n1 s^0    Y  |  | |¡|¡ |  | d ¡¡ d S )NFrí  r	  rF  )	r/   rB   ro   rb   rq   rî  rï  r   rÎ   rð  r\   r\   r]   rñ  ü  s    ÿ(z6TestSnippetChooserBlockWithCustomPrimaryKey.test_cleanN)	rž   rŸ   r    rð  rÓ  rÖ  ré  rì  rñ  r\   r\   r\   r]   r  ¸  s   

r  c                   @   s:   e Zd ZdgZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )Ú+TestSnippetChooserPanelWithCustomPrimaryKeyræ  c                 C   s’   t ƒ  d¡| _tƒ }|| j_t}d| _|jjt	jjd| jdd}t
|ƒ| _| j ¡ | _| j|d}| jj||| jd}dd	„ |jD ƒd
 | _d S )NrP  r  z	advert/02)Z	advert_idr   )r
  r  r  c                 S   s    g | ]}t |d dƒdkr|‘qS ©r
  Nr
  r  r  r\   r\   r]   r•   "  s   þzETestSnippetChooserPanelWithCustomPrimaryKey.setUp.<locals>.<listcomp>r   )r   rb   r›   r   rY   rN   r  ro   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   s^   t ƒ }| j|d}| jj||| jd}dd„ |jD ƒd }| ¡ }|  d|¡ |  d|¡ d S )Nr  r  c                 S   s    g | ]}t |d dƒdkr|‘qS r  r  r  r\   r\   r]   r•   5  s   þzZTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_field.<locals>.<listcomp>r   r  r  )rN   r  r  r  r›   r  r  rI  r  r\   r\   r]   r  .  s    ÿþüzFTestSnippetChooserPanelWithCustomPrimaryKey.test_render_as_empty_fieldc                 C   s   |   d| j ¡ ¡ d S )Nz~new SnippetChooser("id_advertwithcustomprimarykey", {"modalUrl": "/admin/snippets/choose/tests/advertwithcustomprimarykey/"});r  rZ   r\   r\   r]   r   ?  s    þz:TestSnippetChooserPanelWithCustomPrimaryKey.test_render_jsc                 C   sL   t tdƒgƒ t¡}| ¡ }|ƒ }|jd j}|  |t¡ |  	|j
t¡ d S )Nr
  )r"   r!   r!  rN   r  r"  r#  rN  r2   rq   rb  rB   r$  r\   r\   r]   r%  E  s    ÿþzJTestSnippetChooserPanelWithCustomPrimaryKey.test_target_model_autodetectedNr&  r\   r\   r\   r]   r    s   r  c                   @   s4   e Zd ZdgZdd„ Zddd„Zdd„ Zd	d
„ ZdS )Ú%TestSnippetChooseWithCustomPrimaryKeyræ  c                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^   S  s    z+TestSnippetChooseWithCustomPrimaryKey.setUpNc                 C   s   | j  tdƒ|pi ¡S )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chooser`   rc   r\   r\   r]   rb   V  s    þz)TestSnippetChooseWithCustomPrimaryKey.getc                 C   s<   |   ¡ }|  |d¡ |  |jd d¡ |  |jd d¡ d S )Nr‹  r£   r˜   rÛ  )rb   r}   rq   r¤   rs   r\   r\   r]   r   \  s    z1TestSnippetChooseWithCustomPrimaryKey.test_simplec                 C   sf   t j ¡  ¡  tdddƒD ]}t jj|d| d q|  ¡ }|  |jd¡ |  |j	d d j
d¡ d	S r  )rB   ro   rÒ  r  r°   r±   rb   rq   rr   r¤   r   r²   r\   r\   r]   r´   b  s    z3TestSnippetChooseWithCustomPrimaryKey.test_ordering)N)rž   rŸ   r    rð  r^   rb   r   r´   r\   r\   r\   r]   r  P  s
   
r  c                   @   s,   e Zd ZdgZdd„ Zd	dd„Zdd„ ZdS )
Ú%TestSnippetChosenWithCustomPrimaryKeyræ  c                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^   q  s    z+TestSnippetChosenWithCustomPrimaryKey.setUpNc                 C   s    | j  tdt|ƒfd|pi ¡S )Nz>wagtailsnippetchoosers_tests_advertwithcustomprimarykey:chosenrá   ©ra   rb   r   r   r¬  r\   r\   r]   rb   t  s    þûz)TestSnippetChosenWithCustomPrimaryKey.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S r­  )
rb   rB   ro   rÒ  r®   rŒ  r¯  r   r  rq   r°  r\   r\   r]   r±  }  s    z8TestSnippetChosenWithCustomPrimaryKey.test_choose_a_page)N©rž   rŸ   r    rð  r^   rb   r±  r\   r\   r\   r]   r  n  s   
	r  c                   @   s,   e Zd ZdgZdd„ Zd	dd„Zdd„ ZdS )
Ú)TestSnippetChosenWithCustomUUIDPrimaryKeyræ  c                 C   s   |   ¡  d S rV   r)  rZ   r\   r\   r]   r^   †  s    z/TestSnippetChosenWithCustomUUIDPrimaryKey.setUpNc                 C   s    | j  tdt|ƒfd|pi ¡S )NzBwagtailsnippetchoosers_tests_advertwithcustomuuidprimarykey:chosenrá   r  r¬  r\   r\   r]   rb   ‰  s    þûz-TestSnippetChosenWithCustomUUIDPrimaryKey.getc                 C   s<   | j tj ¡ d jd}t |j ¡ ¡}|  	|d d¡ d S r­  )
rb   rC   ro   rÒ  r®   rŒ  r¯  r   r  rq   r°  r\   r\   r]   r±  ’  s    z<TestSnippetChosenWithCustomUUIDPrimaryKey.test_choose_a_page)Nr  r\   r\   r\   r]   r  ƒ  s   
	r  c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestPanelConfigurationChecksc                    s   dˆ _ ‡ fdd„}|ˆ _d S )Núwagtailadmin.W002c                     s    t jdgd} ‡ fdd„| D ƒS )NZpanels)r”  c                    s   g | ]}|j ˆ jkr|‘qS r\   )ry  Ú
warning_id)r“   ÚwarningrZ   r\   r]   r•   Ÿ  s   zQTestPanelConfigurationChecks.setUp.<locals>.get_checks_result.<locals>.<listcomp>)r
   Z
run_checks)Zchecks_resultrZ   r\   r]   Úget_checks_resultœ  s    
ÿz=TestPanelConfigurationChecks.setUp.<locals>.get_checks_result)r  r  )r[   r  r\   rZ   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Úobjry  Úcontent_panels)r!   r=   r  r
   ÚWarningr  rq   Údelattr)r[   r  Z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'  rŒ  Úior   Zunittestr   Zdjango.confr   Zdjango.contrib.admin.utilsr   Zdjango.contrib.authr   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr	   Zdjango.corer
   r   Zdjango.core.exceptionsr   r   Zdjango.core.files.baser   Zdjango.core.files.uploadedfiler   Zdjango.core.handlers.wsgir   Zdjango.httpr   r   Zdjango.testr   r   r   Zdjango.test.utilsr   Zdjango.urlsr   Zdjango.utils.timezoner   r   Z	freezegunr   Ztaggit.modelsr   Zwagtailr   Zwagtail.admin.admin_url_finderr   Zwagtail.admin.formsr   Zwagtail.admin.forms.searchr   Zwagtail.admin.menur    Zwagtail.admin.panelsr!   r"   r#   Zwagtail.admin.widgets.buttonr$   Zwagtail.blocks.field_blockr%   Zwagtail.coreutilsr&   Zwagtail.modelsr'   r(   r)   Zwagtail.signalsr*   r+   Zwagtail.snippets.action_menur,   r-   r.   Zwagtail.snippets.blocksr/   Zwagtail.snippets.modelsr0   r1   Zwagtail.snippets.widgetsr2   r3   r4   Zwagtail.test.snippets.formsr5   Zwagtail.test.snippets.modelsr6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   Zwagtail.test.testapp.modelsrA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   Zwagtail.test.utilsrP   Z!wagtail.test.utils.template_testsrQ   Zwagtail.test.utils.timestampsrR   Zwagtail.utils.deprecationrS   Zwagtail.utils.timestampsrT   rU   r¡   rú   r  r  r=  rU  r^  rÝ  rå  rñ  r>  rE  rp  rq  rs  ry  r|  rÁ  rÍ  rÖ  rã  r  r'  r*  r-  rV  rt  r  rˆ  r  rŸ  r§  rª  r«  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