
    Bhh                        d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ 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 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Z)dZ*g dejV                  z   Z,ejZ                  dk(  re,j]                  d       ejZ                  dk(  re,j]                  d        G d de&      Z/ G d de"e&      Z0y)    N)StringIO)settings)Site)
management)CommandError)models)override_settings)
TextPlugin)
add_plugincreate_pagecreate_page_content)plugin_report)PagePageUrlStaticPlaceholder)Placeholder)	CMSPlugin)NavextendersFixture)	SampleApp)CMSTestCase)apphooksr   r
   )zdjango.contrib.authcmsmenussekizai	treebeardzemailuserapp.EmailUserz#cms.test_utils.project.emailuserappzcustomuserapp.Userz$cms.test_utils.project.customuserappc                       e Zd Z ee      d        Zd Zd Zd Z ee      d        Z	 ee      d        Z
 ee      d        Zd	 Z ee      d
        Zd Zy)ManagementTestCase)INSTALLED_APPSc                 ~   t        t              5  t               }t        dddt               | j                  t        j                  j                  t              j                         d       t        j                  ddd	d
|       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)NHello Titlenav_playground.htmlenapphookapplication_urls   r   listr   FinteractivestdoutzSampleApp (active)
r   r   r   r   APPHOOKassertEqualr   objectsfiltercountr   call_commandgetvalueselfouts     I/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_management.pytest_list_apphooksz%ManagementTestCase.test_list_apphooks)   s    i  	E*C'<dGTT\\00'0JPPRTUV##! S\\^-CD	E 	E 	Es   BB33B<c           	          t               5  t               }t        j                  dddt        d|       | j                  |j                         d       d d d        y # 1 sw Y   y xY w)Nr   	uninstallr   Fr)   zno 'SampleApp' apphooks found
)r   r   r   r2   r-   r.   r3   r4   s     r7   'test_uninstall_apphooks_without_apphookz:ManagementTestCase.test_uninstall_apphooks_without_apphook8   s`    Z 
	P*C##! S\\^-NO
	P 
	P 
	Ps   A
AA'c                    t        ddd       t        ddd      }d|_        d|_        d|_        |j	                          t               }t        j                  dd	d
|       | j                  |j                         d       |j                         }| j                  |j                  d       | j                  |j                  d       | j                  |j                  d       y )Nhomer!   r"   page      00100010r   fix-treeFr)   z+fixing page tree
fixing page URLs
all done
0002r'   r   )r   depthnumchildpathsaver   r   r2   r.   r3   reload)r5   page1r6   s      r7   test_fix_treez ManagementTestCase.test_fix_treeE   s    F148F$94@


jzuSQ)YZV,a(+    c                    t        ddd      }t        ddd      }t        ddd      }t        ddd      }t        ddd      }|j                  |d	       |j                  |d	       |j                  |d	       |j                  |d	       t               }t        j                  d
dd|       |df|df|df|df|dfg}|D ]!  \  }}	| j                  |j                  |	       # y )NAlphar!   r"   BetaGammaDeltaThetaz
last-childpositionr   rB   Fr)   000100010001000100010001000100010001000100010001000100010001)r   	move_pager   r   r2   r.   rF   )
r5   alphabetagammadeltathetar6   treer>   rF   s
             r7   test_fix_tree_regression_5641z0ManagementTestCase.test_fix_tree_regression_5641T   s   G%:DA6#8$?G%:DAG%:DAG%:DAu|4|455jzuSQ FO:N#&'*+
  	.JD$TYY-	.rK   c           	         t        t              5  t               }t        dddt               | j                  t        j                  j                  t              j                         d       t        j                  ddd	t        d
