
    Bhk                        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 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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,  ed       G d de$             Z- G d de$      Z. edd       G d de.             Z/ edd       G d d e.             Z0 edd!       G d" d#e.             Z1 G d$ d%e$      Z2y&)'    )patch)site)get_user_model)AnonymousUserGroup
Permission)Site)Q)RequestFactory)override_settings)save_permissions)assign_user_to_pagecreate_pagecreate_page_user)get_visible_nodes)ACCESS_PAGE	CMSPluginPagePageContent)ACCESS_PAGE_AND_DESCENDANTSGlobalPagePermissionPagePermission)CMSTestCase)override_placeholder_conf)FuzzyInt)get_current_site)user_can_view_pageTCMS_PERMISSIONc                       e Zd ZdZd Zd Zd Zd Zd Z e	ddd	d
didgii      d        Z
d Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)PermissionModeratorTestsa  Permissions and moderator together

    Fixtures contains 3 users and 1 published page and some other stuff

    Users:
        1. `super`: superuser
        2. `master`: user with permissions to all applications
        3. `slave`: user assigned to page `slave-home`

    Pages:
        1. `home`:
            - published page
            - master can do anything on its subpages, but not on home!

        2. `master`:
            - published page
            - created by super
            - `master` can do anything on it and its descendants
            - subpages:

        3.       `slave-home`:
                    - not published
                    - assigned slave user which can add/change/delete/
                      move/publish this page and its descendants
                    - `master` user want to moderate this page and all descendants

        4. `pageA`:
            - created by super
            - master can add/change/delete on it and descendants
    c           
         | j                  ddd      | _        | j                  ddd      | _        | j                  | j                  d       | j                  ddd      | _        | j                  | j                  d       | j                  ddd      | _        | j                  d	d
      | _        | j                  j                  j                  t        j                  j                  d             | j                  | j                        5  t        ddd| j                        | _        t        ddd      | _        | j                  d      | _        t#        | j                  | j                  t$        d       t#        | j                  | j                  t$        d       t        ddd| j                  | j                        | _        t#        | j&                  | j
                  d       t        ddd| j                        | _        t#        | j(                  | j                  d       t        ddd| j                        }t#        || j                  ddddd       d d d        y # 1 sw Y   y xY w)NsuperT)is_staffis_superuserstaff)r$   add_default_permissionspublish_pagemasterslavenormalF)r$   codenamehomenav_playground.htmlen)
