
    BhӐ                       d dl Z d dlZd dlmZ d dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dl m!Z!m"Z#m$Z$ d dl%m&Z& d dl'm(Z(m)Z)m*Z* d dl+m,Z,m-Z-m.Z.m/Z/ d dl0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z; d dl<m=Z=m>Z> d dl?m@Z@ d dlAmBZBmCZCmDZDmEZEmFZFmGZG d dlHmIZI d dlJmKZKmLZLmMZMmNZNmOZO d dlPmQZQ d dlRmSZS d dlTmUZU d d lVmWZW d d!lXmYZY d d"lZm[Z[  G d# d$e;      Z\ ed%&       G d' d(e\             Z] ed)*       G d+ d,e\             Z^ G d- d.e\      Z_ ed/&       G d0 d1e\             Z` G d2 d3e\      Za G d4 d5e\      Zb G d6 d7e      Zc G d8 d9e;      Zdy):    N)patch)settings)admin)AnonymousUser
Permission)ContentTypeHttpResponse)truncatewords)TestCase)RequestFactory)override_settings)reverse)	force_str)lazy)escape)get_languagegettext_lazyoverride)RequestToolbarForm)
add_plugincreate_pagecreate_page_content)ADMIN_MENU_IDENTIFIERADMINISTRATION_BREAKLANGUAGE_MENU_IDENTIFIERget_user_model)PagePermissionUserSettings)CharPksExampleExample1)ClassDetaildetail_view)URL_CMS_USERSETTINGSCMSTestCase)UserLoginContextoverride_placeholder_conf)utils)AjaxItemBreakItemSearchResultLinkItemSubMenuToolbarAPIMixin)
CMSToolbar)add_live_url_querystring_paramget_object_edit_urlget_object_for_languageget_object_preview_urlget_object_structure_url)toolbar_pool)
DJANGO_4_2)get_cms_setting)get_language_tupleadmin_reverse)detailsc                   *    e Zd Zd Zd Zd Zd Zd Zy)ToolbarTestBasec                     t               S N)r   selfs    F/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_toolbar.pyget_anonzToolbarTestBase.get_anonC   s
        c                     | j                  ddd      }|j                  j                  t        j                  j                  d             |S )NstaffTFchange_pagecodename_create_useruser_permissionsaddr   objectsget)rA   rF   s     rB   	get_staffzToolbarTestBase.get_staffF   sC    !!'47"":#5#5#9#9=#9#QRrD   c                     | j                  d      }|j                  j                  t        j                  j                  d             |S )NnonstaffrG   rH   rJ   )rA   rR   s     rB   get_nonstaffzToolbarTestBase.get_nonstaffK   s?    $$Z0!!%%j&8&8&<&<m&<&TUrD   c                 ,    | j                  ddd      }|S )N	superuserT)rK   )rA   rU   s     rB   get_superuserzToolbarTestBase.get_superuserP   s    %%k4>	rD   c                 l    t         j                  j                  dddd      }|j                          |S )Nonetwotreefourchar_1char_2char_3char_4)r!   rN   createsave)rA   objs     rB   _get_example_objz ToolbarTestBase._get_example_objT   s9    %%	 & 
 	

rD   N)__name__
__module____qualname__rC   rP   rS   rV   rd    rD   rB   r=   r=   A   s    

rD   r=   z#cms.test_utils.project.nonroot_urls)ROOT_URLCONFc                      e Zd Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d        Z ed      d	        Z	 ed      d
        Z
 ed      d        Zd Zd Zd Zd Zd Zy)ToolbarMiddlewareTestF)CMS_TOOLBAR_HIDEc                 |    | j                  d | j                         d      }| j                  t        |d             y N/en/example/toolbarget_page_requestrC   
assertTruehasattrrA   requests     rB   /test_no_app_setted_show_toolbar_in_non_cms_urlszEToolbarMiddlewareTest.test_no_app_setted_show_toolbar_in_non_cms_urlsb   /    ''dmmo~N34rD   c                     t        ddd      }| j                  || j                               }| j                  t	        |d             y )Nfoocol_two.htmlenrp   r   rr   rC   rs   rt   rA   pagerv   s      rB   +test_no_app_setted_show_toolbar_in_cms_urlszAToolbarMiddlewareTest.test_no_app_setted_show_toolbar_in_cms_urlsg   s;    5.$7''dmmo>34rD   c                 |    | j                  d | j                         d      }| j                  t        |d             y rn   rq   ru   s     rB   Btest_app_setted_hide_toolbar_in_non_cms_urls_toolbar_hide_unsettedzXToolbarMiddlewareTest.test_app_setted_hide_toolbar_in_non_cms_urls_toolbar_hide_unsettedm   rx   rD   Tc                 |    | j                  d | j                         d      }| j                  t        |d             y rn   )rr   rC   assertFalsert   ru   s     rB   ,test_app_setted_hide_toolbar_in_non_cms_urlszBToolbarMiddlewareTest.test_app_setted_hide_toolbar_in_non_cms_urlsr   s1    ''dmmo~N)45rD   c                     t        ddd      }t        ddd|      }| j                  || j                               }| j                  t	        |d             y Nrz   r{   r|   parentrp   r}   r~   s      rB   (test_app_setted_show_toolbar_in_cms_urlsz>ToolbarMiddlewareTest.test_app_setted_show_toolbar_in_cms_urlsw   K    5.$75.$tD''dmmo>34rD   c                     t        ddd      }t        ddd|      }| j                  || j                               }| j                  t	        |d             y r   r}   r~   s      rB   0test_app_setted_show_toolbar_in_cms_urls_subpagezFToolbarMiddlewareTest.test_app_setted_show_toolbar_in_cms_urls_subpage~   r   rD   c                    ddl m} t        ddd      }|j                  j	                         }| j                  t        |            } |d       } ||       | j                  t        |d             | j                  t        |            } |d       } ||       | j                  t        |d             | j                  t        |            } |d	       } ||       | j                  t        |d             | j                  t        d
|j                  df            } |d       } ||       | j                  t        |d             y )Nr   ToolbarMiddlewarerz   r{   r|   c                     t        d      S N r	   reqs    rB   <lambda>zWToolbarMiddlewareTest.test_app_setted_show_toolbar_in_admin_endpoints.<locals>.<lambda>       L,< rD   rp   c                     t        d      S r   r	   r   s    rB   r   zWToolbarMiddlewareTest.test_app_setted_show_toolbar_in_admin_endpoints.<locals>.<lambda>   r   rD   c                     t        d      S r   r	   r   s    rB   r   zWToolbarMiddlewareTest.test_app_setted_show_toolbar_in_admin_endpoints.<locals>.<lambda>   r   rD   cms_placeholder_edit_fieldargsc                     t        d      S r   r	   r   s    rB   r   zWToolbarMiddlewareTest.test_app_setted_show_toolbar_in_admin_endpoints.<locals>.<lambda>   r   rD   )cms.middleware.toolbarr   r   pagecontent_setfirstget_requestr1   rs   rt   r4   r3   r:   pk)rA   r   r   contentrv   mids         rB   /test_app_setted_show_toolbar_in_admin_endpointszEToolbarMiddlewareTest.test_app_setted_show_toolbar_in_admin_endpoints   s*   <5.$7&&,,. ""#6w#?@ <=G34 ""#;G#DE <=G34 ""#9'#BC <=G34 ""=1MU\U_U_aeTf#gh <=G34rD   c                    ddl m} | j                  t        d            } |d       } ||       | j	                  t        |d             | j                  t        dd            } |d	       } ||       | j	                  t        |d             | j                  t        d
d            } |d       } ||       | j	                  t        |d             | j                  t        d            } |d       } ||       | j	                  t        |d             | j                  t        d            } |d       } ||       | j	                  t        |d             y )Nr   r   cms_placeholder_add_pluginc                     t        d      S r   r	   r   s    rB   r   z[ToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions.<locals>.<lambda>   r   rD   rp   cms_placeholder_edit_plugin)   r   c                     t        d      S r   r	   r   s    rB   r   z[ToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions.<locals>.<lambda>   r   rD   !cms_placeholder_clear_placeholderc                     t        d      S r   r	   r   s    rB   r   z[ToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions.<locals>.<lambda>   r   rD   cms_placeholder_move_pluginc                     t        d      S r   r	   r   s    rB   r   z[ToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions.<locals>.<lambda>   r   rD   cms_placeholder_copy_pluginsc                     t        d      S r   r	   r   s    rB   r   z[ToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions.<locals>.<lambda>   r   rD   )r   r   r   r:   rs   rt   )rA   r   rv   r   s       rB   3test_app_setted_provide_toolbar_obj_to_edit_actionszIToolbarMiddlewareTest.test_app_setted_provide_toolbar_obj_to_edit_actions   s<   < ""=1M#NO <=G34 ""=1NUZ#[\ <=G34 ""=1T[_#`a <=G34 ""=1N#OP <=G34 ""=1O#PQ <=G34rD   c                     | j                  g       5  | j                  d | j                         d      }| j                  t	        |d             d d d        y # 1 sw Y   y xY w)NCMS_INTERNAL_IPSro   rp   r   rr   rP   rs   rt   ru   s     rB   test_cms_internal_ips_unsetz1ToolbarMiddlewareTest.test_cms_internal_ips_unset   sS    ]]B]/ 	9++D$..2BNSGOOGGY78	9 	9 	9s   =AA"c                     | j                  dg      5  | j                  d | j                         d      }| j                  t	        |d             d d d        y # 1 sw Y   y xY w)Nz123.45.67.89r   ro   rp   )r   rr   rP   r   rt   ru   s     rB   "test_cms_internal_ips_set_no_matchz8ToolbarMiddlewareTest.test_cms_internal_ips_set_no_match   sX    ]]^,>]? 	:++D$..2BNSGWWi89	: 	: 	:s   =AA#c                     | j                  g d      5  | j                  d | j                         d      }| j                  t	        |d             d d d        y # 1 sw Y   y xY w)N)	127.0.0.0z	127.0.0.1z	127.0.0.2r   ro   rp   r   ru   s     rB   test_cms_internal_ips_set_matchz5ToolbarMiddlewareTest.test_cms_internal_ips_set_match   sT    ]],U]V 	9++D$..2BNSGOOGGY78	9 	9 	9s   =AA$c                     | j                  t        j                  d            5  | j                  d | j	                         d      }| j                  t        |d             d d d        y # 1 sw Y   y xY w)N)r   z127.0.0.255r   ro   rp   )r   iptoolsIpRangeListrr   rP   rs   rt   ru   s     rB   test_cms_internal_ips_iptoolsz3ToolbarMiddlewareTest.test_cms_internal_ips_iptools   s_    ]]G,?,?@\,]]^ 	9++D$..2BNSGOOGGY78	9 	9 	9   =A,,A5c                     | j                  t        j                  d            5  | j                  d | j	                         d      }| j                  t        |d             d d d        y # 1 sw Y   y xY w)N)z	128.0.0.0z128.0.0.255r   ro   rp   )r   r   r   rr   rP   r   rt   ru   s     rB   'test_cms_internal_ips_iptools_bad_rangez=ToolbarMiddlewareTest.test_cms_internal_ips_iptools_bad_range   sa    ]]G,?,?@\,]]^ 	:++D$..2BNSGWWi89	: 	: 	:r   N)re   rf   rg   r   rw   r   r   r   r   r   r   r   r   r   r   r   r   rh   rD   rB   rk   rk   _   s     .5 /5 .5 /5
 .5 /5 -6 .6 .5 /5 -5 .5 -5 .5< -5 .5B9
:
9
9
:rD   rk   FCMS_PERMISSIONc                      e Zd Zd Zd Zd Zd Z edg      d        Zd Z	d	 Z
d
 Zd Zd Zd Zd Z ed      d        Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z ed       d!        Z ed"       d#        Z d$ Z!d% Z"d& Z#d' Z$d( Z% e&d)d*d+ii,      d-        Z'd. Z(d/ Z)d0 Z*d1 Z+d2 Z,d3 Z-d<d5Z.d6 Z/d7 Z0d8 Z1d=d9Z2d: Z3 ed      d;        Z4y4)>ToolbarTestsc           
          |j                         |j                         z   }|D cg c]  }t        t        |dd             dk(  s|  }}| j	                  t        |      d       |d   S c c}w )NnamePager   r   )get_left_itemsget_right_itemsr   getattrassertEquallen)rA   rp   itemsitem	page_items        rB   get_page_itemzToolbarTests.get_page_item   sk    &&(7+B+B+DD&+`dyvt9T/UY_/_T`	`Y+| as   A+A+c                 r   | j                         }t        d      dz   }t        |t               j                        }t        |t               j                        }| j
                  j                  |||d      }| j                  |d       | j                  t        j                  |j                  v        y )N	cms_login?next=/en/admin/usernamepassworddataz
/en/admin/rV   r   r   r   USERNAME_FIELDclientpostassertRedirectsrs   r   SESSION_COOKIE_NAMEcookiesrA   r   endpointr   r   responses         rB   test_toolbar_loginzToolbarTests.test_toolbar_login   s    ""$;'*<<5."2"A"AB5."2"A"AB;;##HV^3_#`X|4448H8HHIrD   c                 :   | j                         }t        d      dz   }t        |t               j                        }| j
                  j                  ||dd      }| j                  |dd       | j                  t        j                  |j                  v        y )	Nr   r   invalidr   r   z$/en/admin/?cms_toolbar_login_error=1i.  )target_status_code)rV   r   r   r   r   r   r   r   r   r   r   r   )rA   r   r   r   r   s        rB   test_toolbar_login_errorz%ToolbarTests.test_toolbar_login_error   s    ""$;'*<<5."2"A"AB;;##HV_3`#aX'Mbef559I9IIJrD   c                 r   | j                         }t        d      dz   }t        |t               j                        }t        |t               j                        }| j
                  j                  |||d      }| j                  |d       | j                  t        j                  |j                  v        y )Nr   z?next=http://example.comr   r   /en/r   r   s         rB   &test_toolbar_login_invalid_redirect_toz3ToolbarTests.test_toolbar_login_invalid_redirect_to   s    ""$;'*DD5."2"A"AB5."2"A"AB;;##HV^3_#`Xv.448H8HHIrD   z>cms.test_utils.project.sampleapp.cms_toolbars.ToolbarWithMedia)CMS_TOOLBARSc                    t         j                  }t        j                          t        ddd      }| j	                  |      }t        |      }| j                  | j                               5  | j                  j                  |      }ddd       | j                  d       | j                  |d       |t         _        dt         _        y# 1 sw Y   DxY w)zv
        Toolbar classes can declare a media class or property
        to be rendered along with the toolbar.
        toolbar-pager{   r|   Nz'src="/static/samplemap/js/sampleapp.js"z*href="/static/samplemap/css/sampleapp.css"T)r5   toolbarsclearr   get_pagecontent_objr1   login_user_contextrV   r   rO   assertContains_discovered)rA   old_poolcms_pagepage_contentr   r   s         rB   test_toolbar_mediazToolbarTests.test_toolbar_media  s      ((~~tD//9&|4$$T%7%7%9: 	1{{x0H	1 	H&OPH&RS (#' 	1 	1s   -CCc           	         | j                  t        d      }t        ddd      }| j                  |      }| j	                  | j                               5  | j                  j                  ||j                  dt        |      d      }| j                  |j                  d       | j                  |d	       | j                  j                  ||j                  dt        |      d
