
    Bha                        d dl Z d dlZd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZ d dlmZ d dl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) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 d dl2m3Z3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z: d dl;m<Z< d dl=m>Z> d dl?m@Z@ d dlAmBZB d dlCmDZD dZE eeEd       ZF eeEd!      ZG eeEd"      ZH eeEd#      ZI eeEd$      ZJ eeEd%      ZK ed&d'      ZLd(ZM G d) d*      ZNd+ ZO G d, d-      ZP G d. d/ePej                        ZR G d0 d1eRej                        ZTy)2    N)unquoteurljoin)settings)get_user_model)AnonymousUser
Permission)Site)cache)ObjectDoesNotExist)model_to_dictHttpResponse)LocaleMiddleware)engines)Context)	testcases)RequestFactory)reverse)	urlencode)now)activateget_language)
add_plugincreate_page)ToolbarMiddleware)PagePageContent)GlobalPagePermissionPagePermissionPageUser)ContentRendererStructureRendererUserLoginContext)get_toolbar_from_request)get_cms_setting)set_current_user)admin_reverse)	menu_poolz/en/admin/cms/page/z%d/advanced-settings/z%d/permissions/zlist/z%d/move-page/%d/copy-page/z
%d/delete/z/en/admin/cms/pagecontent/zdelete-translation/z/en/admin/cms/usersettings/c                       e Zd Zd Zy)_Warningc                 <    || _         || _        || _        || _        y N)messagecategoryfilenamelineno)selfr/   r0   r1   r2   s        H/home/dcms/DCMS/lib/python3.12/site-packages/cms/test_utils/testcases.py__init__z_Warning.__init__5   s          N)__name__
__module____qualname__r5    r6   r4   r,   r,   4   s    r6   r,   c                     d fd	}t         j                  j                         D ]  }|	 d |_         t        j
                  d d  }t        j                  }t	        j                  d       	 |t        _         ||i |}|t        j
                  d d  |t        _        |S #  Y xY w# |t        j
                  d d  |t        _        w xY w)Nc                 l    t        | t              sJ  t        | j                  d   |||             y Nr   )
isinstanceWarningr,   args)r/   r0   r1   r2   filelineobserveWarnings         r4   showWarningz%_collectWarnings.<locals>.showWarning=   s3    '7+++xLLOXx9 	:r6   alwaysNN)sysmodulesvalues__warningregistry__warningsfiltersshowwarningsimplefilter)	rC   fr@   kwargsrD   vorigFiltersorigShowresults	   `        r4   _collectWarningsrU   <   s    : [[! =(,% ""1%K##H(#(*D#F#)'M  *'s   B"/B) "B&) C	c                       e Zd ZdZ fdZd Z fdZd Zd Zd Z	d Z
d	 Zd
 Zd<dZ	 	 d=dZd Zd Zd Zd Zd Zd>dZd?dZ	 	 	 d@dZd Zd Zd Zd Zd ZdAdZd ZdBdZd Zd Z d Z!dCd Z"d>d!Z#d>d"Z$dDd#Z%dEd$Z&d% Z'd& Z(d' Z)d( Z*d) Z+d* Z,d+ Z-d, Z.d>d-Z/d>d.Z0d/ Z1d0 Z2d1 Z3dFd2Z4d>d3Z5d>d4Z6d>d5Z7d>d6Z8d>d7Z9d>d8Z:d9 Z;dGd:Z<d; Z= xZ>S )HBaseCMSTestCase   c                 X    t         |           | j                          t        d       y )Nen)super
_pre_setupcreate_fixturesr   r3   	__class__s    r4   r\   zBaseCMSTestCase._pre_setup^   s!    r6   c                      y r.   r:   r3   s    r4   r]   zBaseCMSTestCase.create_fixturesc   s    r6   c                     t        j                          t        j                          t        |           t        d        y r.   )r)   clearr
   r[   _post_teardownr'   r^   s    r4   rd   zBaseCMSTestCase._post_teardownf   s)     r6   c                     t        | |      S r.   r#   r3   users     r4   login_user_contextz"BaseCMSTestCase.login_user_contextl   s    d++r6   c                 B    t         j                  j                  |      S Ncodename)r   objectsget)r3   rl   s     r4   get_permissionzBaseCMSTestCase.get_permissiono   s    !!%%x%88r6   c                 X    |j                   j                  | j                  |             y r.   )user_permissionsaddro   r3   rg   rl   s      r4   add_permissionzBaseCMSTestCase.add_permissionr   s!    !!$"5"5h"?@r6   c                 v    |j                   j                  t        j                  j	                  |             y rj   )rq   remover   rm   rn   rs   s      r4   remove_permissionz!BaseCMSTestCase.remove_permissionu   s*    $$Z%7%7%;%;X%;%NOr6   c           
          dddddddd|d	} |j                   di | t        j                  j                  di |}|j                  j                  t        j                  j                                |S )NF)	can_add
