
    BhI                        d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z
 d dlmZ d dlmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ  G d d      Z G d d      Z G d dee      Z G d dee      Z G d dee      Z G d dee      Z  G d dee      Z! G d dee      Z" G d dee      Z# G d dee      Z$y)     N)site)static)get_random_string)get_languageoverride)CONTENT_PREFIX)GrouperModelGrouperModelContentSimpleGrouperModelSimpleGrouperModelContent)CMSTestCase)wo_content_permission)get_language_list)admin_reversestatic_with_versionc                   (    e Zd ZdZddZddZddZy)
SetupMixin9Create one grouper object and retrieve the admin instanceNc                 Z   t         j                  j                  d      | _        t	        d      | _        t	        d| j                  j                  f      | _        t	        d      | _        | j                         | _
        t        j                  t            | _        d| _        d| _        y )	NGrouper Categorycategory_namesampleapp_groupermodel_addsampleapp_groupermodel_changeargs!sampleapp_groupermodel_changelistgroupermodelgrouper_model)r	   objectscreategrouper_instancer   add_urlpk
change_urlchangelist_urlget_superuser
admin_userr   	_registryadminr   r   selfs    L/home/dcms/DCMS/lib/python3.12/site-packages/cms/tests/test_grouper_admin.pysetUpzSetupMixin.setUp   s     , 4 4 ; ;J\ ; ]$%AB'(GtOdOdOgOgNij+,OP,,.^^L1
*,    c                 l    | j                   j                          | j                  j                          y Nr"   deleter*   clear_content_cacher+   s    r-   tearDownzSetupMixin.tearDown"   $    $$&

&&(r/   c                     t         j                  j                  | j                  |t	        d            }| j
                  j                          |S )Creates a content instance with a random content for a language. The random content is returned
        to be able to check if it appears in forms etc.   )r   languagesecret_greeting)r
   r    r!   r"   r   r*   r4   )r,   r:   instances      r-   createContentInstancez SetupMixin.createContentInstance&   sJ     '..55//-b1 6 

 	

&&(r/   returnN)en__name__
__module____qualname____doc__r.   r5   r=    r/   r-   r   r      s    C-)	r/   r   c                   (    e Zd ZdZddZddZddZy)SimpleSetupMixinr   Nc                 Z   t         j                  j                  d      | _        t	        d      | _        t	        d| j                  j                  f      | _        t	        d      | _        | j                         | _
        t        j                  t            | _        d| _        d| _        y )	Nr   r    sampleapp_simplegroupermodel_add#sampleapp_simplegroupermodel_changer   'sampleapp_simplegroupermodel_changelistsimplegroupermodelsimple_grouper_model)r   r    r!   r"   r   r#   r$   r%   r&   r'   r(   r   r)   r*   r   r   r+   s    r-   r.   zSimpleSetupMixin.setUp5   s     2 : : A APb A c$%GH'(MUYUjUjUmUmTop+,UV,,.^^$67
03r/   c                 l    | j                   j                          | j                  j                          y r1   r2   r+   s    r-   r5   zSimpleSetupMixin.tearDown?   r6   r/   c                     |dk(  sJ d       |xs | j                   }|xs t        d      }t        j                  j	                  ||      }| j
                  j                          |S )r8   r@   z7Only English is supported for SimpleGrouperModelContentr9   )rN   r;   )r"   r   r   r    r!   r*   r4   )r,   r:   r"   r;   r<   s        r-   r=   z&SimpleSetupMixin.createContentInstanceC   sq     4Z!ZZ+Dt/D/D)B->r-B,44;;!1+ < 
 	