|       | j                  |j                         d       | j                  t        j                  j                  t              j                         d       d d d        y # 1 sw Y   y xY w)Nr    r!   r"   r#   r%   r'   r   r:   r   Fr)   z#1 'SampleApp' apphooks uninstalled
r   r,   r4   s     r7   $test_uninstall_apphooks_with_apphookz7ManagementTestCase.test_uninstall_apphooks_with_apphooko   s    i  	W*C'<dGTT\\00'0JPPRTUV##! S\\^-STT\\00'0JPPRTUV	W 	W 	Ws   C!C::Dc                 2   t               }t        j                  j                  d      }t	        |t
        dd       t	        |t
        dd       t	        |dddd	      }| j                  t        j                  j                  t        
      j                         d       | j                  t        j                  j                  d
      j                         d       t        j                  j                  ddd|      }t        j                  j                  ddd|      }t        j                  dddd|       t               }| j                  t        |      d       |d   }| j                  |d   d        | j                  |d   d       | j                  |d   d   |       |d   }| j                  |d   |j                         | j                  |d   d       | j                  |d   d   j!                         d   |       |d   }	| j                  |	d   t
        j"                         | j                  |	d   d       | j                  t        |	d         d       | j                  |	d   d   |       | j                  |	d   |g       y )Ntestslotr"   en bodybody
LinkPluginA Linkhttps://www.django-cms.orgnameexternal_linkplugin_type   r'   r@   r
   )rS   languagerq   placeholder   BogusPluginr   r(   pluginsFr)   r?   r   modeltype	instancesunsaved_instances)r   r   r/   creater   r
   r.   r   r0   PLUGINr1   r   r2   r   len	__class__get_plugin_instancerx   )
r5   r6   rt   link_plugininstanceless_pluginbogus_pluginreportbogus_plugins_reportlink_plugins_reporttext_plugins_reports
             r7   test_list_pluginsz$ManagementTestCase.test_list_plugins   s   j!))00f0=;
DyA;
DyA lD&.>Z\$$$8>>@	 	$$$>DDF	
 (//66$#	 7 
 !((//%#	 0 
 	vyeTWX 	K	
  &ay )	 	 (	 	 -a0	
 %Qi(!!	# 	'	 	,Q/CCEaH	
 %Qi(	 	'	 	#K01	 	,Q/	! 	 34 !	#rK   c                 ^   t         j                  j                  d      }t        |t        dd       t        |dddd	       t        dd
      }|j                          t        dd|      }|j                  |       t        |t        dd       t               }| j                  t        |      d       |d   }| j                  t        |d         d       |d   }| j                  t        |d         d       |d   }| j                  t        |d         d       | j                  t        |d         d       t               }t        j                  ddd|       t               }| j                  t        |      d       |d   }| j                  t        |d         d       |d   }| j                  t        |d         d       | j                  t        |d         d       |j                  j                  t        j                   d            d   }	| j                  |	d       y )Nrd   re   r"   rg   rh   rj   rk   rl   rm   r
   rs   rq   rv   )rs   rq   rt   r?   r   rz   r'   rr   r{   r   zdelete-orphaned-pluginsFr)   rS   position__max)r   r/   r|   r   r
   r   rG   r   r.   r~   r   r   r2   cmsplugin_set	aggregater   Max)
r5   rt   r   r   r   r   r   r   r6   max_positions
             r7   test_delete_orphaned_pluginsz/ManagementTestCase.test_delete_orphaned_plugins   s<   !))00f0=;
DyA;d 0L	N (|5  " !$MWbc|,;
DyA 	K	
  &ay$[12	
 %Qi#K01	
 %Qi#K01	 	#$789	 j'@e\_` 	K	
 %Qi#K01	
 %Qi#K01	 	#$789	
 #00::6::j;QRSbcq)rK   c                     t               }t        j                  dddt        d|       | j	                  |j                         d       y )Nr   r:   rw   Fr)   zno 'TextPlugin' plugins found
)r   r   r2   r}   r.   r3   r4   s     r7   %test_uninstall_plugins_without_pluginz8ManagementTestCase.test_uninstall_plugins_without_plugin%  s:    j{IvSXade)JKrK   c                    t               }t        j                  j                  d      }t	        |t
        dd       | j                  t        j                  j                  t              j                         d       t        j                  dd	d
t        d|       | j                  |j                         d       | j                  t        j                  j                  t              j                         d       y )Nrd   re   r"   rg   rh   rp   r'   r   r:   rw   Fr)   z#1 'TextPlugin' plugins uninstalled
r   )r   r   r/   r|   r   r
   r.   r   r0   r}   r1   r   r2   r3   )r5   r6   rt   s      r7   "test_uninstall_plugins_with_pluginz5ManagementTestCase.test_uninstall_plugins_with_plugin*  s    j!))00f0=;