can_change
can_deletecan_publishcan_change_advanced_settingscan_change_permissionscan_move_pagecan_recover_pagerg   r:   )updater   rm   createsitessetr	   all)r3   rg   rP   optionsgpps        r4   add_global_permissionz%BaseCMSTestCase.add_global_permissionx   sr     ,1&+" %

 	  "**11<G<		dll&&()
r6   c           
          ddddddd||d	} |j                   di | t        j                  j                  di |}t        j                  j                         |_        |S )NF)	ry   rz   r{   r|   r}   r~   r   pagerg   r:   )r   r   rm   r   r	   r   r   )r3   rg   r   rP   r   pps         r4   add_page_permissionz#BaseCMSTestCase.add_page_permission   si     ,1&+"

 	  ##**5W5<<##%	r6   c                 D    t         j                  j                  ||      S )N)r   language)r   rm   rn   )r3   r   r   s      r4   get_pagecontent_objz#BaseCMSTestCase.get_pagecontent_obj   s    ""&&D8&DDr6   c                    t               }t        |dz   t               |||      }t               j                  dk7  r||t               j                  <    |di |}	|	j	                  t        |	t               j                               |	j                          |r|s|r| j                  |	       |rD|sB|r@|D ];  }
|	j                  j                  t        j                  j                  |
             = |	S )a%  
        Use this method to create users.

        Default permissions on page and text plugin are added if creating a
        non-superuser and `add_default_permissions` is set.

        Set `permissions` parameter to an iterable of permission codes to add
        custom permissios.
        z@django-cms.org)email
last_loginis_staff	is_activeis_superuserr   rk   r:   )r   dictr   USERNAME_FIELDset_passwordgetattrsave_add_default_permissionsrq   rr   r   rm   rn   )r3   usernamer   r   r   add_default_permissionspermissionsUserfieldsrg   
permissions              r4   _create_userzBaseCMSTestCase._create_user   s     ..35
 ++w66>F>#223~f~'$(8(G(GHI		L-D))$/L[) W
%%))**<*<*@*@**@*UVWr6   c                 x   |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d             |j                   j                  t        j                  j	                  d	             |j                   j                  t        j                  j	                  d
             |j                   j                  t        j                  j	                  d             y )Nadd_textrk   delete_textchange_textadd_linkdelete_linkchange_linkpublish_pageadd_pagechange_pagedelete_page)rq   rr   r   rm   rn   rf   s     r4   r   z(BaseCMSTestCase._add_default_permissions   s   !!*"4"4"8"8*"8"MN!!*"4"4"8"8-"8"PQ!!*"4"4"8"8-"8"PQ!!*"4"4"8"8*"8"MN!!*"4"4"8"8-"8"PQ!!*"4"4"8"8-"8"PQ!!*"4"4"8"8."8"QR!!*"4"4"8"8*"8"MN!!*"4"4"8"8-"8"PQ!!*"4"4"8"8-"8"PQr6   c                 T   	 t               }t               j                  dk7  rd|t               j                  <   nd|t               j                  <    t               j                  j                  di |}|S # t               j
                  $ r | j                  ddd      }Y |S w xY w)Nr   adminzadmin@django-cms.orgTr   r   r:   )r   r   r   rm   rn   DoesNotExistr   )r3   queryr   s      r4   get_superuserzBaseCMSTestCase.get_superuser   s    
	QFE..'99@n&5569On&5560N$,,00959E  ,, 	Q%%g4%PE	Qs   A4A8 8+B'&B'c                 .    | j                  ddd      }|S )(
        Used in security tests
        staffTFr   r   r3   r   s     r4   "get_staff_user_with_no_permissionsz2BaseCMSTestCase.get_staff_user_with_no_permissions   s      !!'Du!Mr6   c                 0    | j                  dddd      }|S )z/
        This is a non superuser staff
        r   TF)r   r   r   r   r   s     r4   #get_staff_user_with_std_permissionsz3BaseCMSTestCase.get_staff_user_with_std_permissions   s(     !!'Du:> " @r6   c                 .    | j                  ddd      }|S )r   standardFr   r   )r3   r   s     r4   get_standard_userz!BaseCMSTestCase.get_standard_user   s      $$Z%e$Tr6   c                 :   |s| j                         }t        t        j                  j                  j                               d   }| j                  ddd      }t        |ddg      }|||j                  <   ||d	<   t        j                  j                  d