&&(r/   r>   )r@   NNrA   rF   r/   r-   rH   rH   2   s    C4)r/   rH   c                   *    e Zd Zd Zd Zd Zd Zd Zy)SimpleChangeListActionsTestCasec                 Z   | j                  | j                        5  | j                  j                  | j                   dd      }| j                  |t        d             | j                  |t        d             | j                  |t        d             ddd       y# 1 sw Y   yxY w)zoAre js and css files loaded?
        The js and css files are supposed to be arranged by the GrouperAdminMixin.?Tfollowzadmin/js/jquery.init.jszcms/js/admin/actions.jszcms/css/cms.admin.cssN)login_user_contextr(   clientgetr&   assertContainsr   r   r,   responses     r-   test_action_js_cssz2SimpleChangeListActionsTestCase.test_action_js_cssS   s     $$T__5 	X{{$*=*=)>a'@NH&1J*KL&1J*KL*=>U*VW	X 	X 	Xs   A<B!!B*c           	      n   | j                  | j                        5  | j                  j                  | j                   dd      }| j                  |d       | j                  |d| j                   d| j                  j                   d       | j                  |d       d	d	d	       y	# 1 sw Y   y	xY w)
zChange list offers an add button if no content object exists for grouper.
        The button is supposed to be arranged by the GrouperAdminMixin.?language=enTrU   zclass="cms-icon cms-icon-plus"href="/en/admin/sampleapp//	/change/?class="cms-icon cms-icon-view"N)
rW   r(   rX   rY   r&   rZ   r   r"   r$   assertNotContainsr[   s     r-   test_add_actionz/SimpleChangeListActionsTestCase.test_add_action^   s     $$T__5 	O{{$*=*=)>l'KTXYH*JK6t7H7H6I4K`K`KcKcJddmn ""8-MN	O 	O 	Os   BB++B4c           	         | j                  d       | j                  | j                        5  | j                  j	                  | j
                   dd      }| j                  |d       | j                  |d| j                   d| j                  j                   d       | j                  |d       d	d	d	       y	# 1 sw Y   y	xY w)
zIChange list offers a settings button if content object exists for grouperr@   r_   TrU   rc   r`   ra   rb   N)
r=   rW   r(   rX   rY   r&   rZ   r   r"   r$   r[   s     r-   test_change_actionz2SimpleChangeListActionsTestCase.test_change_actionk   s     	""4($$T__5 	L{{$*=*=)>l'KTXYH*JK6t7H7H6I4K`K`KcKcJddmn *JK	L 	L 	Ls   BB<<Cc                     t         j                  t           }|j                  dddd      }| j	                  d|       | j                  d|       y )N	/some/urlinfoInforY   icontitleactioncms-form-get-methodcms-form-post-method)r   r)   r	   admin_action_buttonassertInassertNotInr,   r*   
get_actions      r-   test_get_actionz/SimpleChangeListActionsTestCase.test_get_actiony   sS    |,..	 / 

 	+Z8/<r/   c                     t         j                  t           }|j                  dddd      }| j	                  d|       | j                  d|       y )Nri   binDeletepostrl   rp   rq   )r   r)   r	   rr   rt   rs   ru   s      r-   test_post_actionz0SimpleChangeListActionsTestCase.test_post_action   sS    |,..	 / 

 	.
;,j9r/   N)rB   rC   rD   r]   re   rg   rw   r|   rF   r/   r-   rR   rR   R   s    	XOL
=
:r/   rR   c                       e Zd Zy)ChangeListActionsTestCaseN)rB   rC   rD   rF   r/   r-   r~   r~      s    r/   r~   c                   8    e Zd Zd Zd Zd	dZd Zd Zd Zd Z	y)
GrouperModelAdminTestCasec                     ddl m} | j                  t        | j                  j
                  |             | j                  | j                  j
                  j                  t               y)zThe form class has automatically been enhanced with the GrouperAdminFormMixin for
        the appropriate content model (actually its parent class _GrouperAdminFormMixin)r   )_GrouperAdminFormMixinN)	cms.admin.utilsr   
assertTrue
issubclassr*   formassertEqual_content_modelr
   )r,   r   s     r-   test_form_class_createdz1GrouperModelAdminTestCase.test_form_class_created   sD     	; 	
4::??4JKL779LMr/   c                     | j                   j                  j                  D ]9  }| j                  t        |z   | j                   j                  j
                         ; y)z9The content fields appear in the admin form with a prefixN)r*   r   _content_fieldsrs   r   base_fields)r,   fields     r-   test_form_class_content_fieldsz8GrouperModelAdminTestCase.test_form_class_content_fields   sD     ZZ__44 	OEMM.50$**//2M2MN	Or/   Nc                 r    t         j                  t           }| j                  |j                  t
               y)z;Content model has been detected correctly for grouper adminN)r   r)   r	   r   content_modelr
   )r,   r*   s     r-   test_content_model_detectedz5GrouperModelAdminTestCase.test_content_model_detected   s)     |,,,.ABr/   c                    t        d      5  d}|| j                  _        | j                  j                         }| j                  j                  }| j                  ||       | j                  |d   |       ddd       y# 1 sw Y   yxY w)z-Extra grouping fields are retrieved correctlyr@   zhr:   N)force_languager*   r:   r   current_content_filtersr   r,   expected_languageadmin_languager   s       r-   test_extra_grouping_field_fixedz9GrouperModelAdminTestCase.test_extra_grouping_field_fixed   s    D! 	U $"3DJJ!ZZ446N&*jj&H&H#^->?4Z@BST	U 	U 	Us   A+B  B	c                     | j                   `t               }| j                   j                         }| j                   j                  }| j	                  ||       | j	                  |d   |       y)zNExtra grouping fields (language) when not set return current default correctlyr:   N)r*   r:   r   r   r   r   s       r-   !test_extra_grouping_field_currentz;GrouperModelAdminTestCase.test_extra_grouping_field_current   s^    JJ(N002"&**"D"D):;0<>OPr/   c                     t        j                   | j                        }t        dgdgdgdg      |_        |j	                         }| j                  |g        y)z*Prepopulated fields work for content fieldr   content__secret_greeting)r   
some_fieldr   content__regionN)copyr*   dictprepopulated_fieldscheckr   r,   r*   check_resultss      r-   $test_prepopulated_fields_pass_checksz>GrouperModelAdminTestCase.test_prepopulated_fields_pass_checks   sZ     		$**%$(*+23&5%678	%
!  	+r/   c                     t        j                   | j                        }t        dgdgdg      |_        |j	                         }| j                  t        |      d       y)z@Prepopulated fields with invalid content field names fail checkscontent__public_greetingr   )r   r   content__country   N)r   r*   r   r   r   r   lenr   s      r-   4test_invalid_prepopulated_content_fields_fail_checkszNGrouperModelAdminTestCase.test_invalid_prepopulated_content_fields_fail_checks   sY     		$**%$(23&5%689%
!  	]+Q/r/   r>   )
rB   rC   rD   r   r   r   r   r   r   r   rF   r/   r-   r   r      s*    NOC
U	Q,"0r/   r   c                   *    e Zd Zd ZddZddZddZy)GrouperChangeListTestCasec                    | j                  | j                        5  | j                  j                  | j                        }ddd       | j
                  j                         D ]  \  }}| j                  d| d        y# 1 sw Y   BxY w)z!All languages available to selectNz<option value="")rW   r(   rX   rY   r&   r*   get_language_tuplerZ   )r,   r\   langverbs       r-   test_language_selectorz0GrouperChangeListTestCase.test_language_selector   s     $$T__5 	<{{t':':;H	< **779 	EJD$OD6*CD	E	< 	<s   &BBNc                     | j                  | j                        5  dD ]?  }| j                  j                  | j                  d| z         }| j                  |d       A 	 ddd       y# 1 sw Y   yxY w)LWithout any content being created the changelist shows an empty content text)r@   deit