z   d      }| j                  |j                  d       | j                  |d	       | j                  j                  ||j                  d|j                  d      d      }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nget_toolbarr   r{   r|   zcms.pagecontentobj_idobj_typecms_pathr      	Clipboardqcms.somemodeli  )get_admin_urlr   r   r   r   rV   r   rO   r   r1   r   status_coder   assertNotContainsget_absolute_url)rA   r   r   r   r   s        rB   (test_toolbar_request_endpoint_validationz5ToolbarTests.test_toolbar_request_endpoint_validation  sg   %%lMB~~tD//9$$T%7%7%9: !	8{{*oo 1 3L A ' H X1137+6{{*oo 1 3L AC G ' H X1137""8[9 {{&kk / ( 9 9$ ? ' H X1137C!	8 !	8 !	8s   DE;;Fc                 N   t        ddd      }| j                         }t        |j                  d|j	                  d      d      }| j                  |j                                | j                  |j                  d   |       t        |j                  d|j	                  d      d      }| j                  |j                                | j                  |j                  d   |       t        dd|j	                  d      d      }| j                  |j                                t        |j                  d	|j	                  d      d      }| j                  |j                                t        |j                  dd
d      }| j                  |j                                y )Nr   r{   r|   zcms.pager   attached_objzplaceholderapp.example1i  r  zhttps://example.com/some-path/)
r   rd   r   r   r  rs   is_validr   cleaned_datar   )rA   r   generic_objforms       rB   test_toolbar_request_formz&ToolbarTests.test_toolbar_request_form@  sv   ~~tD++- "kk" 11$7#
 
 	(**>:HE!!nn1 11$7#
 
 	(**>:KH "" 11$7#
 
 	)!kk' 11$7#
 
 	)!kk"8#
 
 	)rD   c                    | j                  d | j                         d      }t        |      }|j                          |j	                          |j                         |j                         z   }| j                  t        |      d       y )N/r   )	rr   rC   r/   populatepost_template_populater   r   r   r   )rA   rv   rp   r   s       rB   test_no_page_anonzToolbarTests.test_no_page_anonk  sn    ''dmmosCW%&&(&&(7+B+B+DDUQ'rD   c                    | j                  d | j                         d      }t        |      }|j                          |j	                          |j                         |j                         z   }| j                  t        |      d|       |j                  t        d      j                         }| j                  t        |      d|       y )Nr     Test   )rr   rP   r/   r  r  r   r   r   r   get_or_create_menur   	get_itemsrA   rv   rp   r   admin_itemss        rB   test_no_page_staffzToolbarTests.test_no_page_staffs  s    ''dnn.>DW%&&(&&(7+B+B+DDUQ.001FOYY[[)2{;rD   c                    | j                  d | j                         d      }t        |      }|j                          |j	                          |j                         |j                         z   }| j                  t        |      d       |j                  t        d      j                         }| j                  t        |      d|       y )Nr  r  r     )rr   rV   r/   r  r  r   r   r   r   r  r   r  r  s        rB   test_no_page_superuserz#ToolbarTests.test_no_page_superuser~  s    ''d.@.@.BCHW%&&(&&(7+B+B+DDUQ'001FOYY[[)2{;rD   c                     t        ddd      }| j                  || j                               }t        |      }|j	                         |j                         z   }| j                  t        |      d       y Ntestnav_playground.htmlr|   r   )r   rr   rC   r/   r   r   r   r   rA   r   rv   rp   r   s        rB   	test_anonzToolbarTests.test_anon  sc    6#8$?''dmmo>W%&&(7+B+B+DDUQ'rD   c                     t        ddd      }| j                  || j                               }t        |      }|j	                         |j                         z   }| j                  t        |      d       y r#  )r   rr   rS   r/   r   r   r   r   r&  s        rB   test_nonstaffzToolbarTests.test_nonstaff  sf    6#8$?''d.?.?.ABW%&&(7+B+B+DDUQ'rD   Tr   c           
         t        ddd      }| j                  |      }t        |      }| j                         }| j	                  |d       | j                  |dd      }| j                  |||      }t        |      }| j                  |      }|j                  D 	cg c]  }	t        t        |	dd            d	k(  r|	 }
}	| j                  t        |
      d
       d|_        |j                          | j!                  |      }| j                  |||      }t        |      }| j                  |      }|j                  D 	cg c]  }	t        t        |	dd            d	k(  r|	 }
}	| j                  t        |
      d       y c c}	w c c}	w )Nr$  r%  r|   rG   T)
can_change
can_deleter   r   	Templatesr   r   )r   r   r1   "get_staff_user_with_no_permissionsadd_permissionadd_global_permissionrr   r/   r   r   r   r   r   r   can_change_advanced_settingsrb   reload)rA   r   r   edit_url
staff_userglobal_permissionrv   rp   r   r   template_items              rB   test_template_change_permissionz,ToolbarTests.test_template_change_permission  s   6#8$?//5&|4 <<>
J6 66zd_c6d ''j(CW%&&w/	&__
vr23{B 
 
 	]+Q/ :>6  [[,
 ''j(CW%&&w/	&__
vr23{B 
 
 	]+Q/-
$
s   "F"Fc                    t        ddd      }| j                  |      }t        |      }| j                         }| j	                  |      5  | j
                  j                  |      }d d d        | j                  j                  d       | j                  |d       | j                  |d       | j                  |d       y # 1 sw Y   \xY w)Nr   r%  r|   r  z<div id="cms-top"zcms.base.css)r   r   r1   rV   r   r   rO   r   r  assertTemplateUsedr   )rA   r   r   page_edit_urlrU   r   s         rB   test_markupzToolbarTests.test_markup  s    >+@$G//5+L9&&(	$$Y/ 	6{{}5H	6--s3*?@H&9:Hn5	6 	6s   CCc                    | j                         }| j                         }t        |      }| j                  |      5  | j                  j                  d      }ddd       | j                  j                  d       |j                  j                  }| j                  t        |j                         d   j                        d       |j                         d   j                  d   }| j                  |j                  d       | j                  |j                  |       | j                  |j                  g d       t!        |      }| j                  |      5  | j                  j                  |      }ddd       | j                  |j                  d       |j                  j                  }| j                  t        |j                         d   j                        d       |j                         d   j                  d   }| j                  |j                  d	       | j                  |j                  |       | j                  |j                  d
dg       y# 1 sw Y   xY w# 1 sw Y   xY w)zm
        Checks that the "edit page" button shows up
        on non-cms pages with app placeholders.
        z/en/example/latest/Nr     r   r   Edit)cms-btnzcms-btn-actionzcms-btn-switch-editPreviewr?  zcms-btn-switch-save)rV   rd   r1   r   r   rO   r   r  wsgi_requestrp   r   r   buttonsr   urlextra_classesr3   )	rA   rU   ex1obj_edit_urlr   rp   edit_buttonobj_preview_urlpreview_buttons	            rB   $test_placeholder_buttons_on_app_pagez1ToolbarTests.test_placeholder_buttons_on_app_page  s   
 &&(	##% +3/$$Y/ 	>{{'<=H	>--s3''//W446q9AABAF--/2::1=))62,7%%@	
 15$$Y/ 	5{{|4H	5--s3''//W446q9AABAF 00215==a@,,i8++_=((-.	
1	> 	> 	5 	5s   II+I(+I4c                 T   t        ddd      }| j                  |      }t        |      }| j                         }| j	                  |      5  | j
                  j                  |      }d d d        | j                  j                  d       | j                  |d       y # 1 sw Y   8xY w)Nr   r{   r|   r  zI<div class="cms-submenu-item cms-submenu-item-title"><span>Generic</span>)