DyA**11f1EKKMqQ{IvSXade)OP**11f1EKKMqQrK   c                     | j                  t              5 }t        j                  d       d d d        | j	                  t        j                        d       y # 1 sw Y   /xY w)Nr   z9Error: one of the available sub commands must be provided)assertRaisesr   r   r2   r.   str	exception)r5   es     r7   !test_for_running_only_cms_commandz4ManagementTestCase.test_for_running_only_cms_command4  sO    |, 	+##E*	+Q[[)+fg	+ 	+s   AA#N)__name__
__module____qualname__r	   TEST_INSTALLED_APPSr8   r;   rJ   r`   rb   r   r   r   r   r    rK   r7   r   r   (   s    &9:E ;EP,.6 &9:W ;W  &9:W# ;W#r &9:H* ;H*TL
 &9:R ;RhrK   r   c                   N    e 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y)PageFixtureManagementTestCasec                    |j                  |      j                  d      }t        |d|d      }t        |d|d|       t        |d|d|      }t        |d|d|      }t        |d|d|       t        |d|d|      }t        |d||d	d
       t        t	        t        j                               d      }|j                          t        |j                  d|d       y )Nri   re   MultiColumnPluginzfirst-childrR   ColumnPlugin)rS   targetrj   rk   rl   )r   rn   ro   r'   )codesite_idr
   zexample contentrh   )	get_placeholdersgetr   r   r   uuiduuid4rG   draft)	r5   r>   langph_enmcol1col2mcol2col4static_placeholders	            r7   _fill_page_bodyz-PageFixtureManagementTestCase._fill_page_body<  s    %%d+//V/<5"5tmT5.$uU%V[\5"5tm\`a5.$uU%V[\5,TXtu.C

4EqQ!%++\4FWXrK   c                 r    t         j                  j                         }|D ]  }| j                  |d        y )Nr"   )r   r/   allr   )r5   pagesr>   s      r7   setUpz#PageFixtureManagementTestCase.setUpK  s3      " 	-D  t,	-rK   c           
      P   d}t         j                  j                         j                         }t        j                  j                  d      j                         }t               }t        j                  dddddd	| j                         j                  z  d
|       t        j                  j                  |      }|D ]-  }| j                  ddht        |j                                      / | j                  t         j                  j                         j                         |dz         | j                  t         j                  j                  d      j                         |       | j                  t         j                  j                  d      j                         |       t        j                  j!                  |      }t         j                  j                  |j#                  d      j%                  d            }|j%                  dd      j'                         \  }	}
|j%                  dd      j'                         \  }}
| j                  |	j(                  |j(                         |j%                  dd      j'                         \  }}
|j%                  dd      j'                         \  }}
| j                  |j*                  |j*                         | j                  |j,                  |j,                         t         j                  j                  t.        j                  j1                  d      d   j2                        }|j%                  dd      j'                         \  }}
|j%                  dd      j'                         \  }}
| j                  |j(                  |j(                         | j                  |j4                  |j4                         | j                  t        j                  j                  d      j                         |       y)a  
        Various checks here:

         * plugins are exactly doubled, half per language with no orphaned plugin
         * the bottom-most plugins in the nesting chain maintain the same position and the same content
         * the top-most plugin are of the same type
        r'   r"   rs   r   copyr   --from-lang=en--to-lang=de--userid=%dFr)   derr   ri   re   rt   Nrs   parentrj   r   ?r   r
   )r   r/   r   r1   r   r0   r   r   r2   get_superuseridr   on_siter.   setget_languagesget_homer   r   r   rq   ro   rS   r   order_byr   ri   )r5   sitenumber_start_pluginsnumber_urlsr6   r   r>   	root_pageroot_pluginsfirst_plugin_en_first_plugin_delink_enlink_destack_pluginsstack_text_enstack_text_des                    r7   test_copy_langsz-PageFixtureManagementTestCase.test_copy_langsP  sa    (00446<<>oo,,d,;AACj66#3^]UYUgUgUiUlUlElc	
 $$T* 	FDdD\3t/A/A/C+DE	F 	**..0668:NQR:RS**1141@FFHJ^_**1141@FFHJ^_LL))$/	 ((//I<V<VW[<\<`<`fl<`<m/n)--tD-I]]_)--tD-I]]_44o6Q6QR!%%t%Nbbd