?language=Empty contentNrW   r(   rX   rY   r&   rZ   )r,   r:   r\   s      r-   test_empty_contentz,GrouperChangeListTestCase.test_empty_content   sl    $$T__5 	?. ?;;??4+>+>:hZAX+XY##Ho>	?	? 	? 	?s   AA++A4c                    | j                  d      }| j                  | j                        5  | j                  j	                  | j
                  dz         }| j                  |d       | j                  ||j                         dD ]?  }| j                  j	                  | j
                  d| z         }| j                  |d       A 	 ddd       y# 1 sw Y   yxY w)BCreate one content object and see if it appears in the right adminr   ?language=der   )r@   r   r   r   Nr=   rW   r(   rX   rY   r&   rZ   r;   )r,   random_contentr\   r:   s       r-   test_with_contentz+GrouperChangeListTestCase.test_with_content   s     33D9$$T__5 	?{{t':':^'KLH*<=.*H*HI( ?;;??4+>+>:hZAX+XY##Ho>	?	? 	? 	?s   BCCc                    t               D ci c]  }|| j                  |      j                    }}| j                  | j                        5  t               D ]T  }| j
                  j                  | j                  d| z         }| j                  |d       | j                  |||          V 	 ddd       yc c}w # 1 sw Y   yxY w)r   r   r   N)	r   r=   r;   rW   r(   rX   rY   r&   rZ   )r,   r   r   r:   r\   s        r-   test_with_content_onlyz0GrouperChangeListTestCase.test_with_content_only
  s     ^o]pqUY$ : :4 @ P PPqq$$T__5 	H-/ H;;??4+>+>:hZAX+XY##H.@A##HnX.FGH	H 	H r	H 	Hs   #B9A"B>>Cr>   )rB   rC   rD   r   r   r   r   rF   r/   r-   r   r      s    E??"