i |S )Nr   zperms-testuserTFr   groupsrq   )exclude
created_byr:   )r   listr    _metaparentsrI   r   r   namerm   r   )r3   r   parent_link_fieldrg   datas        r4   get_staff_page_userz#BaseCMSTestCase.get_staff_page_user   s    ++-J !7!7!>!>!@A!D   ! 

 TH6H+IJ'+##$'\&&...r6   c                 p    d| j                   z  d| j                   z  |d}| xj                   dz  c_         |S )Ntest page %dtest-page-%d)titleslugparent_pagerX   )counter)r3   	parent_id	page_datas      r4   get_new_page_dataz!BaseCMSTestCase.get_new_page_data  s:    #dll2"T\\1$
	 	r6   c                     d| j                   z  d| j                   z  |st        j                  d   d   n|||r|nd |r|nt        j                  j                         d}| j                   dz   | _         |S )Nr   r   r   )r   r   r   templateparentsiterX   )r   r   	LANGUAGESr	   rm   get_current)r3   r   r   r   r   r   s         r4   get_new_page_data_dbfieldsz*BaseCMSTestCase.get_new_page_data_dbfields  sp     $dll2"T\\18@**1-a0h  &fD Ddll&>&>&@
	 ||a'r6   c                     |d   j                   |d<   |d   r|d   j                   nd|d<   d|d<   d|d<   d|d<   d|d<   d|d	<   d|d
<   |S )zConverts data created by get_new_page_data_dbfields to data
        created from get_new_page_data so you can switch between test cases
        in api.create_page and client.postr   r    r   zpagepermission_set-TOTAL_FORMSz pagepermission_set-INITIAL_FORMSz pagepermission_set-MAX_NUM_FORMSz pagepermission_set-2-TOTAL_FORMSz"pagepermission_set-2-INITIAL_FORMSz"pagepermission_set-2-MAX_NUM_FORMS)id)r3   r   s     r4   get_pagedata_from_dbfieldsz*BaseCMSTestCase.get_pagedata_from_dbfields  s     &f-00	&8A(8Ki144QS	(67	2389	4589	4589	45:;	67:;	67r6   c                     |j                  d      D ]T  }d|j                  z  }t        | | d|j                   d|j                   d|j
                   d|j                   
       V y)z.Just a helper to see the page struct.
        path   (z	), path: z	, depth: z, numchild: N)order_bylevelprintpkr   depthnumchild)r3   qsr   idents       r4   print_page_structurez$BaseCMSTestCase.print_page_structure(  sk     KK' 	D4::%E'$r$'')DII;i

|S_`d`m`m_no	r6   c                 &    dfd	 |       y )Nc                 F   |dz  }| D ]  }	D cg c]+  }|t        |||j                  j                  |d            f- }}dj                  |D cg c]  }d|z  	 c}      }t	        | |j
                   d|         |j                  |dz           y c c}w c c}w )Nr   unknownz, z%s: %rz: rX   )r   attrrn   joinr   r   children)
nodesr   r   nodebit	raw_attrsr   attrs_recextras
           r4   r   z2BaseCMSTestCase.print_node_structure.<locals>._rec2  s    DLE /afgZ]c74diimmC6S#TUg	g		y"It8d?"IJ

|2eW56T]]EAI.	/g"Is   0BB
)r   r:   )r3   r   r   r   s     `@r4   print_node_structurez$BaseCMSTestCase.print_node_structure1  s    	/ 	Ur6   c                 n    	  |j                   di |S # t        $ r Y nw xY w| j                  d|z        )Nz'ObjectDoesNotExist raised for filter %sr:   rn   r   failureExceptionr3   r   filters      r4   assertObjectExistz!BaseCMSTestCase.assertObjectExist<  sE    	266#F##! 		##$MPV$VWWs    	  c                 n    	  |j                   di | | j                  d|z        # t        $ r Y y w xY w)Nz+ObjectDoesNotExist not raised for filter %sr:   r   r   s      r4   assertObjectDoesNotExistz(BaseCMSTestCase.assertObjectDoesNotExistC  sF    	BFFV ##$QTZ$Z[[ " 		s   ( 	44c                 (   ddl m} ||j                  }||j                  |j                  ddd}|j                         d   }|j                         d   }|j                  }	|j                  |j                        }
 |||