r   r   r4   rV   r   r   rO   r   r  r   )rA   r   r   page_structure_urlrU   r   s         rB   test_markup_generic_modulez'ToolbarTests.test_markup_generic_module  s    >>4@//55lC&&(	$$Y/ 	;{{'9:H	; 	--s3H&qr		; 	;s   BB'c                 x   | j                         }t        ddd      }| j                  |      }t        |      }| j	                  |      5  | j
                  j                  |      }d d d        | j                  j                  d       | j                  |d       | j                  |d       y # 1 sw Y   JxY w)Nr   r{   r|   r  zhref="LinkPlugin">zS<div class="cms-submenu-item cms-submenu-item-title"><span>Different Grouper</span>)
rV   r   r   r4   r   r   rO   r   r  r   )rA   rU   r   r   rL  r   s         rB   test_markup_link_custom_modulez+ToolbarTests.test_markup_link_custom_module  s    &&(	>>4@//55lC$$Y/ 	;{{'9:H	; 	--s3H&:;a	
	; 	;   B00B9c           	      <   | j                         }t        ddd      }| j                  |      }t        |      }|j	                         }| j                  t        |      d       | j                  |      5  | j                  j                  |      }d d d        | j                  j                  d       dddt        d	|d
   j                  f      z   dt        d	|d   j                  f      z   ddddf}|D ]  }| j                  ||        y # 1 sw Y   xY w)Nr   r{   r|   r=  r  za<div class="cms-submenu-item"><a data-cms-icon="copy" data-rel="copy" href="#">Copy all</a></div>z`<div class="cms-submenu-item"><a data-cms-icon="paste" data-rel="paste" href="#">Paste</a></div>zL<div class="cms-submenu-item"><a data-cms-icon="bin" data-rel="modal" href="z'admin:cms_placeholder_clear_placeholderr   r   r   z.data-name="sidebar column">Empty all</a></div>zB<div class="cms-submenu-item"><a href="/some/url/" data-rel="ajax"zYdata-on-success="REFRESH_PAGE" data-cms-icon="whatever" >Data item - not usable</a></div>zL<div class="cms-submenu-item"><a href="/some/other/url/" data-rel="ajax_add")rV   r   r   r4   get_placeholdersr   r   r   r   rO   r  r   idr   )	rA   rU   r   r   rL  placeholdersr   expected_bitsbits	            rB   test_placeholder_menu_itemsz(ToolbarTests.test_placeholder_menu_items  s+   &&(	>>4@//55lC#446\*A.$$Y/ 	;{{'9:H	; 	--s3 pnZ?|TUGYGYF\]^Z?|TUGYGYF\]^<PgZ
  ! 	/C#.	/)	; 	;s   6DDc                    t        ddd      }| j                  |      }t        |      }t        |j	                  d      j                  d      ddd      }| j                         }| j                  |      5  | j                  j                  |      }d d d        | j                  j                  d	       |j                         j                  }| j                  t        j                  d
|j                   z  |      d|j                   d|       | j                  t        j                  d|             | j                  t        j                  d|j                   z  |             | j                  t        j                  d|             | j                  t        j                  d|             y # 1 sw Y   %xY w)Nztoolbar-page-1r{   r|   col_leftslotTestPluginAlphaalpha)languageplugin_typer]  r  z5edit_plugin.+/en/admin/cms/placeholder/edit-plugin/%sz&/en/admin/cms/placeholder/edit-plugin/z not found in z3move_plugin.+/en/admin/cms/placeholder/move-plugin/z:delete_plugin.+/en/admin/cms/placeholder/delete-plugin/%s/z1add_plugin.+/en/admin/cms/placeholder/add-plugin/z4copy_plugin.+/en/admin/cms/placeholder/copy-plugins/)r   r   r1   r   rR  rO   rV   r   r   r   r  renderrendered_contentrs   researchr   )rA   r   r   r:  plugin_1rU   r   response_texts           rB   test_markup_plugin_templatez(ToolbarTests.test_markup_plugin_template1  sq   +^TB//5+L9!!$'+++<t)
 &&(	$$Y/ 	6{{}5H	6--s3 )::IIMPXP[P[[]jkJR++Wde	
 			"WYfghIIRU]U`U``bop	
 			"UWdef		"XZghi	6 	6s   9F88Gc                    t        ddd      }| j                         }|j                  j                         j                  dk(  sJ | j                  ||d      }t        |      }| j                  |j                         y )Nr   r%  r|   zCan change pager  )	r   rP   rL   rO   r   rr   r/   rs   show_toolbar)rA   r   rF   rv   rp   s        rB   test_show_toolbar_to_staffz'ToolbarTests.test_show_toolbar_to_staffI  sq    >+@$G %%))+004EEEE''eS9W%,,-rD   c                    d }t        ddd      }t        dd|      }|j                  d      }|j                         }t	        |      }| j                         }| j                  j                  |       | j                  j                  |      }|j                  d   j                  }	|	d   }
|
j                  d	   }|j                  |j                  d         }|j                  |j                  d         }|
j                  d
   }|j                  d   }|j                         }| j                  |j                  j!                         d       | j                  |j                  j!                         d       | j                  |j"                  j%                  d      d    ||j&                               | j                  |j                  j!                         d       | j                  |j"                  j%                  d      d    ||j&                               | j                  |j                  j!                         d       | j                  |d   t)        d|j&                  f             y)zV
        The urls to copy and remove translations should be linked correctly.
        c                     t        d| f      S )Ncms_pagecontent_deleter   r9   r   s    rB   get_delete_urlzhToolbarTests.test_remove_and_copy_urls_are_correctly_associated_with_pagecontent.<locals>.get_delete_urlU  s     !9FFrD   zenglish-pager%  r|   dezgerman contentcms_toolbarzlanguage-menur   zdelete translationz	german...?z
english...zfrom germanactioncms_pagecontent_copy_languager   N)r   r   get_content_objget_languagesr1   rP   r   force_loginrO   contextmenusr   indexget_contextr   r   lowerrC  splitr   r:   )rA   rn  r   german_contentenglish_contentpage_languagesr3  rF   r   rz  language_menudeletegerman_deleteenglish_deletecopycopy_germancopy_german_contexts                    rB   Ctest_remove_and_copy_urls_are_correctly_associated_with_pagecontentzPToolbarTests.test_remove_and_copy_urls_are_correctly_associated_with_pagecontentQ  s   	G >+@$G,T3CTJ..t4++-&7 &;;??8,  /55o.$$R(^%9%9$%?@n&:&:4&@A""2&jjm)557**,.BC++113[A**005a8.IZIZ:[\,,224lC++11#6q9>/J\J\;]^))//1=A)9ARAR@TU	
rD   c                     t        ddd      }| j                  |      }t        |      }| j                  || j	                         |      }t        |      }| j                  |j                         y Nr   r%  r|   )r   r   r1   rr   rP   r/   rs   rh  rA   r   r   r3  rv   rp   s         rB   test_show_toolbar_staffz$ToolbarTests.test_show_toolbar_staffx  sb    >+@$G//5&|4''dnn.>IW%,,-rD   c                     t        ddd      }| j                  |      }t        |      }| j                  || j	                         |      }t        |      }| j                  |j                         y r  )r   r   r1   rr   rS   r/   r   rh  r  s         rB   test_hide_toolbar_non_staffz(ToolbarTests.test_hide_toolbar_non_staff  sf    >+@$G//5&|4''d.?.?.A8LW%--.rD   c                 n   t        ddd      }| j                  || j                         d      }| j                  |j                  j                  d             t        |      }| j                  |j                         | j                  |j                         | j                  |j                         y Nr   r%  r|   Tdisablecms_toolbar_disabled)r   rr   rP   rs   sessionrO   r/   r   edit_mode_activestructure_mode_activepreview_mode_activerA   r   rv   rp   s       rB   test_hide_toolbar_disabledz'ToolbarTests.test_hide_toolbar_disabled  s    >+@$G''dnn.>'M++,BCDW%112667445rD   c                 <   t        ddd      }| j                  |      }t        |      }| j                  || j	                         |d      }| j                  |j                  j                  d             t        |      }| j                  |j                         y r  )r   r   r1   rr   rP   r   r  rO   r/   rs   rh  r  s         rB   $test_show_disabled_toolbar_with_editz1ToolbarTests.test_show_disabled_toolbar_with_edit  s    >+@$G//5&|4''dnn.>RV'W,,-CDEW%,,-rD   c                    t        ddd      }| j                  || j                         dd      }| j                  |j                  j                  d             t        |      }| j                  |j                         y )Nr   r%  r|   TF)r  persistr  )r   rr   rP   r   r  rO   r/   rh  r  s       rB   %test_hide_toolbar_disabled_no_persistz2ToolbarTests.test_hide_toolbar_disabled_no_persist  sn    >+@$G''dnn.>V['\,,-CDEW%--.rD   c                 2   | j                  ddd      }t        ||j                        }t        ddd      }|j	                          t        d      }| d}| j                  j                  |||d      }| j                  ||j                         d	
       y )Nrp   Tr   r%  r|   r   z?next=https://notyourdomain.comr   F)fetch_redirect_response)
rK   r   r   r   set_as_homepager   r   r   r   r  )rA   userr   r   	login_urlr   r   s          rB   &test_toolbar_login_redirect_validationz3ToolbarTests.test_toolbar_login_redirect_validation  s      D$74!4!45>+@$GK(	[ ?@;;##H8QY.Z[Xt'<'<'>X]^rD   )CMS_TOOLBAR_ANONYMOUS_ONc                    t        ddd      }dj                  |j                         t        d            }| j                  j                  |      }| j                  |j                  d       | j                  |d       y )Nr   r%  r|   z{}?{}TOOLBAR_URL__ENABLEr  cms-toolbar)	r   formatr  r7   r   rO   r   r  r   )rA   r   page_urlr   s       rB   !test_show_toolbar_login_anonymousz.ToolbarTests.test_show_toolbar_login_anonymous  sh    >+@$G>>$"7"7"9?K`;ab;;??8,--s3Hm4rD   Fc                     t        ddd      }| j                  j                  |j                               }| j	                  |j
                  d       | j                  |d       y )Nr   r%  r|   r  r  )r   r   rO   r  r   r  r  )rA   r   r   s      rB   )test_hide_toolbar_login_anonymous_settingz6ToolbarTests.test_hide_toolbar_login_anonymous_setting  sR    >+@$G;;??4#8#8#:;--s3x7rD   c                    t        d      5  | j                  | j                               5  | j                  j	                  d      }| j                  |j                  d       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)NTr   z/en/admin/logout/r  )r   r   rP   r   r   rs   r  )rA   r   s     rB   test_admin_logout_staffz$ToolbarTests.test_admin_logout_staff  sw    d3 	;(()9: ;;;++,?@ 4 4c:;	; 	;; ;	; 	;s"    B8A6%B6A?	;BBc                     t        ddd      }| j                  |t                     }t        |      }| j	                  |j
                         y r  )r   rr   r   r/   r   rh  r  s       rB   test_show_toolbar_without_editz+ToolbarTests.test_show_toolbar_without_edit  sC    >+@$G''mo>W%--.rD   c                 X   t        ddd      }| j                  |      }t        |      }| j                         }|j                  j                         j                          | j                  |||d      }|j                  j                          | j                  |j                  |j                               |j                  j                         |j                  j                         z   }| j                  t!        |      d|       |d   j#                         }| j                  |d   j$                         | j'                  t        d	 |dd  D                     |j                  j)                  t*        d
      j#                         }| j                  t!        |      d|       y )Nr$  r%  r|   Fr     r   r   c              3   N   K   | ]  }t        |d       s|j                    yw)disabledN)rt   r  .0r   s     rB   	<genexpr>z5ToolbarTests.test_no_change_button.<locals>.<genexpr>  s     bdPTV`HaDMMbs   %%r     )r   r   r1   rP   rL   allr  rr   rp   r  r   has_change_permissionr  r   r   r   r   r  r  rs   r  r   )	rA   r   r   r3  r  rv   r   