Hr/   r   c                   "    e Zd Zd ZddZddZy)SimpleGrouperChangeListTestCasec                 ~   | j                  d      }| j                  | j                        5  | j                  j	                  | j
                   dd      }| j                  |d       | j                  |d       | j                  |d       | j                  ||j                         ddd       y# 1 sw Y   yxY w)	?Change form contains input for both grouper and content objectsr@   r_   TrU   z9<input type="hidden" name="content__simple_grouper_model"@<input type="text" name="category_name" value="Grouper Category")<textarea name="content__secret_greeting"Nr=   rW   r(   rX   rY   r%   rZ   r;   r,   r   r\   s      r-   test_mixed_change_formz6SimpleGrouperChangeListTestCase.test_mixed_change_form  s     33D9$$T__5 	J{{$//):,'GPTUH K
 R
 *UV.*H*HI!	J 	J 	Js   A=B33B<Nc                     | j                  | j                        5  | j                  j                  | j                        }| j                  |d       ddd       y# 1 sw Y   yxY w)r   r   Nr   r[   s     r-   r   z2SimpleGrouperChangeListTestCase.test_empty_content.  sQ    $$T__5 	;{{t':':;H/:		; 	; 	;s   8AA&c                 *   | j                         }| j                  | j                        5  | j                  j	                  | j
                        }| j                  |d       | j                  ||j                         ddd       y# 1 sw Y   yxY w)z<Create one content object and see if it appears in the adminr   Nr   r   s      r-   r   z1SimpleGrouperChangeListTestCase.test_with_content6  s|     335$$T__5 	J{{t':':;H*<=.*H*HI	J 	J 	Js   AB		Br>   )rB   rC   rD   r   r   r   rF   r/   r-   r   r     s    J,;	Jr/   r   c                   f    e Zd Zd ZddZedd       ZddZedd       ZddZ	ddZ
dd	Zdd
Zy)GrouperChangeTestCasec                    | j                  d      }| j                  | j                        5  | j                  j	                  | j
                   dd      }| j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  ||j                         d	d	d	       y	# 1 sw Y   y	xY w)
r   r@   r_   TrU   2<input type="hidden" name="content__grouper_model"S<input type="hidden" name="content__language" value="en" id="id_content__language">r   r   Nr   r   s      r-   r   z,GrouperChangeTestCase.test_mixed_change_formC  s     33D9$$T__5 	J{{$//):,'GPTUH D
 e
 R
 *UV.*H*HI+	J 	J 	Js   BCCNc                    | j                  | j                        5  | j                  j                  | j                  dz   d      }| j                  |d       | j                  |d       | j                  j                  | j                  dz         }| j                  |d       | j                  |d       d d d        y # 1 sw Y   y xY w)Nr_   TrU   z#name="content__language" value="en"z#name="content__language" value="de"r   )rW   r(   rX   rY   r%   rZ   rd   r[   s     r-   /test_change_form_contains_defaults_for_grouperszEGrouperChangeTestCase.test_change_form_contains_defaults_for_groupers^  s    $$T__5 	T{{t'GPTUH*OP""8-RS {{t'GHH*OP""8-RS	T 	T 	Ts   BC  C	c                    | j                  d      }| j                  | j                        5  | j                  j	                  | j
                  dz         }| j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  |d       | j                  ||j                         ddd       y# 1 sw Y   yxY w)zHIf no change permission exists for content mark content fields readonly.r@   r_   r   r   r   zfield-content__secret_greeting"Nr   r   s      r-    test_change_form_wo_write_permitz6GrouperChangeTestCase.test_change_form_wo_write_permitl  s     33D9$$T__5 	J{{t'GHH D
 e
 e
 *lm*KL.*H*HI1	J 	J 	Js   BCCc                 Z    | j                  d| j                  j                  d             y)zWIf change permissions exist for content model its fields in the admin are not readonly.r   N)rt   r*   get_readonly_fieldsr+   s    r-   test_admin_with_write_permitz2GrouperChangeTestCase.test_admin_with_write_permit  s%     	3TZZ5S5STX5YZr/   c                 Z    | j                  d| j                  j                  d              y )Nr   )rs   r*   r   r+   s    r-   test_admin_wo_write_permitz0GrouperChangeTestCase.test_admin_wo_write_permit  s#     	0$**2P2PQU2VWr/   c                    | j                  d      }dddd|j                  d}| j                  | j                        5  | j                  j                  | j                  dz   |      }| j                  j                          | j                  |j                  d       | j                  | j                  j                  |d	          d d d        y # 1 sw Y   y xY w)