|	      }| j                  |j                        5  | j                  j                  t        d|j                  z  z   |      }d d d        | j                  j                  d       t        j                   |j"                  j%                  d            }| j'                  t(        j*                  j-                         |d	   
      }| j'                  |j.                  j1                  |	      |       |S # 1 sw Y   xY w)Nr   )get_available_slugon)positiontargetsource_sitecopy_permissionscopy_moderation)SITE_IDr*      utf8r   r   )r   )r   )cms.utils.pager  r   r   site_idget_urlsr   get_path_for_baser   r   clientpostURL_CMS_PAGEassertEqualstatus_codejsonloadscontentdecoder   r   rm   r   urlsr   )r3   r   target_pager  target_siter  r   
source_url
parent_urlr   copied_page_pathnew_page_slugresponseresponse_datacopied_pages                  r4   	copy_pagezBaseCMSTestCase.copy_pageJ  sl   5%**K !!nn<< $#
 ]]_Q'
 ))+A.
&&%77
H*;8H(S]];>>]2 	X{{''7P(PRVWH	X--s3

8#3#3#:#:6#BC,,LLT" - 
 	{//666IP]^	X 	Xs   $1FFc                 X    t        |i |}|j                          |j                         S r.   )r   set_as_homepagereload)r3   r@   rP   homepages       r4   create_homepagezBaseCMSTestCase.create_homepageh  s*    //  "  r6   c                 H    |j                  ||       | j                  |      S r.   )	move_pagereload_page)r3   r   r  r  s       r4   r,  zBaseCMSTestCase.move_pagem  s!    {H-%%r6   c                 $    | j                  |      S )zH
        Returns a fresh instance of the page from the database
        )r(  )r3   r   s     r4   r-  zBaseCMSTestCase.reload_pageq  s     {{4  r6   c                 b    |j                   j                  j                  |j                        S )Nr  )r_   rm   rn   r   )r3   objs     r4   r(  zBaseCMSTestCase.reloadw  s$    }}$$((CFF(33r6   c                 *    t        t        d            S )Nz
pages-root)r   r   ra   s    r4   get_pages_rootzBaseCMSTestCase.get_pages_rootz  s    w|,--r6   c                 p    |s| j                         }i }| j                  ||      }||d<   t        |      S )N)r   request)r2  get_requestr   )r3   r   r   contextr4  s        r4   get_contextzBaseCMSTestCase.get_context}  sB    &&(D""4d"3$	wr6   c                 @    |xs | j                         }t        |      S r.   )r5  r!   r3   r4  s     r4   get_content_rendererz$BaseCMSTestCase.get_content_renderer  s     /T--/w''r6   c                 @    |xs | j                         }t        |      S r.   )r5  r"   r9  s     r4   get_structure_rendererz&BaseCMSTestCase.get_structure_renderer  s     /T--/ ))r6   c                    t               }|s| j                         }|s7t        j                  rt        j                  d   d   }nt        j
                  }|r|j                  ||      }n|j                  |      }| j                  j                  |_	        t        | dt                     |_        ||_        | |_        |r||_        nd |_         G d d      } |       |_        |S )Nr   rg   c                   &    e Zd Zd Zd ZddZd Zy)0BaseCMSTestCase.get_request.<locals>.MockStoragec                      yr=   r:   ra   s    r4   __len__z8BaseCMSTestCase.get_request.<locals>.MockStorage.__len__  s    r6   c                     t        g       S r.   )iterra   s    r4   __iter__z9BaseCMSTestCase.get_request.<locals>.MockStorage.__iter__  s    Bxr6   c                      y r.   r:   )r3   r   r/   