page_itemsr  s	            rB   test_no_change_buttonz"ToolbarTests.test_no_change_button  sQ   6#8$?//5&|4~~!!#**,''dHe'L..033GLLAB..07??3R3R3TTUQ.1X'')
A//0bjnbbcoo889NPVWaac[)2{;rD   c                    | j                         }t        ddd      }| j                  |      }t        |      }t	        dd|      }t        |      }| j                  |||      }t        |      }|j                  |       |j                          |j                          | j                  t        |j                         |j                         z         d       | j                  |||d      }	t        |	      }
|
j                  |       |
j                          |
j                          | j                  t        |
j                         |
j                         z         d       y)	zO
        Tests that the buttons remain even when the language changes.
        ztest-enr%  r|   ro  ztest-de   	lang_codeN)rP   r   r   r1   r   rr   r/   
set_objectr  r  r   r   r   r   )rA   r  r   page_content_enedit_url_enpage_content_deedit_url_de
en_request
en_toolbar
de_request
de_toolbars              rB   test_button_consistency_staffz*ToolbarTests.test_button_consistency_staff  s9    ~~y*?F228<)/:-dIxH)/:**8T;G

+
o.))+Z668:;U;U;WWXZ[\**8T;RV*W

+
o.))+Z668:;U;U;WWXZ[\rD   c                 V   | j                         }t        ddd      }t               D ]  \  }}|dk7  st        |d| |        | j	                  |      }t        |      }| j                  d||      }t        |      }|j                  |       d|_	        |j                          d|_	        |j                          d|_	        |j                          t        |d       |j                         d   }	|j                         d	   }
| j                  t         |	j                                d
       | j                  t        |
j!                               t        t        d	                   | j#                  ||
j!                         D cg c]  }|j$                   c}       yc c}w )zf
        Tests that even called multiple times, admin and language buttons are not duplicated
        r$  r%  r|   ztest NFro  r   r      )rP   r   r8   r   r   r1   rr   r/   r  	populatedr  r  r2   r   r   r   r  assertInrC  )rA   r  r   codeverboser   r3  r  rp   r   langr   s               rB   test_double_menuszToolbarTests.test_double_menus  sp    ~~6#8$?/1 	@MD't|#DE$.$?	@ //5&|4**4x@
Z(<(!!!&&(d3&&(+%%'*_U__./4T^^-.4Fq4I0JKhdnn6F Gd GH Gs   F&
rY  r   Charles Babbage)CMS_PLACEHOLDER_CONFc                 x   | j                         }t        ddd      }| j                  |      }t        |      }| j	                  |      5  | j
                  j                  |      }d d d        | j                  j                  d       | j                  |d       | j                  |d       y # 1 sw Y   JxY w)Nr   r{   r|   r  r  Col_Sidebar)
rV   r   r   r1   r   r   rO   r   r  r   )rA   rU   r   r   r:  r   s         rB   test_placeholder_namez"ToolbarTests.test_placeholder_name  s    &&(	>>4@//5+L9$$Y/ 	6{{}5H	6--s3H&78Hm4		6 	6rP  c                     | j                         }| j                  |      5  | j                  j                  t              }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr  )rV   r   r   rO   r$   r   r  )rA   rU   r   s      rB   test_user_settingszToolbarTests.test_user_settings  s\    &&(	$$Y/ 	8{{';<HX1137	8 	8 	8s   <A''A0c                 ~   t        ddd      }| j                  |      }t        |      }| j                         }| j	                  |      5  | j
                  j                  |      }| j                  |j                  d       t        j                  j                  |      }d|_        |j                          | j                  d      5  | j
                  j                  |      }| j                  |j                  d       | j                  |d	       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)