!%%t%Nbbd
..0E0EF))7+;+;<!))00=N=V=V=_=_`c=def=g=m=m0n(,,d,Uiikq(,,d,Uiikq22M4M4MN++]-?-?@///>DDFTrK   c                 ^   d}t         j                  j                         j                         }t	               }t        j                  ddddddd| j                         j                  z  d	|
	       t        j                  j                  |      }|D ]-  }| j                  ddht        |j                                      / | j                  t         j                  j                         j                         |       | j                  t         j                  j                  d      j                         |       | j                  t         j                  j                  d      j                         d       t        j                  j                  |      }t         j                  j                  |j!                  d      j#                  d            }|j#                  dd      j%                         \  }}	d}
| j'                  t         j(                        5  |j#                  dd      j%                         \  }
}	ddd       | j+                  |
       t         j                  j                  t,        j                  j/                  d      d   j0                        }|j#                  dd      j%                         \  }}	| j'                  t         j(                        5  |j#                  dd      j%                         \  }}	ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)zj
        Various checks here:

         * page structure is copied
         * no plugin is copied
        r'   r   r   r   r   r   z--skip-contentr   Fr)   r"   r   r   r   ri   re   r   Nr   r   r
   r   )r   r/   r   r1   r   r   r2   r   r   r   r   r.   r   r   r0   r   r   r   r   r   DoesNotExistassertIsNoner   r   r   )r5   r   r   r6   r   r>   r   r   r   r   r   r   r   r   s                 r7   test_copy_langs_no_contentz8PageFixtureManagementTestCase.test_copy_langs_no_content  s    (00446<<>j66#3^EUD..0333c	

 $$T* 	FDdD\3t/A/A/C+DE	F 	**..0668:NO**1141@FFHJ^_**1141@FFH!LLL))$/	 ((//!2248<<&<I 0 K *--tD-I]]_y556 	d!-!1!14!1!M!a!a!cOQ	d 	/*!))00)11::3?BHH 1 J ),,d9E - GGZGZG\ 	qy556 	a,00$=I  1  KK^K^K` M1	a 	a	d 	d	a 	as   %L)%L#L #L,c           
      	   d}t         j                  j                  |      }t         j                  j                  d      }|j                  }g }t
        j                  j                  |      D ]3  }|j                  |j                  d      j                  dd             5 t        j                  j                  |	      j                         }t               }t        j                  d
ddd|z  d|z  d| j!                         j"                  z  |       t%        t
        j                  j                  |      j'                  d            }	t%        t
        j                  j                  |      j'                  d            }