extra_tagss       r4   rr   z4BaseCMSTestCase.get_request.<locals>.MockStorage.add      r6   c                      y r.   r:   )r3   r"  s     r4   r   z7BaseCMSTestCase.get_request.<locals>.MockStorage.update  rG  r6   Nr   )r7   r8   r9   rA  rD  rr   r   r:   r6   r4   MockStorager?    s     r6   rJ  )r   r2  r   USE_I18Nr   LANGUAGE_CODEr  rn   r  sessionr   r   rg   _dont_enforce_csrf_checkscurrent_page	_messages)	r3   r   r   	post_dataenforce_csrf_checksr   factoryr4  rJ  s	            r4   r5  zBaseCMSTestCase.get_request  s     "&&(D  #--a03#11ll43Gkk$'G++--tV]_= (0C,C)#'G #'G 	 	 (Mr6   c                    |xs |xr |j                         }t               j                  |      }i |_        ||_        ||_        |j                  j                         |_        |rd |j                  t        d      <   |||j                  t        d      <   ||_	        t        d       } ||       t        d       } ||       t        |d      r|j                  j                          |S )NCMS_TOOLBAR_URL__DISABLECMS_TOOLBAR_URL__PERSISTc                     t        d      S Nr   r   reqs    r4   <lambda>z2BaseCMSTestCase.get_page_request.<locals>.<lambda>  s    <+; r6   c                     t        d      S rX  r   rY  s    r4   r[  z2BaseCMSTestCase.get_page_request.<locals>.<lambda>  s    L,< r6   toolbar)get_absolute_urlr   rn   rM  rg   rL  GETcopyr&   rO  r   r   hasattrr]  populate)	r3   r   rg   r   	lang_codedisablepersistr4  mids	            r4   get_page_requestz BaseCMSTestCase.get_page_request  s    7t7 5 5 7 "&&t, )kk&&( GKGKK(BCDGNGKK(BCD#;<G <=G7I&OO$$&r6   c                 r   g }t        |j                  |g|i |}t        |      }|s| j                  d       |D ]b  }|j                  |k(  r|j
                  |u r |S |j
                  t        fvs7| j                  d|j                   d|j
                   d       d | j                  d| d       |S )NzNo warnings emittedzUnexpected warning r   )zWarning z not given.)rU   appendr   failr/   r0   DeprecationWarning)	r3   r0   r/   rO   r@   rP   warningsShownrT   warnings	            r4   failUnlessWarnszBaseCMSTestCase.failUnlessWarns  s    !-"6"6KDKFKM*II+,$ 	7G')g.>.>(.J 	 ##,>+AAII 3GOO3DBwGWGWFXXYZ[	7 II	56r6   c                 2    t         d   j                  |      S Ndjango)r   from_stringr3   r   s     r4   load_template_from_stringz)BaseCMSTestCase.load_template_from_string  s    x ,,X66r6   c                 2    t         d   j                  |      S rq  )r   get_templatert  s     r4   rw  zBaseCMSTestCase.get_template  s    x --h77r6   c                 H    | j                  |      }|j                  ||      S r.   )ru  render)r3   r   r6  r4  template_objs        r4   render_template_objz#BaseCMSTestCase.render_template_obj  s%    55h?""7G44r6   c                 >   ddl m} t        |j                               D ]k  \  }}|j                  |   j
                  j                  t        j                  v s:t        j                  |j                  |   j
                  j                  = m |j                          y )Nr   )apphook_pool)
cms.apphook_poolr}  r   get_apphooksappsr_   r8   rG   rH   rc   )r3   r}  r   labels       r4   apphook_clearzBaseCMSTestCase.apphook_clear  s|    1 9 9 ;< 	NKD%  &00;;s{{JKK 1 1$ 7 A A L LM	N 	r6   c                 p    |j                   }|j                   d|j                   d| }t        ||      S )N_r@   )r   	app_label
model_namer(   )r3   modelactionr@   optsurl_names         r4   get_admin_urlzBaseCMSTestCase.get_admin_url  s8    {{nn%Qt&7qAXD11r6   c                 d    | j                         }t        ddd|       t        ddd|d      }|S )Nhomenav_playground.htmlrZ   )r   r   )r   
reverse_id)r   r   )r3   r   r   s      r4   get_permissions_test_pagez)BaseCMSTestCase.get_permissions_test_page  sF    ""$!		
 !$
 r6   c                 D    ddl m} |j                  |      j                  S )Nr   )plugin_pool)cms.plugin_poolr  