Nr$  r%  r|   r  )r  it))r|   english)	LANGUAGESz/it/)r   r   r1   rV   r   r   rO   r   r  r   rN   r^  rb   r   r  )rA   r   r   r:  rU   r   settings          rB   test_remove_langzToolbarTests.test_remove_lang#  s   6#8$?//5+L9&&(	$$Y/ 		9{{}5HX1137"**..I.>G#GLLN)=> 9;;??=9  !5!5s;&&x89		9 		99 9		9 		9s&   BD3A
D'D3'D0	,D33D<c                 j   t        ddd      }| j                  || j                         d      }t        |      }|j	                          |j                          |j                  t        d      }|j                  dt        d       }|s|j                  t        t              dz   }|j                  dd|	       |j                  d
t              }| j                  t        |      t        |      dz          |j                  d
d
|	       |j                  dt              }| j                  ||       y )Nr   r%  r|   r  TestAppMenuz
menu-alpha)
identifierr   )positionz
menu-gammaz	menu-beta)r   rr   rP   r/   r   r   r  r    get_alphabetical_insert_positionr-   
find_firstr*   r   r   int)rA   r   rv   rp   
admin_menualpha_positiongamma_positionbeta_positions           rB   %test_get_alphabetical_insert_positionz2ToolbarTests.test_get_alphabetical_insert_position3  s   >+@$G''dnn.>DW% !//0E}U
 $DD\SZ\`a '225EY2Z]^^N%%lL>%Z $DD\SZ[^,c..AA.EF%%lL>%Z #CCKQXY7rD   c                    t        ddd      }| j                  || j                         d      }t        |      }|j	                  d      }|j	                  dd|j
                  d      }| j                  ||       | j                  |j                  d       | j                  t        |j                               d       y )	Nr   r%  r|   r  r$  r  r=  sider  )
r   rr   rP   r/   r  RIGHTr   r   r   r   rA   r   rv   rp   menu1menu2s         rB   test_out_of_orderzToolbarTests.test_out_of_orderM  s    >+@$G''dnn.>DW%**62**66XY*Z&V,W4467;rD   c                    t        ddd      }| j                  || j                         d      }t        |      }|j	                  dd|j
                  d      }|j	                  d	d
|j
                  d      }| j                  |j                         j                  |      d       | j                  |j                         j                  |      d       y )Nr   r%  r|   r  r  Menu1rq  r  r  Menu2   r=  )	r   rr   rP   r/   r  LEFTr   r   r{  r  s         rB   test_negative_position_leftz(ToolbarTests.test_negative_position_leftX  s    >+@$G''dnn.>DW% **7G',,Y[*\**7G',,Y[*\//177>B//177>BrD   c                 &   t        ddd      }| j                  || j                         d      }t        |      }|j	                  dd|j
                         |j	                  dd	|j
                         |j	                  d
d|j
                  d      }|j	                  dd|j
                  d      }| j                  |j                         j                  |      d       | j                  |j                         j                  |      d       y )Nr   r%  r|   r  r  r  )r  r  r  menu3Menu3rr  r  menu4Menu4rq  r  r  )	r   rr   rP   r/   r  r  r   r   r{  )rA   r   rv   rp   r  r   s         rB   test_negative_position_rightz)ToolbarTests.test_negative_position_rightc  s    >+@$G''dnn.>DW% 	""7G'--"H""7G'--"H**7G'--Z\*]**7G'--Z\*]00288?C00288?CrD   Nc           
         t        |      }|j                          |j                  |      j                         D ci c]  }t	        t        |dd            | }}| j                  |t        |             |Ht        d ||   j                         D              }| j                  t        |      t        |             y y c c}w )Nr   |c              3   H   K   | ]  }t        t        |d d              yw)r   r  N)r   r   r  s     rB   r  z/ToolbarTests.assertMenuItems.<locals>.<genexpr>y  s#      :>	'$45s    ")
r/   r  get_menur  r   r   r  listr   sorted)	rA   rv   menu_idr   r   rp   r   menusub_menus	            rB   assertMenuItemszToolbarTests.assertMenuItemsp  s    W%  ((1;;=
 gdFC0147
 
 	dDJ' BFt*BVBVBX H VH-ve}=	 
s   Cc                    t        ddd      }t        dd|       t        dd|       | j                  |      }t        |      }| j	                  || j                         |      }| j                  |t        d	g d
       dddddgddddddgi}| j                  |      5  | j                  |t        d	ddg       d d d        y # 1 sw Y   y xY w)Nr   r%  r|   de pagero  titler^  r   fr pagefrzDelete Translation)	German...
English...	French...r   EnglishT)r  r   	fallbackspublicFrenchr  r   r  )CMS_LANGUAGESr  r  )	r   r   r   r1   rr   rP   r  r   r   )rA   r   r  r  rv   reduced_langss         rB   test_remove_languagez!ToolbarTests.test_remove_language~  s    14
 	)dF)dF2248)/:''dnn.>L-/C4	
  %"&"	 !$"
  ]]]7 	  13G{+	 	 	s   $CCc                 8   t        ddd      }| j                  |      }t        |      }| j                  || j	                         |      }| j                  |t        dg d       t        dd|       t        d	d
|       | j                  |t        dddg       y )Ntbpr%  r|   zAdd Translation)r  Brazilian Portuguese...r     Español...r  ro  r  r  r  r   r!  )r   r   r1   rr   rP   r  r   r   )rA   r   r   r3  rv   s        rB   test_add_languagezToolbarTests.test_add_language  s    5"7>//5&|4''dnn.>I-/@R	

 	)dF)dF-/@&8	
rD   c                 j   t        ddd      }| j                  |      }t        |      }t        dd|d      }t        |      }t	        |j
                  j                  d      d	dd
       t        dd|d      }t	        |j
                  j                  d      d	dd       | j                         }| j                  |||      }| j                  |t        t        d      ddg       | j                  |||d      }d|j                  _        | j                  |t        t        d      ddg       y )Nr  r%  r|   ro  r  )templatebodyrZ  
TextPluginzde bodyr%  r  r  zfr bodyzCopy all pluginszfrom Germanzfrom Frenchr  zfrom English)r   r   r1   r   r   rT  rO   rP   rr   r  r   _rp   toolbar_language)	rA   r   title_enr  title_der  title_frrF   rv   s	            rB   test_copy_pluginszToolbarTests.test_copy_plugins  s,   5"7>++D1)(3&tYG\])(38((,,&,9<T]^&tYG\]8((,,&,9<T]^ ''e[A-q1C/DM*	

 ''e[D'Q+/(-q1C/D]-	
rD   c                     |xs | j                   j                  }	 |j                         }|r|S |j                         S # t        t
        f$ r |cY S w xY wr?   )rv   r  get_full_nameget_usernameAttributeErrorNotImplementedError)rA   r  defaultr   s       rB   r0  zToolbarTests.get_username  sZ    (t||((	%%'D((** 34 	N	s   A  A   AAc           
      R   | j                         }|j                         rd|_        d|_        |j	                          t        ddd      }| j                  |      }t        |      }| j                  ||d       | j                  |      5  | j                  j                  |      }|j                  d   j                  }|j                  t              }| j!                  |j#                  t$        t'        d      | j)                  |      z               d	d	d	       d
|_        d|_        |j	                          | j                  ||d       | j                  |      }t        |      }| j                  |      5  | j                  j                  |      }|j                  d   j                  }|j                  t              }| j!                  |j#                  t$        t'        d      | j)                  |      z               d	d	d	       y	# 1 sw Y   xY w# 1 sw Y   y	xY w)z
        Tests that the Logout menu item includes the user's full name, if the
        relevant fields were populated in auth.User, else the user's username.
        r   homer%  r|   r  rv   	Logout %sr   NSuperUser)rV   r/  
first_name	last_namerb   r   r   r1   rr   r   r   rO   ry  rp   r  r   rs   r  r)   r(  r0  )rA   rU   r   r   r:  r   rp   r  s           rB   test_toolbar_logoutz ToolbarTests.test_toolbar_logout  s   
 &&(	 ""$#%I "$INN6#8$?//5+L9dIs3
 $$Y/ 	q{{}5H&&y199G 334IJJOOJ11(;RVRcRcdmRnAn1op		q  '	$	dIs3//5+L9$$Y/ 	q{{}5H&&y199G 334IJJOOJ11(;RVRcRcdmRnAn1op		q 	q#	q 	q"	q 	qs   BH=BHHH&c                 f   | j                         }t        ddd      }t        ddd|      }| j                  |      }t        |      }t        ddd|       t        ddd|d	      }| j                  |      }t        |      }t        d
dd|      }	| j                  |	      }
t        |
      }t        j
                  j                  |	d|       | j                  |	|d       | j                  |      5  | j                  j                  |      }|j                  d   j                  }t        d      | j                  |      z  }|j                  t               }| j#                  |j%                  t&        |      j(                  j*                         | j                  j                  |      }|j                  d   j                  }|j                  t               }| j-                  |j%                  t&        |      j(                  j*                  d       | j                  j                  |      }|j                  d   j                  }|j                  t               }| j-                  |j%                  t&        |      j(                  j*                  d       ddd       y# 1 sw Y   yxY w)aQ  
        Tests the logount AjaxItem on_success parameter in four different conditions:
         * published page: no redirect
         * unpublished page: redirect to the home page
         * published page with login_required: redirect to the home page
         * published page with view permissions: redirect to the home page
        r5  r%  r|   internalr   unpublishedlogin_restrictedT)r   login_requiredview_restricted)r   can_viewr  r  rv   r6  r7  N)rV   r   r   r1   r   rN   ra   rr   r   r   rO   ry  rp   r(  r0  r  r   rs   r  r)   r   
on_successr   )rA   rU   page0page1page1_contentpage1_edit_urlpage3page3_contentpage3_edit_urlpage4page4_contentpage4_edit_urlr   rp   	menu_namer  s                   rB   test_toolbar_logout_redirectz)ToolbarTests.test_toolbar_logout_redirect  sa    &&(	F$94@J(=t#(*007,];M#8$uM.0Et#(?007,];-/Dd#(*007,];%%54+4 	& 	6eY4$$Y/ 	c{{~6H&&y199G+):):9)EEI 334IJJOOJ11(1KPP[[\ {{~6H&&y199G 334IJJZ228)2LQQ\\^ab {{~6H&&y199G 334IJJZ228)2LQQ\\^ab%	c 	c 	cs   5F)J''J0r?   r   )5re   rf   rg   r   r   r   r   r   r   r	  r  r  r  r!  r'  r)  r7  r;  rJ  rM  rO  rW  rf  ri  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-  r0  r<  rP  rh   rD   rB   r   r      s   JKJ %e$fg( h((&8P)*V(	<	<(( d+%0 ,%0N6&
P
s
 />j0.%
N./6./_ 55 65 68 78;/<(]4I6 Z&J[A\4]^
5 _
589 84	<	CD>#J
"
2	+qZ d+-c ,-crD   r   c                   :     e Zd Z fdZ fdZd Zd Zd Z xZS )ToolbarModeTestsc                     t         |           t        ddd      | _        | j	                  | j                        | _        y )Nr5  r%  r|   )supersetUpr   r   r   r   rA   	__class__s    rB   rU  zToolbarModeTests.setUp7  s4    (=tD	 44TYY?rD   c                 V    | j                   j                          t        |           y r?   )r   r  rT  tearDownrV  s    rB   rY  zToolbarModeTests.tearDown<  s    		rD   c                    t        | j                        }| j                  | j                               5  | j                  j                  |      }|j                  d   j                  }ddd       | j                  j                         | j                  |j                         | j                  |j                         y# 1 sw Y   [xY w)zOnly edit mode is activerv   N)r1   r   r   rV   r   rO   ry  rp   rs   r  r   r  r  )rA   r:  r   rp   s       rB   test_edit_modezToolbarModeTests.test_edit_mode@  s    +D,=,=>$$T%7%7%9: 	:{{}5H&&y199G	: 	001667445	: 	:   5CCc                    t        | j                        }| j                  | j                               5  | j                  j                  |      }|j                  d   j                  }ddd       | j                  j                         | j                  |j                         | j                  |j                         y# 1 sw Y   [xY w)zOnly preview mode is activerv   N)r3   r   r   rV   r   rO   ry  rp   r   r  r  rs   r  )rA   page_preview_urlr   rp   s       rB   test_preview_modez"ToolbarModeTests.test_preview_modeK  s    1$2C2CD$$T%7%7%9: 	:{{'78H&&y199G	: 	112667334	: 	:r\  c                    t        | j                        }| j                  | j                               5  | j                  j                  |      }|j                  d   j                  }ddd       | j                  j                         | j                  |j                         | j                  |j                         y# 1 sw Y   [xY w)z!Structure AND edit mode is activerv   N)r4   r   r   rV   r   rO   ry  rp   rs   r  r  r   r  )rA   rL  r   rp   s       rB   test_structure_modez$ToolbarModeTests.test_structure_modeV  s    5d6G6GH$$T%7%7%9: 	:{{'9:H&&y199G	: 	001556445	: 	:r\  )	re   rf   rg   rU  rY  r[  r_  ra  __classcell__rW  s   @rB   rR  rR  6  s    @
	6	5	6rD   rR  z*cms.test_utils.project.placeholderapp_urlsc                        e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z d Z!d  Z"d! Z#d" Z$ xZ%S )#EditModelTemplateTagTestz (\?|&amp;|\\u0026)edit_fields=%sc                 z    t         j                  j                         j                          t        |           y r?   )r!   rN   r  r  rT  rY  rV  s    rB   rY  z!EditModelTemplateTagTest.tearDownf  s)    %%'rD   c                 8   | j                         }t        ddd      }| j                  |      }t        |      }t	        |      }| j                         }| j                  |||      }t        ||j                        }| j                  |j                  d       | j                  |dt	        |      z         | j                  |||      }t        ||j                        }| j                  |j                  d       | j                  |dt        |      z         y )Nr  r{   r|   r  z	href="%s")rV   r   r   r1   r3   rd   rr   r#   r   r   r  r   )	rA   rU   r   r   r3  preview_urlrE  rv   r   s	            rB   test_markup_toolbar_url_modelz6EditModelTemplateTagTest.test_markup_toolbar_url_modelj  s    &&(	6>48//5&|4,\:##% ''iBw/--s3Hk4J34O&OP''iEw/--s3Hk4G4L&LMrD   c                     | j                         }t        ddd      }| j                         }| j                  ||      }t	        ||j
                        }| j                  |d       | j                  |d       y )Nr  r{   r|   <h1>one</h1>zCMS.API)rC   r   rd   rr   r#   r   r   r  rA   r  r   rE  rv   r   s         rB   r'  z"EditModelTemplateTagTest.test_anon}  sk    }}6>48##%''d3w/Hn5x3rD   c                     | j                         }t        ddd      }| j                         }| j                  ||      }t	        ||j
                        }| j                  |d       | j                  |d       y )Nr  r{   r|   rk  zE<script data-cms-config id="cms-config-json" type="application/json">)rP   r   rd   rr   r#   r   r   rl  s         rB   test_noeditz$EditModelTemplateTagTest.test_noedit  sm    ~~6>48##%''d3w/Hn5H&mnrD   c           	      D   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }| j                  |||      }t        ||j                        }| j                  |dj                  ddd|j                               y )Nr  r{   r|   <h1><template class="cms-plugin cms-plugin-start cms-plugin-{0}-{1}-{2}-{3} cms-render-model"></template>one<template class="cms-plugin cms-plugin-end cms-plugin-{0}-{1}-{2}-{3} cms-render-model"></template></h1>placeholderappexample1r]   
rP   r   r   r1   rd   rr   r#   r   r   r  )rA   r  r   r   r3  rE  rv   r   s           rB   	test_editz"EditModelTemplateTagTest.test_edit  s    ~~6>48//5&|4##%''dH=w/  &v *h 	
rD   c                 l   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |d|j                  z         | j                  |d|j                  z         y )Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model fake "char_1" %}</h1>
{% endblock content %}
template_stringX<template class="cms-plugin cms-plugin-start cms-plugin-%s cms-render-model"></template>V<template class="cms-plugin cms-plugin-end cms-plugin-%s cms-render-model"></template>	rP   r   r   r1   rd   rr   r#   r   r   	rA   r  r   r   r3  rE  template_textrv   r   s	            rB   test_invalid_itemz*EditModelTemplateTagTest.test_invalid_item  s    ~~6>48//5&|4##% ''dH=wNfilioioo	q 	dgjgmgmm	orD   c                 l   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |d|j                  z         | j                  |d|j                  z         y )Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "char_1" as tempvar %}</h1>
{% endblock content %}
rv  rx  ry  )	rP   r   r   r1   rd   rr   r#   r   r  r{  s	            rB   test_as_varnamez(EditModelTemplateTagTest.test_as_varname  s    ~~6>48//5&|4##% ''dH=wNfilioioo	q 	dgjgmgmm	orD   c                    | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}t        |j                  dd|      }d}| j                  |||      }	t        |	|j                  |      }
| j                  |
d	|j                  j                   d
       | j                  |
d|j                   d|j                   d| d|j                   d	       | j                  |
d       | j                  |
d| d       | j                  |
d|j                   d       | j                  |
d|j                  j                   d       y)zA
        Tests the {% render_placeholder %} templatetag.
        r  r{   r|   zI'm the render placeholder bodyr&  r'  z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_placeholder instance.placeholder %}</h1>
<h2>{% render_placeholder instance.placeholder as tempvar %}</h2>
<h3>{{ tempvar }}</h3>
{% endblock content %}
rv  z,<div class="cms-placeholder cms-placeholder-z"></div>z<<h1><template class="cms-plugin cms-plugin-start cms-plugin-z" data-cms-placeholder="z"></template>6<template class="cms-plugin cms-plugin-end cms-plugin-z	<h2></h2>z<h3>z</h3>z'<script data-cms-plugin id="cms-plugin-z" type="application/json">z1<script data-cms-placeholder id="cms-placeholder-N)rP   r   r   r1   rd   r   placeholderrr   r#   r   r   placeholder_id)rA   r  r   r   r3  rE  render_placeholder_bodypluginr|  rv   r   s              rB   test_edit_render_placeholderz5EditModelTemplateTagTest.test_edit_render_placeholder  s    ~~6>48//5&|4##%"CCOO\4F]^ ''dH=wN:3??;M;M:NhW	Y 	J699+ V%%+%:%:$;=&'DVYYK}^	
 		
 	*+51	

 	5fii[@Z[	

 	?@R@R?SSmn	
rD   c                    | j                         }t        ddd      }| j                  |      }t        |      }t	        dddd      }|j                          d	}| j                  |||      }t        ||j                  |
      }| j                  |dj                  ddd|j                  t        t        |j                        d                   d}| j                  |||      }t        ||j                  |
      }| j                  |dj                  ddd|j                  t        |j                  d                   y )Nr  r{   r|   >char_1, <p>hello</p>, <p>hello</p>, <p>hello</p>, <p>hello</p>r^   r_   r`   r\   {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "char_1" "" "" 'truncatewords:2' %}</h1>
{% endblock content %}
rv  <h1><template class="cms-plugin cms-plugin-start cms-plugin-{0}-{1}-{2}-{3} cms-render-model"></template>{4}<template class="cms-plugin cms-plugin-end cms-plugin-{0}-{1}-{2}-{3} cms-render-model"></template></h1>rq  rr  r]   r=  z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "char_1" "" "" "truncatewords:2|safe" %}</h1>
{% endblock content %}
rP   r   r   r1   r!   rb   rr   r#   r   r   r  r   r   r]   r{  s	            rB   test_filtersz%EditModelTemplateTagTest.test_filters  s;   ~~6>48//5&|4^go&&( 	
 ''dH=wN F *hfUXU_U_N`bc@df	g ''dH=wN F *hcjjZ[@\^	_rD   c                    d}| j                         }t        ddd      }| j                  |      }t        |      }t	        dddd	      }|j                          | j                  |||      }t        ||j                  |
      }| j                  |dj                  ddd|j                  t        t        |j                        d                   y )Nr  r  r{   r|   r  r^   r_   r`   r\   rv  r  rq  rr  r]   r=  r  )	rA   r|  r  r   r   r3  rE  rv   r   s	            rB   test_setting_overridez.EditModelTemplateTagTest.test_setting_override:  s     ~~6>48//5&|4^go&&( 	