created_by	nonglobal)grant_on	grant_allz
slave-homezcol_two.html)parentr1   )r4   pageBcan_viewpageA)can_add
can_change
can_deletecan_publishcan_move_page)_create_user
user_super
user_staffadd_permissionuser_master
user_slaveuser_normaluser_permissionsaddr   objectsgetlogin_user_contextr   	home_pagemaster_pageuser_non_globalr   r   
slave_pagepage_b)selfpage_as     F/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_permmod.pysetUpzPermissionModeratorTests.setUp>   s.   ++GdQU+V++Gd\`+aDOO^<,,X^b,cD,,n=++Gd\`+a,,X,F))--j.@.@.D.Dn.D.]^$$T__5 &	4(1F48OOEDN  +85JDQD $(#4#4[#AD   0@0@)DPTV   0 0$2B2B)DPTV
 *,151A1Adoo_DO  DQ &g/DdW[WfWfgDK  T-=-=M !*?,0OO=F(8(8(,$\`.24I&	4 &	4 &	4s   EI11I:c                 P   | j                  |      5  |j                  d      d   }ddd}| j                  |dd      }| j                  j	                  ||      }| j                  |j                  d       |j                  j                  d	      cd
d
d
       S # 1 sw Y   y
xY w)zN
        Add a plugin using the test client to check for permissions.
        r0   r   zA Linkzhttps://www.django-cms.org)nameexternal_link
LinkPlugin)placeholderplugin_typelanguage   utf8N)	rJ   get_placeholdersget_add_plugin_uriclientpostassertEqualstatus_codecontentdecode)rP   userpagerX   dataendpointresponses          rR   _add_pluginz$PermissionModeratorTests._add_pluginu   s     $$T* 
	3//5a8K$7STD..'( / H
 {{''$7HX1137##**62
	3 
	3 
	3s   B BB%c                     | j                  | j                        5  | j                  j                  | j	                  d            }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr0   r[   )rJ   r@   r_   rI   get_page_add_urira   rb   rP   ri   s     rR   test_super_can_add_page_to_rootz8PermissionModeratorTests.test_super_can_add_page_to_root   \    $$T__5 	8{{t'<'<T'BCHX1137	8 	8 	8   AA,,A5c                     | j                  | j                        5  | j                  j                  | j	                  d            }| j                  |j                  d       d d d        y # 1 sw Y   y xY wNr0   i  )rJ   rC   r_   rI   rl   ra   rb   rm   s     rR   #test_master_cannot_add_page_to_rootz<PermissionModeratorTests.test_master_cannot_add_page_to_root   s^    $$T%5%56 	8{{t'<'<T'BCHX1137	8 	8 	8rp   c                     | j                  | j                        5  | j                  j                  | j	                  d            }| j                  |j                  d       d d d        y # 1 sw Y   y xY wrr   )rJ   rD   r_   rI   rl   ra   rb   rm   s     rR   "test_slave_cannot_add_page_to_rootz;PermissionModeratorTests.test_slave_cannot_add_page_to_root   ro   rp   col_leftdefault_plugins
TextPluginbodyzLorem ipsum dolor sit amet, consectetur adipisicing elit. Culpa, repellendus, delectus, quo quasi ullam inventore quod quam aut voluptatum aliquam voluptatibus harum officiis officia nihil minus unde accusamus dolorem repudiandae.)rY   valuesc                    | j                  | j                        5  | j                  t        j                  j                         d       | j                  j                  | j                  j                         ddi      }| j                  |j                  d       | j                  t        j                  j                         d       d d d        y # 1 sw Y   y xY w)Nr   edit   r[   )rJ   rD   ra   r   rH   countr_   rI   rN   get_absolute_urlrb   rm   s     rR   test_default_pluginsz-PermissionModeratorTests.test_default_plugins   s    " $$T__5 	;Y..446:{{t'G'G'IFTU;WHX1137Y..446:		; 	; 	;s   B/CCc                 R    | j                  | j                  | j                         y N)rf   )rj   r@   rN   rP   s    rR   test_super_can_add_pluginz2PermissionModeratorTests.test_super_can_add_plugin       t?    c                 R    | j                  | j                  | j                         y r   )rj   rC   rN   r   s    rR   test_master_can_add_pluginz3PermissionModeratorTests.test_master_can_add_plugin   s    ))@r   c                 R    | j                  | j                  | j                         y r   )rj   rD   rN   r   s    rR   test_slave_can_add_pluginz2PermissionModeratorTests.test_slave_can_add_plugin   r   r   c                 
   | j                   j                  d      }| j                  | j                        5  | j                  j                  |      }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr0   rZ   r[   )rO   r   rJ   r@   r_   rI   ra   rb   rP   urlri   s      rR   test_superuser_can_viewz0PermissionModeratorTests.test_superuser_can_view   sh    kk**D*9$$T__5 	8{{s+HX1137	8 	8 	8s   8A99Bc                    | j                   j                  d      }t        j                  j	                  d      }d}|D ]8  }|j
                  | j                   k(  s|j                  | j                  k(  s7d}: | j                  |d       | j                  j                  t        | j                  t               j                        t        | j                  t               j                              }| j                  |       | j                  d| j                  j                  v        | j                  j                  j!                  d      }t               j                  j!                  | j                  j"                        }| j                  t%        |      t%        |j&                               | j                  j!                  |      }| j                  |j(                  d	       y )
Nr0   r   Tr7   F)usernamepassword_auth_user_idpk  )rO   r   r   rH   filterrf   re   rA   ra   r_   logingetattrr   USERNAME_FIELD
assertTruesessionrI   r   stridrb   )	rP   r   all_view_permshas_permpermlogin_oklogin_user_idre   ri   s	            rR   test_staff_can_viewz,PermissionModeratorTests.test_staff_can_view   sr   kk**D*9'//666E" 	$DyyDKK'99/#H	$ 	5);;$$gdoo~GWGfGf.g.5doo~GWGfGf.g % i! 	4;;+>+>>?++//@''++t/A/A+B]+S\:;;??3'--s3r   c                    | j                   j                  d      }t        j                  j	                  d      }d}|D ]8  }|j
                  | j                   k(  s|j                  | j                  k(  s7d}: | j                  |       | j                  | j                        5  | j                  j                  |      }| j                  |j                  d       d d d        d}|D ]8  }|j
                  | j                   k(  s|j                  | j                  k(  s7d}: | j                  |       | j                  | j                        5  | j                  j                  |      }| j                  |j                  d       d d d        | j                  j                  |      }| j                  |j                  d       y # 1 sw Y   xY w# 1 sw Y   MxY w)Nr0   r   Tr7   Fr[   r   )rO   r   r   rH   r   rf   re   rE   r   rJ   r_   rI   ra   rb   rM   assertFalse)rP   r   r   normal_has_permr   ri   non_global_has_perms          rR   test_user_normal_can_viewz2PermissionModeratorTests.test_user_normal_can_view   s   kk**D*9'//666E" 	+DyyDKK'99 0 00&*O	+ 	($$T%5%56 	8{{s+HX1137	8
 $" 	/DyyDKK'99 4 44*.'	/ 	,-$$T%9%9: 	8{{s+HX1137	8
 ;;??3'--s3#	8 	8	8 	8s   (8G8GGG c                    | j                  d      }| j                  | j                        5  t        ||      }d|_        |j                          t        ddd      }t        ||dd       d d d        j                  d      }t        j                  j                  d      }d}|D ].  }|j                  | j                  k(  s|j                  |k(  s-d}0 | j                  |d       t!        |      t!        d      z  }t"        j                  j                  |      j%                         }| j                  |d       | j                  |      5  | j&                  j)                  |      }	| j                  |	j*                  d	       d d d        d}|D ]8  }|j                  | j                  k(  s|j                  | j,                  k(  s7d}: | j                  |d       t!        | j,                        t!        d      z  }t"        j                  j                  |      j%                         }| j                  |d       | j                  | j,                        5  | j&                  j)                  |      }	| j                  |	j*                  d
       d d d        y # 1 sw Y   :xY w# 1 sw Y   &xY w# 1 sw Y   y xY w)NglobalFr/   r0   T)global_permissionr8   r7   )re   r[   r   )r?   rJ   r@   r   r$   saver   r   r   r   rH   r   rf   rO   re   ra   r
   r   existsr_   rI   rb   rM   )
rP   user_globalglobal_pager   r   r   r   global_page_perm_qglobal_view_permsri   s
             rR   test_user_globalpermissionz3PermissionModeratorTests.test_user_globalpermission   st   ''1$$T__5 	a*;DK#(K %h0EtLK  [D[_`	a **40'//666E" 	 DyyDKK'DII,D	  	5)K01d3CC088??@RSZZ\*D1 $$[1 	8{{s+HX1137	8 " 	 DyyDKK'DII9M9M,M	  	5)D$8$89At<LL088??@RSZZ\*E2$$T%9%9: 	8{{s+HX1137	8 	8K	a 	a.	8 	8	8 	8s$   A J%8J2$8J?%J/2J<?Kc                     | j                   j                  d      }| j                  d      5  | j                  j	                  |      }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr0   allCMS_PUBLIC_FORr   rO   r   settingsr_   rI   ra   rb   r   s      rR   "test_anonymous_user_public_for_allz;PermissionModeratorTests.test_anonymous_user_public_for_all  sa    kk**40]]%]0 	8{{s+HX1137	8 	8 	8   8A//A8c                     | j                   j                  d      }| j                  d       5  | j                  j	                  |      }| j                  |j                  d       d d d        y # 1 sw Y   y xY w)Nr0   r   r   r   r   s      rR   #test_anonymous_user_public_for_nonez<PermissionModeratorTests.test_anonymous_user_public_for_none   sc     kk**40]]$]/ 	8{{s+HX1137	8 	8 	8r   c                 4   t        ddd      }|j                  d      }| j                         }t        ||d       t	        j
                  |d      5 }| j                  |j                  |             |j                  |       ddd       y# 1 sw Y   yxY w)zm
        Test that the page content object gets its publish permission from the
        page object.
        testr/   r0   T)r=   has_publish_permissionN)	r   get_content_objget_standard_userr   r   objectr   r   assert_called_once_with)rP   rf   page_contentre   page_has_publish_permissions        rR   2test_page_content_reflects_page_publish_permissionzKPermissionModeratorTests.test_page_content_reflects_page_publish_permission(  s    
 6#8$?++D1%%'D$D9\\$ 89 	F=XOOL??EF'??E	F 	F 	Fs   2BBN)__name__
__module____qualname____doc__rS   rj   rn   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r    r   rR   r!   r!      s    B54n3 8
8
8
 !'3" %m#	$	
 ;! ;@A@84,4:+8Z88Fr   r!   c                   *    e Zd Zd ZddZddZddZy)ViewPermissionBaseTestsc                 F    t        ddd      | _        t               | _        y )Ntestpager/   r0   )r   rf   r   r   r   s    rR   rS   zViewPermissionBaseTests.setUp9  s    