get_pluginr  )r3   plugin_typer  s      r4   get_plugin_modelz BaseCMSTestCase.get_plugin_model  s    /%%k2888r6   c                 Z    t        d      }d|xs
 t               i}|dz   t        |      z   S )Ncms_pagecontent_changelistr   ?)r(   r   r   )r3   r   endpointr   s       r4   get_pages_admin_list_uriz(BaseCMSTestCase.get_pages_admin_list_uri  s1     !=>H67#~	$//r6   c                 d    t        d      }d|i}|r|j                  |d<   |dz   t        |      z   S )Ncms_pagecontent_addr   cms_pager  )r(   r   r   )r3   r   r   r  r   s        r4   get_page_add_uriz BaseCMSTestCase.get_page_add_uri  s;     !67H%#wwD#~	$//r6   c                     |j                  |d      }t        d|j                  f      }d|i}|dz   t        |      z   S )NFfallbackcms_pagecontent_changer  r   r  get_content_objr(   r   r   r3   r   r   r  r  r   s         r4   get_page_change_uriz#BaseCMSTestCase.get_page_change_uri  G    &&x%&@ !9NH%#~	$//r6   c                     |j                  |d      }t        d|j                  f      }d|i}|dz   t        |      z   S )NFr  cms_pagecontent_deleter  r   r  r  r  s         r4   get_page_delete_translation_uriz/BaseCMSTestCase.get_page_delete_translation_uri  r  r6   c                     |j                  |d      }t        d|j                  f      }d|i}|dz   t        |      z   S )NFr  cms_pagecontent_change_templater  r   r  r  r  s         r4   get_page_change_template_uriz,BaseCMSTestCase.get_page_change_template_uri$  sG    &&x%&@ !B'**WH%#~	$//r6   c                    |j                   r$|j                   j                  |      xs d| d}nd| d}||j                  ||d      }t        d      }||j                  |||d}|r|j                  |d<   |dz   t        |      z   S )N/last)r   insert_ordercms_placeholder_add_plugin)r  placeholder_idplugin_languagecms_pathplugin_positionplugin_parentr  )r   r^  get_next_plugin_positionr(   r   r   )	r3   placeholderr  r   r   r  r   r  r   s	            r4   get_add_plugin_uriz"BaseCMSTestCase.get_add_plugin_uri*  s    ##44X>QAhZq/Dxj?D";;HVbh;iH !=>&)nn''
 $*IID!#~	$//r6   c                    |xs d}|j                   rD|j                   j                  r.|j                   j                  j                  |      xs d| d}nd| d}t        d|j                  f      }|dt        d|i      z   z  }|S )NrZ   r  cms_placeholder_edit_pluginr  r  r  r  r   r^  r(   r   r   r3   pluginr   r   r  s        r4   get_change_plugin_uriz%BaseCMSTestCase.get_change_plugin_uri@  s    #t&"4"4"9"9%%**;;HEX1XJVWDxj?D !>fii\RC)Z$6777r6   c                     |xs d}|j                   rD|j                   j                  r.|j                   j                  j                  |      xs d| d}nd| d}t        d      }|dt	        d|i      z   z  }|S )NrZ   r  cms_placeholder_move_pluginr  r  r  r   r^  r(   r   r  s        r4   get_move_plugin_uriz#BaseCMSTestCase.get_move_plugin_uriL  s    #t&"4"4"9"9%%**;;HEX1XJVWDxj?D !>?C)Z$6777r6   c                     |xs d}|j                   rD|j                   j                  r.|j                   j                  j                  |      xs d| d}nd| d}t        d      }|dt	        d|i      z   z  }|S NrZ   r  cms_placeholder_copy_pluginsr  r  r  r  s        r4   get_copy_plugin_uriz#BaseCMSTestCase.get_copy_plugin_uriX  s    #t&"4"4"9"9%%**;;HEX1XJVWDxj?D !?@C)Z$6777r6   c                     |xs d}|j                   r$|j                   j                  |      xs d| d}nd| d}t        d      }|dt        d|i      z   z  }|S r  )r   r^  r(   r   r3   r  r   r   r  s        r4   get_copy_placeholder_uriz(BaseCMSTestCase.get_copy_placeholder_urid  sn    #t##44X>QAhZq/Dxj?D !?@C)Z$6777r6   c                    |xs d}|j                   rD|j                   j                  r.|j                   j                  j                  |      xs d| d}nd| d}t        d|j                  f      }|dt        d|i      z   z  }|S )NrZ   r  cms_placeholder_delete_pluginr  r  r  r  r  s        r4   get_delete_plugin_uriz%BaseCMSTestCase.get_delete_plugin_urip  s    #t&"4"4"9"9%%**;;HEX1XJVWDxj?D !@		|TC)Z$6777r6   c                     |xs d}|j                   r$|j                   j                  |      xs d| d}nd| d}t        d|j                  f      }|dt	        ||d      z   z  }|S )NrZ   r  !cms_placeholder_clear_placeholderr  r  )r   r  )r   r^  r(   r   r   r  s        r4   get_clear_placeholder_urlz)BaseCMSTestCase.get_clear_placeholder_url|  s    #t##44X>QAhZq/Dxj?D !DKNNK\]C) %
   	 r6   c                 8    dj                  |t        d            S )Nz{}?{}TOOLBAR_URL__DISABLE)formatr&   )r3   urls     r4   get_toolbar_disable_urlz'BaseCMSTestCase.get_toolbar_disable_url  s    ~~c?3I#JKKr6   c                 <    ddidddd}t        |||fi ||   }|S )Nbodyz<p>text</p>zA Linkzhttps://www.django-cms.org)r   external_link)