Nr@   Changed contentsome contentworldcontent__languager   r   r   r   r_   data.  r   r=   r;   rW   r(   rX   r{   r%   r"   refresh_from_dbr   status_coder   r,   r   r   r\   s       r-   test_save_grouper_modelz-GrouperChangeTestCase.test_save_grouper_model  s    33D9!%.(&(6(F(F
 $$T__5 	Y{{''.(Ht'TH!!113X1137T22@@$BWX	Y 	Y 	Ys   B
CCc                    | j                  d       d| j                  j                  dddd}| j                  | j                        5  | j
                  j                  | j                  dz   |      }t        j                  j                  d      j                         }d d d        | j                  j                  d	       | j                         | j                  |j                  |d
          y # 1 sw Y   VxY w)Nr@   r   r   New greetingr   r_   r   r:   r   r   r=   r"   r   rW   r(   rX   r{   r%   r
   r    filterfirstr   r   assertIsNotNoner;   r,   r   r\   content_instances       r-   test_save_content_modelz-GrouperChangeTestCase.test_save_content_model  s    ""4(!%!22@@(&(6
 $$T__5 	Y{{''.(Ht'TH2::AA4APVVX	Y 	--s3-.)994@Z;[\	Y 	Ys   	AC77D c                 &   dddddd}| j                  | j                        5  | j                  j                  | j                  dz   |      }t
        j                  j                  |d	   
      j                         }|j                  j                  d      j                         }|j                  j                  d      j                         }d d d        | j                  j                  d       | j                  t
        j                  j                         j                         d       | j                         | j                         | j                         | j                  |j                   |d          y # 1 sw Y   xY w)Nr   My new categoryr   r   Some new contentr   r   r   r   r   r@   r   r      r   )rW   r(   rX   r{   r#   r	   r    r   r   groupermodelcontent_setr   r   allcountr   assertIsNoner;   )r,   r   r\   r"   content_instance_encontent_instance_des         r-   test_create_grouper_modelz/GrouperChangeTestCase.test_create_grouper_model  sc    "&.(&(:
 $$T__5 	i{{''~(ED'QH+33::oI^:_eeg"2"J"J"Q"Q[_"Q"`"f"f"h"2"J"J"Q"Q[_"Q"`"f"f"h		i 	--s3--11399;Q?-.-.01,<<dC]>^_	i 	is   B0FFc                    | j                  d      }d| j                  j                  dddd}| j                  | j                        5  | j
                  j                  | j                  dz   |      }t        j                  j                  d	      j                         }t        j                  j                  d	      j                         }d d d        | j                  j                  d
       | j                         | j                  |j                  |j                         | j                         | j                  |j                  |d          y # 1 sw Y   xY w)Nr@   r   r   r   zNew German contentr   r   r   r   r   r   r   )r,   r   r   r\   r   r   s         r-   test_create_content_modelz/GrouperChangeTestCase.test_create_content_model  s9   33D9!%!22@@(&(<
 $$T__5 	\{{''.(Ht'TH"5"="="D"Dd"D"S"Y"Y"["5"="="D"Dd"D"S"Y"Y"[	\
 	--s301,<<n>\>\]01,<<dC]>^_	\ 	\s   	BEE%r>   )rB   rC   rD   r   r   r   r   r   r   r   r   r   r  rF   r/   r-   r   r   B  sX    J6T J J<[
 X XY$]&`0`r/   r   c                   ,    e Zd ZddZddZddZddZy)SimpleGrouperChangeTestCaseNc                    | j                         }ddd|j                  d}| j                  | j                        5  | j                  j                  | j                  |      }| j                  j                          | j                  |j                  d       | j                  | j                  j                  |d          d d d        y # 1 sw Y   y xY w)Nr   r   r   r   r   r   r   r   r   r   r   r   s       r-   r   z3SimpleGrouperChangeTestCase.test_save_grouper_model  s    335.&!%(6(F(F	
 $$T__5 	Y{{''d'CH!!113X1137T22@@$BWX	Y 	Y 	Ys   BCCc                    | j                          | j                  j                  dddd}| j                  | j                        5  | j
                  j                  | j                  |      }t        j                  j                         }d d d        | j                  j                  d       | j                         | j                  |j                  |d          y # 1 sw Y   VxY w)Nr   r   r   r  r   r   r   r=   r"   r   rW   r(   rX   r{   r%   r   r    r   r   r   r   r;   r   s       r-   r   z3SimpleGrouperChangeTestCase.test_save_content_model  s    ""$!22@@&!%(6	
 $$T__5 	I{{''d'CH8@@FFH	I 	--s3-.)994@Z;[\	I 	I   AC""C+c                    ddddd}| j                  | j                        5  | j                  j                  | j                  |      }t
        j                  j                  |d         j                         }|j                  j                         }d d d        | j                  j                  d	       | j                  t
        j                  j                         j                         d
       | j                         | j                         | j                  |j                  |d          y # 1 sw Y   xY w)Nr   r   r   r   r  r   r   r   r   r   r   )rW   r(   rX   r{   r#   r   r    r   r   simplegroupermodelcontent_setr   r   r   r   r   r;   )r,   r   r\   r"   r   s        r-   r   z5SimpleGrouperChangeTestCase.test_create_grouper_model  s    /&!%(:	
 $$T__5 	V{{''4'@H199@@tTcOd@ekkm/MMSSU	V 	--s3+33779??A1E-.-.)994@Z;[\	V 	Vs   A3D88Ec                    | j                          | j                  j                  dddd}| j                  | j                        5  | j
                  j                  | j                  |      }t        j                  j                         }d d d        | j                  j                  d       | j                         | j                  |j                  |d          y # 1 sw Y   VxY w)Nr   r   zNew contentr  r   r   r   r  r   s       r-   r  z5SimpleGrouperChangeTestCase.test_create_content_model"  s    ""$!22@@&!%(5	
 $$T__5 	I{{''d'CH8@@FFH	I 	--s3-.)994@Z;[\	I 	Ir	  r>   )rB   rC   rD   r   r   r   r  rF   r/   r-   r  r    s    Y"]$]*]r/   r  c                        e Zd ZdZe fd       Zd fdZd Zd Zd fdZ	ddZ
d Zdd	Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z xZ S ) GrouperSearchTestCasezBTest suite for Grouper model search functionality in Django admin.c                 Z    t         |           d| _        d| _        d| _        d| _        y )N)r   r   r   )^category_name^content__secret_greeting)=category_name=content__secret_greeting)super
setUpClassSEARCH_FIELDS_DEFAULTSEARCH_FIELDS_GROUPER_ONLYSEARCH_FIELDS_STARTSWITHSEARCH_FIELDS_EXACT)cls	__class__s    r-   r  z GrouperSearchTestCase.setUpClass8  s.    $Q!);&'V$"Qr/   c                 b    t         |           | j                          | j                          y r1   )r  r.   _setup_test_data_setup_admin_configr,   r  s    r-   r.   zGrouperSearchTestCase.setUp@  s$      "r/   c                    t         j                  j                  d      | _        i | _        | j
                  | j                  fD ]:  }| j                  d||j                   d      | j                  |j                  <   < y)z*Create test instances and content objects.Another_Categoryr   r@   	_Greeting)r:   r"   r;   N)	r   r    r!   another_grouper_instancegrouper_content_objectsr"   r=   r   id)r,   groupers     r-   r  z&GrouperSearchTestCase._setup_test_dataE  s    (:(B(B(I(IXj(I(k%')$--t/L/LM 	G7;7Q7QGLaLaKbbkIl 8R 8D((4	r/   c                 :    | j                   | j                  _        y)zConfigure admin search fields.N)r  r*   search_fieldsr+   s    r-   r  z)GrouperSearchTestCase._setup_admin_configO  s    #'#=#=

 r/   c                 V    | j                   j                          t        |           y r1   )r#  r3   r  r5   r  s    r-   r5   zGrouperSearchTestCase.tearDownS  s     %%,,.r/   c                 $    | j                    d| S )zHelper to construct search URL.z?q=)r&   r,   querys     r-   _get_search_urlz%GrouperSearchTestCase._get_search_urlW  s    %%&c%11r/   c                 <    d| j                    d|j                   dS )z%Helper to construct admin change URL.r`   ra   rb   )r   r$   )r,   r<   s     r-   _get_admin_change_urlz+GrouperSearchTestCase._get_admin_change_url[  s"    +D,=,=+>a}IVVr/   c                     |r| j                   n| j                  } |||j                          ||| j                  |             y)z/Helper to assert instance presence in response.N)rZ   rd   r   r/  )r,   r\   r<   should_containassertion_methods        r-   _assert_instance_in_responsez2GrouperSearchTestCase._assert_instance_in_response_  s=    2@4..dF\F\8#9#9:4#=#=h#GHr/   c                 p    | j                   | j                  g}|D ]  }||v }| j                  |||        y)z)Helper to assert multiple search results.N)r"   r#  r3  )r,   r\   expected_instancesall_instancesr<   r1  s         r-   _assert_search_resultsz,GrouperSearchTestCase._assert_search_resultse  sF    ..0M0MN% 	RH%);;N--h.Q	Rr/   c                     | j                  | j                        5  | j                  j                  | j	                  |      d      }| j                  ||       |cddd       S # 1 sw Y   yxY w)z,Helper to perform search and assert results.TrU   N)rW   r(   rX   rY   r-  r7  )r,   r,  r5  r\   s       r-   _perform_searchz%GrouperSearchTestCase._perform_searchm  s^    $$T__5 	{{t';';E'B4PH''2DE	 	 	s   A A&&A/c                 x   | j                  | j                        5  | j                  j                  | j	                  |      d      }|j
                  j                         }|j                  d      }| j                  ||d| d| d| j                  j                   d|        d d d        y # 1 sw Y   y xY w)NTrU   zclass="action-checkbox"z	Expected z results for query 'z' with search_fields z, got )rW   r(   rX   rY   r-  contentdecoder   r   r*   r(  )r,   r,  expected_countr\   r;  actual_counts         r-   _test_expected_result_countz1GrouperSearchTestCase._test_expected_result_countt  s    $$T__5 		{{t';';E'B4PH&&--/G"==)BCLN++?w G&&*jj&>&>%?vl^U			 		 		s   BB00B9c                 X    | j                   | j                  g}| j                  d|       y)z7Empty search query should return all grouper instances. Nr"   r#  r9  )r,   r5  s     r-   0test_search_with_empty_query_returns_all_resultszFGrouperSearchTestCase.test_search_with_empty_query_returns_all_results  s*    "33T5R5RSR!34r/   c                 n    | j                   j                  }| j                   g}| j                  ||       y)zBSearch by grouper's category name should return matching instance.N)r"   r   r9  r,   search_tokenr5  s      r-   $test_search_by_grouper_category_namez:GrouperSearchTestCase.test_search_by_grouper_category_name  s3    ,,::"334\+=>r/   c                     | j                   | j                  j                     }|j                  dd }| j                  g}| j	                  ||       y)z8Search by content field should return matching instance.N   )r$  r"   r%  r;   r9  r,   content_objrF  r5  s       r-   test_search_by_content_fieldz2GrouperSearchTestCase.test_search_by_content_field  sP    2243H3H3K3KL"222A6"334\+=>r/   c                 B    t        d      }g }| j                  ||       y)z7Search with non-existent term should return no results.
   N)r   r9  rE  s      r-   $test_search_with_no_matching_resultsz:GrouperSearchTestCase.test_search_with_no_matching_results  s#    (,\+=>r/   c                 \    d}| j                   | j                  g}| j                  ||       y)z@Search by common category term should return multiple instances.CategoryNrB  rE  s      r-   0test_search_returns_multiple_results_by_categoryzFGrouperSearchTestCase.test_search_returns_multiple_results_by_category  /    !"33T5R5RS\+=>r/   c                 \    d}| j                   | j                  g}| j                  ||       y)z?Search by common content term should return multiple instances.GreetingNrB  rE  s      r-   /test_search_returns_multiple_results_by_contentzEGrouperSearchTestCase.test_search_returns_multiple_results_by_content  rS  r/   c                     | j                   | j                  _        d}| j                  | j                  g}| j                  ||       y)zGSearch should work when content fields are excluded from search_fields.rQ  N)r  r*   r(  r"   r#  r9  rE  s      r-   .test_search_without_content_fields_by_categoryzDGrouperSearchTestCase.test_search_without_content_fields_by_category  sA    #'#B#B

 !"33T5R5RS\+=>r/   c                 f    | j                   | j                  _        d}g }| j                  ||       y)zESearch by content should return nothing when content fields excluded.rU  N)r  r*   r(  r9  rE  s      r-   =test_search_without_content_fields_by_content_returns_nothingzSGrouperSearchTestCase.test_search_without_content_fields_by_content_returns_nothing  s0    #'#B#B

 !\+=>r/   c                 h    d| j                   _        d}| j                  g}| j                  ||       y)z6Test startswith (^) search modifier on category field.r  GrouperN)r*   r(  r"   r9  rE  s      r-   "test_startswith_search_by_categoryz8GrouperSearchTestCase.test_startswith_search_by_category  s3    #6

  "334\+=>r/   c                 h    d| j                   _        d}| j                  g}| j                  ||       y)z7Test exact match (=) search modifier on category field.r  r!  N)r*   r(  r#  r9  rE  s      r-   test_exact_search_by_categoryz3GrouperSearchTestCase.test_exact_search_by_category  s3    #6

 )";;<\+=>r/   c                     d| j                   _        | j                  | j                  j                     }|j
                  dd }| j                  g}| j                  ||       y)z5Test startswith (^) search modifier on content field.)r   r  Nr*   r(  r$  r#  r%  r;   r9  rJ  s       r-   !test_startswith_search_by_contentz7GrouperSearchTestCase.test_startswith_search_by_content  s\    #Q

 2243P3P3S3ST"223B7";;<\+=>r/   c                     d| j                   _        | j                  | j                  j                     }|j
                  }| j                  g}| j                  ||       y)z6Test exact match (=) search modifier on content field.)r   r  Nrd  rJ  s       r-   test_exact_search_by_contentz2GrouperSearchTestCase.test_exact_search_by_content  sU    #Q

 2243P3P3S3ST"22";;<\+=>r/   c                 N    d}d| j                   _        | j                  |d       y)z=Test search configuration with category_name contains search.rQ  r   r   Nr*   r(  r?  r+  s     r-   3test_search_with_multiple_results_and_grouper_queryzIGrouperSearchTestCase.test_search_with_multiple_results_and_grouper_query  s#    #5

 ((2r/   c                 N    d}d| j                   _        | j                  |d       y)z@Test search configuration with category_name starts with search.r]  r\     Nri  r+  s     r-   )test_search_with_startswith_grouper_queryz?GrouperSearchTestCase.test_search_with_startswith_grouper_query  s#    #6

 ((2r/   c                 N    d}d| j                   _        | j                  |d       y)z@Test search configuration with category_name exact match search.r!  r`  rl  Nri  r+  s     r-   .test_search_configurations_category_name_exactzDGrouperSearchTestCase.test_search_configurations_category_name_exact  s#    "#6

 ((2r/   c                 N    d}d| j                   _        | j                  |d       y)zETest search configuration with content__secret_greeting field search.rU  )r   r   Nri  r+  s     r-   9test_search_content_secret_greeting_with_multiple_resultszOGrouperSearchTestCase.test_search_content_secret_greeting_with_multiple_results  s#    #@

 ((2r/   r>   )rA  )T)!rB   rC   rD   rE   classmethodr  r.   r  r  r5   r-  r/  r3  r7  r9  r?  rC  rG  rL  rO  rR  rV  rX  rZ  r^  ra  re  rg  rj  rm  ro  rq  __classcell__)r  s   @r-   r  r  5  s    LR R#
>2WIR
5
???????????3333r/   r  )%r   django.contrib.adminr   django.templatetags.staticr   django.utils.cryptor   django.utils.translationr   r   r   r   r   'cms.test_utils.project.sampleapp.modelsr	   r
   r   r   cms.test_utils.testcasesr   cms.test_utils.util.grouperr   cms.utils.i18nr   cms.utils.urlutilsr   r   r   rH   rR   r~   r   r   r   r   r  r  rF   r/   r-   <module>r}     s     % - 1 M *  1 = , A : @=:&6 =:@	
,K 	M0
K M0`.H
K .Hb(J&6 (JVd`J d`NI]"2K I]Xq3,k q3r/   