,A4H	$&	r   Nc                 N    |xs
 t               i i i i d}t        dt        f|      S )N)re   REQUESTPOSTGETr   Request)r   typer   )rP   re   attrss      rR   get_requestz#ViewPermissionBaseTests.get_request=  s2    +MO
 Iy%00r   c                 R    |s
t               }| j                  t        ||             y N)r   r   r   rP   rf   re   s      rR   assertViewAllowedz)ViewPermissionBaseTests.assertViewAllowedG  s      ?D*467r   c                 R    |s
t               }| j                  t        ||             y r   )r   r   r   r   s      rR   assertViewNotAllowedz,ViewPermissionBaseTests.assertViewNotAllowedL  s"     ?D+D$78r   r   )r   r   r   rS   r   r   r   r   r   rR   r   r   7  s    '18
9r   r   Fr&   )r   r   c                   |    e Zd ZdZ ed      d        Zd Z ed      d        Zd Zd Z	 ed      d	        Z
y
)BasicViewPermissionTestsza
    Test functionality with CMS_PERMISSION set to false, as this is the
    normal use case
    r   r   c                     | j                         }| j                  d      5  | j                  | j                         d d d        | j	                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wNr   )r   assertNumQueriesr   rf   ra   r   r   rP   requests     rR   test_unauth_publicz+BasicViewPermissionTests.test_unauth_public\  st    ""$""1% 	.""499-	. 	*7TYYKK))	&	. 	.s   BBc                 
   | j                         }| j                  d      5  | j                  | j                         d d d        | j	                  t        || j                  g| j                        g        y # 1 sw Y   <xY wr   r   r   r   rf   ra   r   r   r   s     rR   test_unauth_non_accessz/BasicViewPermissionTests.test_unauth_non_accesse  sn    ""$""1% 	1%%dii0	1 	*7TYYKK		1 	1s   A99Bc                 D   | j                         }| j                  |      }| j                  d      5  | j                  | j                  |       d d d        | j                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wr   "get_staff_user_with_no_permissionsr   r   r   rf   ra   r   r   rP   re   r   s      rR   test_staff_public_allz.BasicViewPermissionTests.test_staff_public_allm  s    668""4(""1% 	4""499d3	4 	*7TYYKK))	&	4 	4   BBc                 D   | j                         }| j                  |      }| j                  d      5  | j                  | j                  |       d d d        | j                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wr   r   r   s      rR   test_staff_public_staffz0BasicViewPermissionTests.test_staff_public_staffx      668""4(""1% 	4""499d3	4 	*7TYYKK))	&	4 	4r   c                 D   | j                         }| j                  |      }| j                  d      5  | j                  | j                  |       d d d        | j                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wr   r   r   s      rR   test_staff_basic_authz.BasicViewPermissionTests.test_staff_basic_auth  r   r   c                 D   | j                         }| j                  |      }| j                  d      5  | j                  | j                  |       d d d        | j                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wr   )r   r   r   r   rf   ra   r   r   r   s      rR   test_normal_basic_authz/BasicViewPermissionTests.test_normal_basic_auth  s    %%'""4(""1% 	4""499d3	4 	*7TYYKKdii[Y	4 	4r   N)r   r   r   r   r   r   r   r   r   r   r   r   r   rR   r   r   R  sc    

 e,& -& e,& -&&& e,Z -Zr   r   nonec                   "    e Zd ZdZd Zd Zd Zy)UnrestrictedViewPermissionTestszx
        Test functionality with CMS_PERMISSION set to True but no restrictions
        apply to this specific page
    c                    | j                         }| j                  d      5  	 | j                  | j                         d d d        | j	                  t        || j                  g| j                        g        y # 1 sw Y   <xY wNr}   r   r   s     rR   r   z6UnrestrictedViewPermissionTests.test_unauth_non_access  sr    ""$""1% 	1 %%dii0	1 	*7TYYKKRP	1 	1s   A::Bc                    | j                         }t        j                  j                  d|       | j	                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  g| j                        | j                  g       y # 1 sw Y   GxY wNT)r8   re      )r   r   rH   creater   r   r   rf   ra   r   r   r   s      rR   test_global_accessz2UnrestrictedViewPermissionTests.test_global_access  s    %%'$$++T+E""4(""1% 	4 ""499d3	4 	*7TYYKKdii[Y	4 	4s   B88Cc                 0   | j                         }| j                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  g| j                        g        y # 1 sw Y   <xY w)Nr   )r   r   r   r   rf   ra   r   r   r   s      rR   test_normal_deniedz2UnrestrictedViewPermissionTests.test_normal_denied  s    %%'""4(""1% 	7 %%dii6	7 	*7TYYKKRP	7 	7s   BBN)r   r   r   r   r   r   r  r   r   rR   r   r     s    