TextPlugin
LinkPlugin)r   )r3   r  r  r   plugin_datar  s         r4   _add_plugin_to_placeholderz*BaseCMSTestCase._add_plugin_to_placeholder  s9    !=1#+>Z[
 Kh[+kBZ[r6   c                 b    |d   }t        |      }|j                  } |j                  ||fi |S )Nr4  )r%   content_rendererrender_placeholder)r3   r  r6  rP   r4  r]  r  s          r4   _render_placeholderz#BaseCMSTestCase._render_placeholder  s=    )$*73"33222;R6RRr6   )rZ   )FFTFNr.   rI  )NNNr  )r   N)zfirst-childrF   )NNNFN)NrZ   FN)rZ   NN)r  rZ   )?r7   r8   r9   r   r\   r]   rd   rh   ro   rt   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r%  r*  r,  r-  r(  r2  r7  r:  r<  r5  rg  ro  ru  rw  r{  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  __classcell__)r_   s   @r4   rW   rW   [   sJ   G
,9AP$$E CHPT@R/ <@,0,A	X\<!
&!4. (*(T."7852
"9
0
00000,




LSr6   rW   c                       e Zd Zy)CMSTestCaseNr7   r8   r9   r:   r6   r4   r  r        r6   r  c                       e Zd Zy)TransactionCMSTestCaseNr  r:   r6   r4   r  r    r  r6   r  )Ur  rG   rK   urllib.parser   r   django.confr   django.contrib.authr   django.contrib.auth.modelsr   r   django.contrib.sites.modelsr	   django.core.cacher
   django.core.exceptionsr   django.forms.modelsr   django.httpr   django.middleware.localer   django.templater   django.template.contextr   django.testr   django.test.clientr   django.urlsr   django.utils.httpr   django.utils.timezoner   django.utils.translationr   r   cms.apir   r   cms.middleware.toolbarr   
cms.modelsr   r   cms.models.permissionmodelsr   r   r    cms.plugin_renderingr!   r"   $cms.test_utils.util.context_managersr$   cms.toolbar.utilsr%   cms.utils.confr&   cms.utils.permissionsr'   cms.utils.urlutilsr(   menus.menu_poolr)   r  URL_CMS_PAGE_ADVANCED_CHANGEURL_CMS_PAGE_PERMISSIONSURL_CMS_PAGE_PUBLISHEDURL_CMS_PAGE_MOVEURL_CMS_PAGE_COPYURL_CMS_PAGE_DELETEURL_CMS_TRANSLATION_DELETEURL_CMS_USERSETTINGSr,   rU   rW   TestCaser  TransactionTestCaser  r:   r6   r4   <module>r     s!    
  )   . @ , # 5 - $ 5 # + ! -  ' % ; + 4 ( 
 D A 6 * 2 , % %&|5LM "<1BC  w7 L/: L/: lL9 $%ACXY 4  >S SD	/9#5#5 		[)*G*G 	r6   