''dH=wN F *hfUXU_U_N`bc@df	grD   c                    | j                  dd      5  | j                         }t        ddd      }| j                  |      }t	        |      }t        ddd	d
t        j                  ddd            }|j                          d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd|j                  |j                  j                  t         rdnd                   d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd|j                  |j                  j                  d                   d}t        ||j                  |      }| j                  |dj                  ddd|j                  |j                  j                  d                   d d d        y # 1 sw Y   y xY w)NFzM. d, Y)USE_L10NDATE_FORMATr  r{   r|   r  r^   r_   r`     r   r=  r]   r^   r_   r`   
date_fieldz{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "date_field" %}</h1>
{% endblock content %}
rv  r  rq  rr  r  z
%b. %d, %Yz%b. %-d, %Yz{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "date_field" "" "" "safe" %}</h1>
{% endblock content %}
z%Y-%m-%dz{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "date_field" "" "" 'date:"Y m d"' %}</h1>
{% endblock content %}
z%Y %m %d)r   rP   r   r   r1   r!   datetimedaterb   rr   r#   r   r   r  r  strftimer6   r{  s	            rB   test_filters_datez*EditModelTemplateTagTest.test_filters_dateV  s   ]]Ey]A B	:>>#Dv~t<D33D9L*<8H"b"*"*"*&.mmD!Q&?	AC
 HHJM ++D$AG"7CFFMRH $j,NN++JLMZ\]M ++D$AG"7CFFMRH $j,NN++J79:M #7CFFMRH $j,NN++J79:uB	: B	: B	:s   GG  G)c           	         | j                         }t        ddd      }t        dddd      }|j                          d	}| j	                  ||      }t        ||j                  |
      }| j                  |dt        t        |j                        d      z         d}| j	                  ||      }t        ||j                  |
      }| j                  |dt        |j                  d      z         y )Nr  r{   r|   r  r^   r_   r`   r\   r  rv  z<h1>%s</h1>r=  z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "char_1" "" "" 'truncatewords:2|safe' "" "" %}</h1>
{% endblock content %}
)rP   r   r!   rb   rr   r#   r   r   r   r   r]   )rA   r  r   rE  r|  rv   r   s          rB   test_filters_notoolbarz/EditModelTemplateTagTest.test_filters_notoolbar  s    ~~6>48^go&&( 	
 ''d3wNH)M&:La,PP	R ''d3wNH)M#**a,HH	JrD   c                 2   | j                         }| j                         }t        |      }d}| j                  d ||      }t	        ||j
                  |      }| j                  |dj                  dd|j
                               | j                  |d       y )N{{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_icon instance %}
{% endblock content %}
rv  
  <template class="cms-plugin cms-plugin-start cms-plugin-{0}-{1}-{2} cms-render-model-icon"></template><img src="/static/cms/img/toolbar/render_model_placeholder.png"><template class="cms-plugin cms-plugin-end cms-plugin-{0}-{1}-{2} cms-render-model-icon"></template>rq  rr  z"onClose": "REFRESH_PAGE",)rP   rd   r1   rr   r#   r   r   r  )rA   r  rE  r3  r|  rv   r   s          rB   test_no_cmsz$EditModelTemplateTagTest.test_no_cms  s    ~~##%&s+ ''dH=wN !& *cff	
 	H&BCrD   c                 J   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               y )	Nr  r{   r|   r  rv  r  rq  rr  rs  r{  s	            rB   test_icon_tagz&EditModelTemplateTagTest.test_icon_tag      ~~6>48//5&|4##% ''dH=wN !& *cff	
rD   c                 p   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |d|j                   d       | j                  |d|j                   d       y )	Nr  r{   r|   a  {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_icon instance "char_1" %}

{% render_model_block instance "char_2" %}
    {{ instance }}
    <h1>{{ instance.char_1 }} - {{  instance.char_2 }}</h1>
    <span class="date">{{ instance.date_field|date:"Y" }}</span>
    {% if instance.char_1 %}
    <a href="{% url 'detail' instance.pk %}">successful if</a>
    {% endif %}
{% endrender_model_block %}
{% endblock content %}
rv  z6<script id="cms-plugin-placeholderapp-example1-char_1-z+" type="application/json" data-cms-general>z6<script id="cms-plugin-placeholderapp-example1-char_2-rz  r{  s	            rB   ,test_icon_followed_by_render_model_block_tagzEEditModelTemplateTagTest.test_icon_followed_by_render_model_block_tag  s    ~~6>48//5&|4##%  ''dH=wNDSVVHLwx	
 	DSVVHLwx	
rD   c                 J   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               y )	Nr  r{   r|   zz{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_add instance %}
{% endblock content %}
rv    <template class="cms-plugin cms-plugin-start cms-plugin-{0}-{1}-add-{2} cms-render-model-add"></template><img src="/static/cms/img/toolbar/render_model_placeholder.png"><template class="cms-plugin cms-plugin-end cms-plugin-{0}-{1}-add-{2} cms-render-model-add"></template>rq  rr  rs  r{  s	            rB   test_add_tagz%EditModelTemplateTagTest.test_add_tag  r  rD   c                 6   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	             y )
Nr  r{   r|   {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_add instance_class %}
{% endblock content %}
rv  r  rq  rr  0rs  r{  s	            rB   test_add_tag_classz+EditModelTemplateTagTest.test_add_tag_class'  s    ~~6>48//5&|4##% ''dH=wN !& *c	
rD   c                 \   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        j                  |      } |||j                  |      }	| j                  |	dj                  dd	d
             y )Nr  r{   r|   r  rv  )r   rw  r  rq  rr  r  )rP   r   r   r1   rd   rr   r"   as_viewr   r   r  )
rA   r  r   r   r3  rE  r|  rv   	view_funcr   s
             rB   test_add_tag_classviewz/EditModelTemplateTagTest.test_add_tag_classview@  s    ~~6>48//5&|4##% ''dH=''F	WO !& *c	
rD   c                    | j                         }t        ddd      }| j                  |      }t        |      }t	        ddddt        j                  dd	d	      
      }|j                          d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               | j                  |d|j                   d|j                   d       | j                  |d|j                   j#                  d      z         | j                  |dt%        d|j                  f      z         d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               | j                  |d|j                   d|j                   d       | j                  |d|j                   j#                  d      z         | j                  |dt%        d|j                  f      z         d}| j                  |||      }t        ||j                  |      }| j                  |dj                  dd|j                               | j                  |dj                  t'        d      d             y )Nr  r{   r|   r]   r^   r_   r`   r  r   r  a  {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_block instance as rendered_model %}
    {{ instance }}
    <h1>{{ instance.char_1 }} - {{  instance.char_2 }}</h1>
    {{ instance.date_field|date:"Y" }}
    {% if instance.char_1 %}
    <a href="{% url 'detail' instance.pk %}">successful if</a>
    {% endif %}
{% endrender_model_block %}
{% endblock content %}
rv  a  <template class="cms-plugin cms-plugin-start cms-plugin-{0}-{1}-{2} cms-render-model-icon"></template><img src="/static/cms/img/toolbar/render_model_icon.png"><template class="cms-plugin cms-plugin-end cms-plugin-{0}-{1}-{2} cms-render-model-icon"></template>rq  rr  a  {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_block instance as rendered_model %}
    {{ instance }}
    <h1>{{ instance.char_1 }} - {{  instance.char_2 }}</h1>
    <span class="date">{{ instance.date_field|date:"Y" }}</span>
    {% if instance.char_1 %}
    <a href="{% url 'detail' instance.pk %}">successful if</a>
    {% endif %}
{% endrender_model_block %}
{{ rendered_model }}
{% endblock content %}
zj<template class="cms-plugin cms-plugin-start cms-plugin-{}-{}-{} cms-render-model cms-render-model-block">z<h1>z - z</h1>z<span class="date">%s</span>z%Yz-<a href="%s">successful if</a>
    