t)        |	      D ]a  \  }}| j+                  |j-                  d      |
|   j-                  d             | j+                  |j.                  |
|   j.                         c g }g }t
        j                  j                  |      D ]3  }|j                  |j                  d      j                  dd             5 t
        j                  j                  |      D ]3  }|j                  |j                  d      j                  dd             5 | j+                  t        j                  j                  |	      j                         |       | j+                  t        j                  j                  |	      j                         |       t
        j                  j1                  |      }t
        j                  j1                  |      }t        j                  j                  |j                  d      j                  d            }t        j                  j                  |j                  d      j                  d            }|j                  dd      j3                         \  }}|j                  dd      j3                         \  }}| j+                  |j4                  |j4                         |j                  dd      j3                         \  }}|j                  dd      j3                         \  }}| j+                  |j6                  |j6                         | j+                  |j8                  |j8                         y)a  
        Various checks here:

         * plugins are exactly doubled, half per site with no orphaned plugin
         * the bottom-most plugins in the nesting chain maintain the same position and the same content
         * the top-most plugin are of the same type
        r'   )pkzsite 2)rn   r"   r   T)flat)placeholder__inr   r   r   z--from-site=%sz--to-site=%sr   )r+   rF   ri   re   r   Nr   rj   r   )r   r/   r   r|   r   r   r   extendr   values_listr   r0   r1   r   r   r2   r   r   r(   r   	enumerater.   	get_titlerD   r   r   rq   ro   rS   )r5   	site_1_pksite_1site_2	site_2_pkphsr>   r   r6   pages_1pages_2indexphs_1phs_2root_page_1root_page_2root_plugins_1root_plugins_2first_plugin_1r   first_plugin_2link_1link_2s                          r7   test_copy_sitesz-PageFixtureManagementTestCase.test_copy_sites  s    	!!Y!/$$($3II	LL((3 	QDJJt,,T2>>t$>OP	Q(00777LRRTj66#3i#?R[A[D..0333	
 t||++F3<<VDEt||++F3<<VDE$W- 	?KE4T^^D175>3K3KD3QRTZZ)=)=>	? LL((3 	SDLL..t4@@D@QR	SLL((3 	SDLL..t4@@D@QR	S 	**11%1HNNPRfg**11%1HNNPRfgll++F3ll++F3"**11k>Z>Z[_>`>d>djp>d>q1r"**11k>Z>Z[_>`>d>djp>d>q1r*..T.J^^`*..T.J^^`33^5O5OP"&&,&Occe	"&&,&Occe	--v/C/CD&//:rK   c           
         d}t         j                  j                         j                         }t        j                  j                  |      }t        dd|       t               }t        j                  dddddd	| j                         j                  z  d
|       t        j                  j                  |      }|D ]-  }| j                  ddht        |j                                      / | j                  dt        j                  j                  |      j!                  d             | j                  t         j                  j                         j                         |dz         | j                  t         j                  j#                  d      j                         |       | j                  t         j                  j#                  d      j                         |       y)zu
        Even if a title already exists the copy is successful, the original
        title remains untouched
        r'   r   root page der   r   r   r   r   r   Fr)   r"   rr   r   N)r   r/   r   r1   r   r   r   r   r   r2   r   r   r   r.   r   r   r   r0   )r5   r   r   r   r6   r   r>   s          r7   test_copy_existing_titlez6PageFixtureManagementTestCase.test_copy_existing_title  s   
 (00446<<> LL))$/	D.)<j66#3^D..0333c	

 $$T* 	FDdD\3t/A/A/C+DE	F 	)>)>t)D)N)Nt)TU 	**..0668:NQR:RS**1141@FFHJ^_**1141@FFHJ^_rK   c           
         d}t         j                  j                         j                         }t        j                  j                  |      }t        dd|       |j                  d      j                  d      }t        |ddd	       t               }t        j                  d
ddddd| j                         j                  z  d|       | j                  t         j                  j!                  d      j                         |       | j                  t         j                  j!                  d      j                         |dz
         y)z~
        If an existing title in the target language has plugins in a placeholder
        that placeholder is skipped
        r'   r   r   r"   ri   re   r
   Hello Worldrh   r   r   r   r   r   r   Fr)   r      N)r   r/   r   r1   r   r   r   r   r   r   r   r   r2   r   r   r.   r0   )r5   r   r   r   phr6   s         r7   test_copy_filled_placeholderz:PageFixtureManagementTestCase.test_copy_filled_placeholder  s   
 (00446<<> LL))$/	D.)<''-11v1>2|T>j66#3^D..0333c	
 	**1141@FFHJ^_**1141@FFHJ^abJbcrK   c                    d}t         j                  j                         j                         }t        j                  j                  |      }t        dd|       |j                  d      j                  d      }t        |ddd	       t         j                  j                  |
      }|j                  dd      j                         \  }}t               }t        j                  ddddddd| j                         j                   z  d|	       t         j                  j                  |j                  d      j                  d      
       | j#                  t         j                  j                  d      j                         |       | j#                  t         j                  j                  d      j                         |dz          y)
        If an existing title in the target language has plugins in a placeholder
        and the command is called with *force-copy*, the plugins are copied on
        top of the existing one
        r'   r   r   r"   ri   re   r
   r   rh   r   r   r   r   r   r   r   z--forcer   Fr)   r   N)r   r/   r   r1   r   r   r   r   r   r   r0   r   r   r   r2   r   r   r.   )	r5   r   r   r   r   r   text_de_origr   r6   s	            r7   'test_copy_filled_placeholder_force_copyzEPageFixtureManagementTestCase.test_copy_filled_placeholder_force_copy  s    (00446<<> LL))$/	D.)<''-11v1>2|T> ((//B/?&**Dl*Sggiaj66#3^YD..0333		
 	  Y-G-G-M-Q-QW]-Q-^ _**1141@FFHJ^_**1141@FFHJ^abJbcrK   c                 \   d}t               }t        j                  dddddd| j                         j                  z  dd	|
	       |j                         }t        j                  j                  |      j                         dz   }t        d|      D ]  }| j                  d|z  |v         y)r  r'   r   r   r   --from-lang=de--to-lang=frr   r?   F)	verbosityr*   r+   z-Skipping page page%d, language de not definedN)r   r   r2   r   r   r3   r   r/   r   r1   range
assertTrue)r5   r   r6   text
page_countidxs         r7    test_copy_from_non_existing_langz>PageFixtureManagementTestCase.test_copy_from_non_existing_lang=  s     j66#3^D..0333c		
 ||~\\))$/557!;
J' 	[COOKcQUYYZ	[rK   c                 B   d}d}i }t         j                  j                         j                         }t        j                  j                  dd|      }t        j                  j                  d      D ](  }t        |j                               ||j                  <   * t        dddd|	      }t        d
ddd|	       t        dd|dd|       t        j                  j                  |      D ]  }| j                  |d        t         j                  j                         j                         |z
  }t               }	t        j                  dddddd|z  d| j!                         j"                  z  d|		       t        j                  j                  |      D ]8  }| j%                  ||j                     t        |j                                      : t        j                  j                  |      D ]-  }| j%                  ddht        |j                                      / | j%                  t         j                  j'                  d      j                         |       | j%                  t         j                  j'                  d      j                         |       | j%                  t         j                  j'                  d      j                         |       | j%                  t         j                  j                         j                         ||dz  z          y)zf
        Check that copy of languages on one site does not interfere with other
        sites
        r'   rr   zsample2.com)domainrn   r   rI   Tr   r!   )in_navigationrs   templater   page4page2)r  r   rs   r  r   r   r   r   r  r  z	--site=%sr   Fr)   frr"   r   N)r   r/   r   r1   r   r|   r   r   r   r   r   r   r   r   r   r2   r   r   r.   r0   )
r5   
site_othersite_activeorigina_site1_langsr   site_objr>   p1number_site2_pluginsr6   s
             r7   test_copy_site_safez1PageFixtureManagementTestCase.test_copy_site_safeP  s   
 
 (00446<<><<&&m-T_&`LL((+ 	ED+.t/A/A/C+D(	E tNcjrsG4$I^emn4TLahp	
 LL((5 	-D  t,	-  )00446<<>AUUj66#3^[S^E^D..0333c	
 LL((4 	VD093t?Q?Q?S;TU	V LL((5 	FDdD\3t/A/A/C+DE	F 	**1141@FFHJ^_**1141@FFHJ^_**1141@FFHJ^_**..0668:NQehiQi:ijrK   c                 &   t               }| j                  t              5 }t        j                  dddddd| j                         j                  z  d|       d d d        | j                  t        j                        d	       y # 1 sw Y   /xY w)
Nr   r   r   z--from-lang=itr  r   Fr)   zRBoth languages have to be present in settings.LANGUAGES and settings.CMS_LANGUAGES)
r   r   r   r   r2   r   r   r.   r   r   )r5   r6   command_errors      r7   test_copy_bad_languagesz5PageFixtureManagementTestCase.test_copy_bad_languages  s    j|, 	##vv'7 2 2 4 7 77!#	 	''(`	
	 	s   9BBN)r   r   r   r   r   r   r   r   r   r   r  r  r  r  r   rK   r7   r   r   :  sF    Y-
/Ub*aX7;r`<d2d@[&.k`
rK   r   )1ossysr   ior   django.confr   django.contrib.sites.modelsr   django.corer   django.core.managementr   	django.dbr   django.test.utilsr	   #djangocms_text_ckeditor.cms_pluginsr
   cms.apir   r   r   (cms.management.commands.subcommands.listr   
cms.modelsr   r   r   cms.models.placeholdermodelr   cms.models.pluginmodelr   $cms.test_utils.fixtures.navextendersr   )cms.test_utils.project.sampleapp.cms_appsr   cms.test_utils.testcasesr   $cms.test_utils.util.context_managersr   r-   r}   PLUGIN_APPSr   AUTH_USER_MODELappendr   r   r   rK   r7   <module>r5     s    	 
     , " /  / : @ @ B 7 7 3 , D ? 0 9
	   77DE33EFOh OhdR
$7 R
rK   