QZ Qr   r   r   c                   F     e Zd ZdZ fdZd Zd Zd Zd Zd Z	d Z
 xZS )	RestrictedViewPermissionTestszr
    Test functionality with CMS_PERMISSION set to True and view restrictions
    apply to this specific page
    c                 *   t         |           t        j                  j	                  d      | _        | j                  g| _        | j                  g| _        t        j                  j	                  | j                  | j
                  dt               y )N	testgroup)rU   T)rf   groupr8   r3   )r#   rS   r   rH   r   r  rf   pagesexpectedr   r   )rP   	__class__s    rR   rS   z#RestrictedViewPermissionTests.setUp  sf    ]])){);
ii[
%%499DJJQU`k%lr   c                 
   | j                         }| j                  d      5  	 | j                  | j                         d d d        | j	                  t        || j                  | j                        g        y # 1 sw Y   ;xY wr   )r   r   r   rf   ra   r   r  r   r   s     rR   test_unauthedz+RestrictedViewPermissionTests.test_unauthed  sp    ""$""1% 	1 %%dii0		1 	*7DJJ		JBO	1 	1s   A99Bc                    | j                         }| j                  |      }t        j                  j	                  d|| j
                  t               | j                  d      5  	 | j                  | j
                  |       d d d        | j                  t        || j                  | j                        | j                         y # 1 sw Y   ExY w)NT)r8   re   rf   r3      )r   r   r   rH   r   rf   r   r   r   ra   r   r  r   r	  r   s      rR   test_page_permissionsz3RestrictedViewPermissionTests.test_page_permissions  s    %%'""4(%%t$TYYYd%e""1% 	4 ""499d3	4 	*7DJJ		JDMMZ	4 	4s   $CCc                    | j                         }|j                  j                  | j                         | j	                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  | j                        | j                         y # 1 sw Y   ExY wNr  )r   groupsrG   r  r   r   r   rf   ra   r   r  r   r	  r   s      rR   test_page_group_permissionsz9RestrictedViewPermissionTests.test_page_group_permissions  s    %%'

#""4(""1% 	4 ""499d3	4 	*7DJJ		JDMMZ	4 	4s   B::Cc                    | j                         }t        j                  j                  d|       | j	                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  | j                        | j                         y # 1 sw Y   ExY wr   )r   r   rH   r   r   r   r   rf   ra   r   r  r   r	  r   s      rR   test_global_permissionz4RestrictedViewPermissionTests.test_global_permission
  s    %%'$$++T+E""4(""1% 	4 ""499d3	4 	*7DJJ		JDMMZ	4 	4s   B66B?c                 .   | j                         }| j                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  | j                        g        y # 1 sw Y   ;xY wr  )	r   r   r   r   rf   ra   r   r  r   r   s      rR   test_basic_perm_deniedz4RestrictedViewPermissionTests.test_basic_perm_denied  s    668""4(""1% 	7 %%dii6	7 	*7DJJ		JBO	7 	7s   BBc                    | j                         }|j                  j                  t        j                  j                  d             | j                  |      }| j                  d      5  	 | j                  | j                  |       d d d        | j                  t        || j                  | j                        | j                         y # 1 sw Y   ExY w)N	view_pager,      )r   rF   rG   r   rH   rI   r   r   r   rf   ra   r   r  r   r	  r   s      rR   test_basic_permz-RestrictedViewPermissionTests.test_basic_perm+  s    %%'!!*"4"4"8"8+"8"NO""4(""1% 	4 ""499d3	4 	*7DJJ		JDMMZ	4 	4s   ,CC)r   r   r   r   rS   r  r  r  r  r  r  __classcell__)r
  s   @rR   r  r    s2    
mP["["["P [r   r  c                       e Zd Zd Zd Zy)GlobalPermissionTestsc           	      ^   | j                  dddd      }|j                  d       |j                          t        j                  j                  d      }t        j                  j                  dd      }||g}| j                  ddd	      | j                  d
dd	      g}|D ]#  }|j                  d       t        dddd|       % t        j                  j                  ddd|d          | j                  dt        j                  j                  |d         j                                t        j                  j                  ddd|d         j                  j                  |d          | j                  dt        j                  j                  |d         j                                t        ddddd       | j                  d      5  t!               j                  d      }d|j"                  i|_        d|_        |D ]  }||_        d}| j+                  t-        d|            5  dddd}	|	j/                  d|	d   i       | j                  |	t0        j2                  t4           j7                  |             ddd        t!               j                  d      }d|j"                  i|_        d|_        | j9                  |d         |d<   | j9                  |d         |d<   | j+                  t-        dd            5  |d   |_        dddd}	|	j/                  ddi       | j                  |	t0        j2                  t4           j7                  |             t!               j                  dd|j"                  i      }|d   |_        d|_        i |_        dddd}	|	j/                  d|	d   i       | j                  |	t0        j2                  t4           j7                  |             ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   yxY w) aP   Call methods that emulate the adminsite instance's index.
        This test was basically the reason for the new manager, in light of the
        problem highlighted in ticket #1120, which asserts that giving a user
        no site-specific rights when creating a GlobalPagePermission should
        allow access to all sites.
        r#   T)r$   	is_activer%   r}   r   zexample2.com)domainrU   r&   )r$   r   staff_2F)can_add_pagecan_change_pagecan_delete_pager   )r:   r;   r<   re   r)   r/   r0   /)titletemplaterZ   in_navigationslugr   )pathcms_admin_siteNr  r  )rG   changedeleteviewr-     site__exactrg   )r?   set_passwordr   r	   rH   rI   r   r   r   ra   	with_userr~   sitesrG   r   r   r   r   r   current_pagere   r   r   updater   	_registryr   get_model_permsreload)
rP   	superusersite_1site_2SITESUSERSre   r   max_queriesexpected_permss
             rR   test_emulate_admin_indexz.GlobalPermissionTests.test_emulate_admin_index>  s    %%g37 & 9	w'!!Q!'$$N$P  gEi$$G
  	Dg&  $#'#( 			 	$$++DT7<58 	, 	M 	088BB58LRRTU 	$$++DT7<16q 	, 	;;@5U1X088BB58LRRTU(-B!C	A ]]$]/ +	g$&***4G/;GO#'G  
k#  **8A{+CD k-1TU%SN"))6>(3K*LM$$^T^^K5P5`5`ah5ij	k k
k %&***4G/;GO#'G  {{58,E!H{{58,E!H &&x27 g$Qx).%5!Q%%vuo6  1L1\1\]d1ef(*..s-9S.T$Qx'+$"$)-!O%%v~h/G&HI  1L1\1\]d1efg=+	g +	gk k&g g=+	g +	gs@   AP#4AP
BP#C+P9P#
PP#P 	P##P,c                    t        ddd      }| j                  d      }t               j                  dd|j                  i      }i |_        ||_        t        j                  t           j                  |      }| j                  |       y )NTestr/   r0   re   r&  targetr2  )r   r?   r   rI   r   r   re   r   r8  r   has_add_permissionr   )rP   rf   re   r   r   s        rR   (test_has_page_add_permission_with_targetz>GlobalPermissionTests.test_has_page_add_permission_with_target  sw    6#8$?  ( "&&s(DGG1D&E>>$'::7C"r   N)r   r   r   rB  rG  r   r   rR   r  r  <  s    \g|#r   r  N)3unittest.mockr   django.contrib.admin.sitesr   django.contrib.authr   django.contrib.auth.modelsr   r   r   django.contrib.sites.modelsr	   django.db.modelsr
   django.test.clientr   django.test.utilsr   cms.admin.formsr   cms.apir   r   r   cms.cms_menusr   
cms.modelsr   r   r   r   cms.models.permissionmodelsr   r   r   cms.test_utils.testcasesr   $cms.test_utils.util.context_managersr   cms.test_utils.util.fuzzy_intr   	cms.utilsr   cms.utils.page_permissionsr   r!   r   r   r   r  r  r   r   rR   <module>rZ     s    + . G G ,  - / , F F + @ @ 
 1 J 2 & 9 $'XF{ XF (XFv9k 96 >Z6 >Z	>ZB 0Q&= 0Q	0Qf g[$; g[	g[Tg#K g#r   