<templatedetailr   a  {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_block instance %}
    {{ instance }}
    <h1>{{ instance.char_1 }} - {{  instance.char_2 }}</h1>
    <span class="date">{{ instance.date_field|date:"Y" }}</span>
    {% if instance.char_1 %}
    <a href="{% url 'detail' instance.pk %}">successful if</a>
    {% endif %}
{% endrender_model_block %}
{% endblock content %}
z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
{% render_model_block instance 'changelist' %}
    {{ instance }}
{% endrender_model_block %}
{% endblock content %}
z<template class="cms-plugin cms-plugin-start cms-plugin-{}-{}-changelist-{} cms-render-model cms-render-model-block"></template>z:"edit_plugin": "{}?language={}&amp;edit_fields=changelist""placeholderapp_example1_changelist)rP   r   r   r1   r!   r  r  rb   rr   r#   r   r  r  r   r]   r^   r  r  r   r:   r{  s	            rB   test_block_tagz'EditModelTemplateTagTest.test_block_tagZ  s   ~~6>48//5&|4hx&8==q!3LN
 ''dH=wN !& *cff	
 ''dH=wN''-v *cff(	
 	HSZZLCJJ<u&MNH&DH_H_`dHe&fgG7S[cfcicibkKlm	

 ''dH=wN''-v *cff(	
 	HSZZLCJJ<u&MNH&DH_H_`dHe&fgG7S[cfcicibkKlm	

 ''dH=wN228& *cff3	
 	HOOBCT	
rD   c           	         | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	|j                               | j                  |d
j                  ddd	|j                               d}| j                  |||      }t        ||j                  |      }| j                  |d|j                   d       | j                  |d|j                   d       y )Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "fake_field" %}</h1>
{% endblock content %}
rv  za<template class="cms-plugin cms-plugin-start cms-plugin-{}-{}-{}-{} cms-render-model"></template>rq  rr  
fake_fieldz_<template class="cms-plugin cms-plugin-end cms-plugin-{}-{}-{}-{} cms-render-model"></template>z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "" %}</h1>
{% endblock content %}
z8<template class="cms-plugin cms-plugin-start cms-plugin- cms-render-model"></template>r  rs  r{  s	            rB   test_invalid_attributez/EditModelTemplateTagTest.test_invalid_attribute  sF   ~~6>48//5&|4##% ''dH=wN & *lCFF	
 	 & *lCFF	
 ''dH=wNFsvvhNlm	o 	DSVVHLjk	mrD   c           	      L   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	|j                               y 
Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" %}</h1>
{% endblock content %}
rv  rp  rq  rr  callable_itemrs  r{  s	            rB   test_callable_itemz+EditModelTemplateTagTest.test_callable_item	  s    ~~6>48//5&|4##% ''dH=wN  &v *osvv 	
rD   c                 .   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |d|j                  z         y )Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" "char_1,char_2" "en" "" "" "dynamic_url" %}</h1>
{% endblock content %}
rv  @"edit_plugin": "/admin/placeholderapp/example1/edit-field/%s/en/rz  r{  s	            rB   test_view_methodz)EditModelTemplateTagTest.test_view_method"  s    ~~6>48//5&|4##% ''dH=wNX[^[a[aa	crD   c                    | j                         }| j                         }t        d|j                  df      }t	        d      5 }| j                  |      5  ||_        | j                  j                  |dz          d d d        | j                  |d|j                   d       t        j                  j                  j                  t        |j                               d d d        y # 1 sw Y   oxY w# 1 sw Y   y xY w)	N"placeholderapp_example1_edit_fieldr|   r   zGcms.test_utils.project.placeholderapp.models.Example1.admin_manager.getz?edit_fields=char_1z*/admin/placeholderapp/example1/edit-field/r   rm  )rP   rd   r:   r   r   r   return_valuer   rO   r   r!   admin_managerassert_called_once_withstr)rA   r  rE  r3  get_mocks        rB   ,test_edit_field_respects_content_admin_mixinzEEditModelTemplateTagTest.test_edit_field_respects_content_admin_mixin4  s    ~~##% !ESVVUYN[\] 	Oai((. B(+%+@ @AB X)STWTZTZS[[_'`a""&&>>#cff+>N	O 	OB B	O 	Os%   C7&C+=A%C7+C4	0C77D c                 .   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |d|j                  z         y )Nr  r{   r|   {% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" "char_1,char_2" "en" "" "admin:placeholderapp_example1_edit_field" %}</h1>
{% endblock content %}
rv  r  rz  r{  s	            rB   test_view_urlz&EditModelTemplateTagTest.test_view_urlA  s    ~~6>48//5&|4##% ''dH=wNX[^[a[aa	
rD   c           	      n   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }|j                  |       t        ||j                  |      }| j                  |dj                  ddd	|j                               y )
Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" "char_1,char_2" "en" "" "" "static_admin_url" %}</h1>
{% endblock content %}
rv  rp  rq  rr  r  )rP   r   r   r1   rd   rr   set_static_urlr#   r   r   r  r{  s	            rB   test_method_attributez.EditModelTemplateTagTest.test_method_attributeT  s    ~~6>48//5&|4##% ''dH=7#wN F *osvv		
rD   c                 P   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }dj                  ddd	|j                        }	| j                  ||	       y )
Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" "char_1" "en" "" "admin:placeholderapp_example1_edit_field" %}</h1>
{% endblock content %}
rv  rp  rq  rr  r  )
rP   r   r   r1   rd   rr   r#   r   r  r   )
rA   r  r   r   r3  rE  r|  rv   r   expected_outputs
             rB   test_admin_urlz'EditModelTemplateTagTest.test_admin_urlo  s    ~~6>48//5&|4##% ''dH=wN
 &!:
G 	 	Ho6rD   c           	          | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	|j                               | j                  |d
|j                  z         | j                  t        j                  | j                  dz  |j                  j                  d                   y )Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance "callable_item" "char_2" %}</h1>
{% endblock content %}
rv  rp  rq  rr  r  0/admin/placeholderapp/example1/edit-field/%s/en/r^   utf8rP   r   r   r1   rd   rr   r#   r   r   r  rs   rb  rc  edit_fields_rxr   decoder{  s	            rB   test_admin_url_extra_fieldz3EditModelTemplateTagTest.test_admin_url_extra_field  s    ~~6>48//5&|4##% ''dH=wN F *osvv		
 	H&X[^[a[a&ab		$"5"5"@(BRBRBYBYZ`BabcrD   c           	         | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	|j                               | j                  |d
|j                  z         | j                  t        j                  | j                  dz  |j                  j                  d                   | j                  t        j                  | j                  dz  |j                  j                  d                   y )Nr  r{   r|   r  rv  rp  rq  rr  r  r  r]   r  zchar_1%2Cchar_2r  r{  s	            rB   test_admin_url_multiple_fieldsz7EditModelTemplateTagTest.test_admin_url_multiple_fields  s*   ~~6>48//5&|4##% ''dH=wN F *osvv		
 	H&X[^[a[a&ab		$"5"5"@(BRBRBYBYZ`Babc		$"5"58I"I8K[K[KbKbciKjklrD   c           	      L   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |      }| j                  |dj                  ddd	|j                               y r  rs  r{  s	            rB   test_instance_methodz-EditModelTemplateTagTest.test_instance_method  s    ~~6>48//5&|4##% ''dH=wN F *osvv		
rD   c           	      N   | j                         }t        ddd      }| j                  |      }t        |      }| j	                         }d}| j                  |||      }t        ||j                  |d      }| j                  |dj                  dd	d|j                               y )
Nr  r{   r|   z{% extends "base.html" %}
{% load cms_tags %}

{% block content %}
<h1>{% render_model instance item_name %}</h1>
{% endblock content %}
r  )rw  	item_namerp  rq  rr  rs  r{  s	            rB   test_item_from_contextz/EditModelTemplateTagTest.test_item_from_context  s    ~~6>48//5&|4##% ''dH=w)8: F *osvv		
rD   c                    ddl m} |j                  t           }| j	                         }t        ddd      }| j                  |      }t        |      }| j                         }| j                  |||      }d|j                  d<   |j                  ||j                  d      }	| j                  |	d       | j                  |	d	       y )
Nr   siter  r{   r|   r]   edit_fieldszid="id_char_1"zvalue="one")django.contrib.adminr  	_registryr!   rV   r   r   r1   rd   rr   GET
edit_fieldr   r   
rA   r  exadminr  r   r   r3  rE  rv   r   s
             rB   test_edit_fieldz(EditModelTemplateTagTest.test_edit_field  s    -..*!!#6>48//5&|4##%''dH=%-M"%%gsvvt<H&67Hm4rD   c                    ddl m} |j                  t           }| j	                         }t        ddd      }| j                  |      }t        |      }| j                         }| j                  |||      }d|j                  d<   |j                  ||j                  d      }	| j                  |	j                  d       | j                  |	d	       y )
Nr   r  r  r{   r|   r_   r  r  zField char_3 not found)r  r  r  r!   rV   r   r   r1   rd   rr   r  r  r   r   r  r   r  s
             rB   test_edit_field_not_allowedz4EditModelTemplateTagTest.test_edit_field_not_allowed  s    -..*!!#6>48//5&|4##%''dH=%-M"%%gsvvt<--s3H&>?rD   c           
         d}| j                         }t        dd|      }|j                  |      }d|_        d|_        d|_        |j                          |j                          t        |      }| j                  |||      }t        ||j                  |            }|j                          | j                  |d|j                   d|j                  |       d	|j                   d       | j                  |d
|j                   d|j!                  |       d|j                   d       | j                  |d|j                   d|j#                  |       d|j                   d       | j                  |d|j                  z         y )Nr|   r  r{   z	Menu Testz	Page Testz	Main TestzP<template class="cms-plugin cms-plugin-start cms-plugin-cms-page-get_page_title-r  zN<template class="cms-plugin cms-plugin-end cms-plugin-cms-page-get_page_title-zP<template class="cms-plugin cms-plugin-start cms-plugin-cms-page-get_menu_title-zN<template class="cms-plugin cms-plugin-end cms-plugin-cms-page-get_menu_title-zK<template class="cms-plugin cms-plugin-start cms-plugin-cms-page-get_title-zI<template class="cms-plugin cms-plugin-end cms-plugin-cms-page-get_title-z<template class="cms-plugin cms-plugin-start cms-plugin-cms-page-changelist-%s cms-render-model cms-render-model-block"></template>
        <h3>Menu</h3>)rV   r   rv  
menu_title
page_titler  rb   r2  r1   rr   r;   get_pathr`  r   r   get_page_titleget_menu_title	get_title)rA   r^  r  r   r  r3  rv   r   s           rB   test_edit_pagez'EditModelTemplateTagTest.test_edit_page  s   !!#6>8<$$X.&&!

&u-''dH=7DMM($;<^_c_f_f^g h""8,-\]a]d]d\e f	
 	^_c_f_f^g h""8,-\]a]d]d\e f	
 	YZ^ZaZaYb c~~h'(WX\X_X_W` a	
 	IKO77S	
rD   )&re   rf   rg   r  rY  ri  r'  rn  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  r  r  rb  rc  s   @rB   re  re  b  s    :NN&4o
&o.o.;
z+_Zg8D:LJ@D0
2
B
2
2
4~
@-m^
2c$O
&
670d8m:
4
65 @ +
rD   re  c                       e Zd Z ed       ed      d               Z ed       ed       ed      d                      Zd Z ed       ed      d	               Zd
 Z	d Z
y)ToolbarUtilsTestCaseT)/CMS_ENDPOINT_LIVE_URL_QUERYSTRING_PARAM_ENABLEDztest-live-link)'CMS_ENDPOINT_LIVE_URL_QUERYSTRING_PARAMc                    t        ddd      }|j                         }|j                         }t        |      }t	        |      }| j                  d| |       | j                  d| |       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       | j                  |j                  d      d       y	)
z
        When the endpoint returns a value without a querystring param, one should be added to the
        url returned
        r5  r%  r|   z?test-live-link=rs  r   &r   N)r   rv  r  r1   r3   r  r   count)rA   r   r   live_urlr3  rh  s         rB   2test_add_live_url_querystring_param_no_querystringzGToolbarUtilsTestCase.test_add_live_url_querystring_param_no_querystringD  s     6#8$?++-((*&|4,\:(
3X>(
3[A,a0**3/3,a0**3/3rD   z cms.utils.urlutils.admin_reversec                    t        ddd      }|j                         }|j                  j                  }|j                  j                  }|j                         }t        j                  j                  ||      }t        d|j                  |j                  g      }t        j                  t        d| d	      5  t        |      }	d
d
d
       t        d|j                  |j                  g      }
t        j                  t        d|
 d	      5  t        |      }d
d
d
       | j                  d| 	       | j                  d|        | j!                  |	j#                  d      d       | j!                  |j#                  d      d       | j!                  |	j#                  d      d       | j!                  |j#                  d      d       y
# 1 sw Y   xY w# 1 sw Y   xY w)z
        With the endpoint returning an existing querystring param, the additional param should be appended
        to the existing with &.
        r5  r%  r|   )	app_labelmodel"cms_placeholder_render_object_editr   r:   z?base_qsp=base_value)r  N%cms_placeholder_render_object_previewz$?base_qsp=base_value&test-live-link=rs  r   r  )r   rv  _metar  
model_namer  r   rN   rO   r:   r   r   objectr(   r1   r  r   r  )rA   patched_admin_reverser   r   r  r  r  content_typebase_edit_urlr3  base_preview_urlrh  s               rB   4test_add_live_url_querystring_param_with_querystringzIToolbarUtilsTestCase.test_add_live_url_querystring_param_with_querystringY  s    6#8$?++- &&00	!''22
((*"**..*.U%&JR^RaRacocrcrQst\\%-Pd?ef 	9*<8H	9 )3<??LOO:\
 \\%BRASSg?hi 	<-l;K	< 	<XJGR<XJGU,a0**3/3,a0**3/3!	9 	9	< 	<s   =GG#G #G,c                    t        ddd      }|j                         }t        j                  j	                  |      }t               }t        |      5  t        d|j                  |j                  g      }t        d|j                  |j                  g      }ddd       t        |      }t        |      }| j                  |       | j                  |       | j                  |j                  d      d	       | j                  |j                  d      d	       | j                  |j                  d
      d	       | j                  |j                  d
      d	       y# 1 sw Y   xY w)z
        With the querystring param configured, but CMS_ENDPOINT_LIVE_URL_QUERYSTRING_PARAM_ENABLED not set True,
        don't add the querystring params
        r5  r%  r|   r  r   r  Nrs  r   r  )r   rv  r   rN   get_for_modelr   r   r:   r   r1   r3   r   r  )	rA   r   r   r  r^  expected_edit_urlexpected_preview_urlr3  rh  s	            rB   Ctest_add_live_url_querystring_param_no_querystring_setting_disabledzXToolbarUtilsTestCase.test_add_live_url_querystring_param_no_querystring_setting_disabled|  s:   
 6#8$?++-"**88F>h 	 -4LOO\__;]! $17|P\P_P_>`$ 		 '|4,\:#45&:;,a0**3/3,a0**3/3!	 	s   AE  E)c                 >   | j                         }t        j                  j                  |      }t	               }t        |      5  t        d|j                  |j                  g      }t        d|j                  |j                  g      }ddd       t        |      }t        |      }| j                  ||       | j                  ||       | j                  |j                  d      d       | j                  |j                  d      d       y# 1 sw Y   xY w)z
        With CMS_ENDPOINT_LIVE_URL_QUERYSTRING_PARAM_ENABLED set True, and
        CMS_ENDPOINT_LIVE_URL_QUERYSTRING_PARAM provided, but a content type that isn't PageContent provided,
        don't add the querystring params
        r  r   r  Nrs  r   )rd   r   rN   r	  r   r   r:   r   r0   r   r  )rA   test_objr  r^  r
  r  r3  rh  s           rB   >test_add_live_url_querystring_param_handles_wrong_content_typezSToolbarUtilsTestCase.test_add_live_url_querystring_param_handles_wrong_content_type  s     ((*"**88B>h 	 -4LOOX[[;Y! $17|PXP[P[>\$ 		 2(<MN4X?ST#45&:;,a0**3/3	 	s   ADDc                     t        ddd      }| j                  |d      }| j                  |t        |d             | j	                  t        |d             y )Nr  r{   r|   ro  )r   r   r   r2   assertIsNone)rA   r   r   s      rB   )test_get_object_for_language_one_languagez>ToolbarUtilsTestCase.test_get_object_for_language_one_language  sP    6>48//d;'>|T'RS1,EFrD   c                 d   t        ddd      }t               D ]  \  }}t        d| dd|        d| j                  |d      i}t               D ]  \  }}|dk7  st        |||      ||<    | j	                  |d   t        |d   d             | j	                  t        |d   d      |d          y )Nr  r{   r|   zNot this page ()ro  )r   r8   r   r   r   r2   )rA   r   r  r  r   s        rB   /test_get_object_for_language_multiple_languageszDToolbarUtilsTestCase.test_get_object_for_language_multiple_languages  s    6>48/1 	LMD'/'!4ndK	L $**46
 01 	NMD't|%8w%MT"	N 	d+-D\RVEWY]-^_0d1CTJLY]L^_rD   N)re   rf   rg   r   r  r   r  r  r  r  r  rh   rD   rB   r  r  C  s    tL?OP4 Q M4& tL?OP
-.4 / Q M4@46 ?OPtL4 M Q40G`rD   r  c                   $    e Zd Zd Zd Zd Zd Zy)"CharPkFrontendPlaceholderAdminTestc                 l    t        j                          t         j                  j                  t           S r?   )r   autodiscoverr  r  r    r@   s    rB   	get_adminz,CharPkFrontendPlaceholderAdminTest.get_admin  s#    zz##N33rD   c                 D   t        dd      }|j                          | j                         }t        | |      5  | j                  j                  t        d|j                  df      ddi	      }| j                  |j                  d
       ddd       y# 1 sw Y   yxY w)zd
        Tests whether the frontend admin matches the edit_fields url with alphanumeric pks
        rX   zsome-Special_slug_123)r]   slug(placeholderapp_charpksexample_edit_fieldr|   r   r  r]   r   r  N)
r    rb   rV   r&   r   rO   r:   r   r   r  rA   exrU   r   s       rB   test_url_char_pkz3CharPkFrontendPlaceholderAdminTest.test_url_char_pk  s     (
 		&&(	dI. 	8{{}5_giglglnrfs't-:H,E ' GH X1137		8 	8 	8s   ABBc                 *   | j                         }| j                         }t        | |      5  | j                  j	                  t        d|j                  df      ddi      }| j                  |j                  d       ddd       y# 1 sw Y   yxY w)	z_
        Tests whether the frontend admin matches the edit_fields url with numeric pks
        r  r|   r   r  r]   r   r  N)	rd   rV   r&   r   rO   r:   r   r   r  r  s       rB   test_url_numeric_pkz6CharPkFrontendPlaceholderAdminTest.test_url_numeric_pk  s     ""$&&(	dI. 	8{{}5Yacafafhl`m'n-:H,E ' GH X1137		8 	8 	8s   AB		Bc                     t        ddd      }| j                  |      }t        |      }| j                         }| j	                         }| j                  |||      }t        ||j                        }| j                  |j                  d       y)z
        Tests whether the admin urls triggered when the toolbar is active works
        (i.e.: no NoReverseMatch is raised) with numeric pks
        r  r{   r|   r  N)
r   r   r1   rd   rV   rr   r#   r   r   r  )rA   r   r   r3  r  rU   rv   r   s           rB   test_view_numeric_pkz7CharPkFrontendPlaceholderAdminTest.test_view_numeric_pk  s    
 6>48//5&|4""$&&(	''iBw.--s3rD   N)re   rf   rg   r  r   r"  r$  rh   rD   rB   r  r    s    48 
84rD   r  c                   $    e Zd Zd Zd Zd Zd Zy)ToolbarAPITestsc                    t               }|j                  dd      }|j                  dd      }|j                  t              }| j	                  t        |      d       |j                  t        d      }| j                  |d        | j	                  |j                  d       | j	                  |j                  |       |j                  t        d      }| j                  |d        | j	                  |j                  d       | j	                  |j                  |       |j                  t        d      }| j	                  |d        y )	NFirstzhttp://www.example.orgSecondr=  r7  r   r   Third)
r.   add_link_item
find_itemsr,   r   r   r  assertNotEqualr{  r   )rA   apir   second	all_linksresult	no_results          rB   test_find_itemzToolbarAPITests.test_find_item  s   !!'+CD""8-EFNN8,	Y+w7FD)q)e,x8FD)q)f-NN8'N:	D)rD   c                      t        d t              d      }t               }|j                  |d        |j	                  t
        d      }| j                  |d        | j                  |j                  d       y )Nc                     | S r?   rh   )xs    rB   r   z5ToolbarAPITests.test_find_item_lazy.<locals>.<lambda>	  s     rD   r  r7  r   )	r   r  r.   r+  r  r,   r-  r   r{  )rA   lazy_attributer.  r1  s       rB   test_find_item_lazyz#ToolbarAPITests.test_find_item_lazy	  sc    /k3/7.$/v6FD)q)rD   c                 *   t               j                  d      }i |_        d|_        t	               |_        t        |      }| j                  t        |j                               d       | j                  t        |j                               d       y )Nr   r|   r   )r   rO   r  LANGUAGE_CODEr   r  r/   r   r   r   r   rA   rv   rp   s      rB   test_not_is_staffz!ToolbarAPITests.test_not_is_staff	  ss     "&&v. $$W%W3356:W4467;rD   c                    t               }t        |d      }| j                  |j                  |       | j                  t	        |      d       |dz  }| j                  |j                  |       | j                  |j
                  d       y )Nr=  r  )r  r+   r   r   r  r{  )rA   r   r1  s      rB   test_item_search_resultz'ToolbarAPITests.test_item_search_result	  sn    x!$*d+Va(!d+q)rD   N)re   rf   rg   r3  r8  r<  r>  rh   rD   rB   r&  r&    s    *"*<*rD   r&  c            	       B    e Zd Z edddddddgi      d        Zd	 Zy
)TestLanguageMenur|   ))r|   r  r   r  Tr  )r:  r  r  c                     | j                  d| j                         d      }t        |      }|j                          | j	                  t
        |j                         y)z:No language menu appears if only one language is availableNr  )rr   rV   r/   r  assertNotInr   rz  r;  s      rB   test_no_language_menuz&TestLanguageMenu.test_no_language_menu)	  sL     ''d.@.@.BCHW%17==ArD   c                     | j                  d| j                         d      }t        |      }|j                          | j	                  t
        |j                         y)z>A language menu appears if more than one language is availableNr  )rr   rV   r/   r  r  r   rz  r;  s      rB   test_language_menuz#TestLanguageMenu.test_language_menu;	  sH    ''d.@.@.BCHW%.>rD   N)re   rf   rg   r   rC  rE  rh   rD   rB   r@  r@  (	  sA    &"!

B
B?rD   r@  )er  rb  unittest.mockr   r   django.confr   django.contribr   django.contrib.auth.modelsr   r   "django.contrib.contenttypes.modelsr   django.httpr
   django.template.defaultfiltersr   django.testr   django.test.clientr   django.test.utilsr   django.urlsr   django.utils.encodingr   django.utils.functionalr   django.utils.htmlr   django.utils.translationr   r   r(  r   cms.admin.formsr   cms.apir   r   r   cms.cms_toolbarsr   r   r   r   
cms.modelsr   r   ,cms.test_utils.project.placeholderapp.modelsr    r!   +cms.test_utils.project.placeholderapp.viewsr"   r#   cms.test_utils.testcasesr$   r%   $cms.test_utils.util.context_managersr&   r'   cms.toolbarr(   cms.toolbar.itemsr)   r*   r+   r,   r-   r.   cms.toolbar.toolbarr/   cms.toolbar.utilsr0   r1   r2   r3   r4   cms.toolbar_poolr5   cms.utils.compatr6   cms.utils.confr7   cms.utils.i18nr8   cms.utils.urlutilsr:   	cms.viewsr;   r=   rk   r   rR  re  r  r  r&  r@  rh   rD   rB   <module>rg     s\    	       @ : $ 8   - /  + ( $ N N . @ @  4 G \   +  * ' * - , k <  EF}:O }: G}:@ %(Rc? Rc )Rcj)6 )6X  LM]
 ]
 N]
@C`? C`L/4 /4d**h **Z?{ ?rD   