Ë
    ¤#ij¸$  ã            	       ó  — d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZ dZ edd	i¬
«       ee
j                  ge
j                   ge
j                   ge
j                   ge
j                   gdœ¬«       G d„ dee«      «       «       Zy)é    )Úcontextmanager)ÚStaticLiveServerTestCase)Úmodify_settingsÚoverride_settings)ÚSeleniumTestCase)ÚCSP)ÚgettextTÚappendz5django.middleware.csp.ContentSecurityPolicyMiddleware)Ú
MIDDLEWARE)zdefault-srczconnect-srczimg-srcz
script-srcz	style-src)Ú
SECURE_CSPc                   ó²   ‡ — e Zd Zg d¢Zˆ fd„Zdd„Zdd„Zdd„Zdd„Zdd„Z	dd„Z
dd	„Zdd
„Zedd„«       Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚAdminSeleniumTestCase)zdjango.contrib.adminzdjango.contrib.authzdjango.contrib.contenttypeszdjango.contrib.sessionszdjango.contrib.sitesc                 óf   •— | j                  | j                  d¬«      g «       t        ‰| �  «        y )NÚsecurity)Úsource)ÚassertEqualÚget_browser_logsÚsuperÚtearDown)ÚselfÚ	__class__s    €úT/var/www/html/office/venv/lib/python3.12/site-packages/django/contrib/admin/tests.pyr   zAdminSeleniumTestCase.tearDown"   s,   ø€ à×Ñ˜×.Ñ.°jÐ.ÓAÀ2ÔFÜ‰ÑÕó    c                 óT   — ddl m}  || j                  |«      j                  |«       y)a%  
        Block the execution of the tests until the specified callback returns a
        value that is not falsy. This method can be called, for example, after
        clicking a link or submitting a form. See the other public methods that
        call this function for more details.
        r   )ÚWebDriverWaitN)Úselenium.webdriver.support.waitr   ÚseleniumÚuntil)r   ÚcallbackÚtimeoutr   s       r   Ú
wait_untilz AdminSeleniumTestCase.wait_until'   s!   € õ 	Bá�d—m‘m WÓ-×3Ñ3°HÕ=r   c                 óÈ   ‡— | j                  ˆfd„|«       | j                  j                  j                  | j                  j                  d   «       | j                  «        y)zÓ
        Block until `num_windows` are present and are ready (usually 2, but can
        be overridden in the case of pop-ups opening other pop-ups). Switch the
        current window to the new pop-up.
        c                 ó4   •— t        | j                  «      ‰k(  S ©N)ÚlenÚwindow_handles)ÚdÚnum_windowss    €r   ú<lambda>zDAdminSeleniumTestCase.wait_for_and_switch_to_popup.<locals>.<lambda>8   s   ø€ ¤# a×&6Ñ&6Ó"7¸;Ñ"F€ r   éÿÿÿÿN)r!   r   Ú	switch_toÚwindowr&   Úwait_page_ready)r   r(   r    s    ` r   Úwait_for_and_switch_to_popupz2AdminSeleniumTestCase.wait_for_and_switch_to_popup2   sG   ø€ ð 	�‰ÓFÈÔPØ�‰×Ñ×&Ñ& t§}¡}×'CÑ'CÀBÑ'GÔHØ×ÑÕr   c                 óv   — ddl m} ddlm} | j	                  |j                  |j                  |f«      |«       y)zB
        Block until a CSS selector is found on the page.
        r   ©ÚBy©Úexpected_conditionsN)Úselenium.webdriver.common.byr1   Úselenium.webdriver.supportr3   r!   Úpresence_of_element_locatedÚCSS_SELECTOR©r   Úcss_selectorr    r1   Úecs        r   Úwait_forzAdminSeleniumTestCase.wait_for<   s/   € õ 	4ÝHà�‰Ø×*Ñ*¨B¯O©O¸\Ð+JÓKÈWõ	
r   c                 óx   — ddl m} ddlm} | j	                  |j                  |j                  |f|«      |«       y)zD
        Block until the text is found in the CSS selector.
        r   r0   r2   N)r4   r1   r5   r3   r!   Útext_to_be_present_in_elementr7   ©r   r9   Útextr    r1   r:   s         r   Úwait_for_textz#AdminSeleniumTestCase.wait_for_textG   s2   € õ 	4ÝHà�‰Ø×,Ñ,¨b¯o©o¸|Ð-LÈdÓSØõ	
r   c                 óx   — ddl m} ddlm} | j	                  |j                  |j                  |f|«      |«       y)zE
        Block until the value is found in the CSS selector.
        r   r0   r2   N)r4   r1   r5   r3   r!   Ú#text_to_be_present_in_element_valuer7   r>   s         r   Úwait_for_valuez$AdminSeleniumTestCase.wait_for_valueS   s7   € õ 	4ÝHà�‰Ø×2Ñ2Ø—‘ ,Ð/°óð õ		
r   c                 óv   — ddl m} ddlm} | j	                  |j                  |j                  |f«      |«       y)zS
        Block until the element described by the CSS selector is visible.
        r   r0   r2   N)r4   r1   r5   r3   r!   Úvisibility_of_element_locatedr7   r8   s        r   Úwait_until_visiblez(AdminSeleniumTestCase.wait_until_visiblea   s/   € õ 	4ÝHà�‰Ø×,Ñ,¨b¯o©o¸|Ð-LÓMÈwõ	
r   c                 óv   — ddl m} ddlm} | j	                  |j                  |j                  |f«      |«       y)zU
        Block until the element described by the CSS selector is invisible.
        r   r0   r2   N)r4   r1   r5   r3   r!   Úinvisibility_of_element_locatedr7   r8   s        r   Úwait_until_invisiblez*AdminSeleniumTestCase.wait_until_invisiblel   s0   € õ 	4ÝHà�‰Ø×.Ñ.°·±ÀÐ/NÓOÐQXõ	
r   c                 ó*   — | j                  d„ |«       y)z0
        Block until the page is ready.
        c                 ó*   — | j                  d«      dk(  S )Nzreturn document.readyState;Úcomplete)Úexecute_script)Údrivers    r   r)   z7AdminSeleniumTestCase.wait_page_ready.<locals>.<lambda>|   s   € ˜6×0Ñ0Ð1NÓOØñ€ r   N)r!   )r   r    s     r   r-   z%AdminSeleniumTestCase.wait_page_readyw   s   € ð 	�‰ñàõ	
r   c              #   ó  K  — ddl m} ddlm} ddlm} | j                  j                  |j                  d«      }d–— 	 | j                  |j                  |«      |¬«       | j                  |¬«       y# |$ r Y Œw xY w­w)zA
        Block until a new page has loaded and is ready.
        r   )ÚWebDriverExceptionr0   r2   ÚhtmlN)r    )Úselenium.common.exceptionsrP   r4   r1   r5   r3   r   Úfind_elementÚTAG_NAMEr!   Ústaleness_ofr-   )r   r    rP   r1   r:   Úold_pages         r   Úwait_page_loadedz&AdminSeleniumTestCase.wait_page_loaded�   su   è ø€ õ
 	BÝ3ÝHà—=‘=×-Ñ-¨b¯k©k¸6ÓBˆÛð	Ø�O‰O˜BŸO™O¨HÓ5¸wˆOÔGð 	×Ñ WÐÕ-øð "ò 	ñ ð		üs)   ‚=B Á "A5 Á"B Á5A=Á:B Á<A=Á=B c                 ó.  — | j                   j                  «       d   }| j                   j                  «       d   }| j                   j                  |dz   |«       | j                  «        | j                   j                  ||«       | j                  «        y )NÚwidthÚheighté   )r   Úget_window_sizeÚset_window_sizer-   )r   rY   rZ   s      r   Útrigger_resizez$AdminSeleniumTestCase.trigger_resize—   st   € Ø—‘×-Ñ-Ó/°Ñ8ˆØ—‘×.Ñ.Ó0°Ñ:ˆØ�‰×%Ñ% e¨a¡i°Ô8Ø×ÑÔØ�‰×%Ñ% e¨VÔ4Ø×ÑÕr   c                 ó  — ddl m} | j                  j                  | j                  ›|›�«       | j                  j                  |j                  d«      }|j                  |«       | j                  j                  |j                  d«      }|j                  |«       t        d«      }| j                  «       5  | j                  j                  |j                  d|z  «      j                  «        ddd«       y# 1 sw Y   yxY w)z&
        Log in to the admin.
        r   r0   ÚusernameÚpasswordzLog inz//input[@value="%s"]N)r4   r1   r   ÚgetÚlive_server_urlrS   ÚNAMEÚ	send_keysÚ_rW   ÚXPATHÚclick)r   r`   ra   Ú	login_urlr1   Úusername_inputÚpassword_inputÚ
login_texts           r   Úadmin_loginz!AdminSeleniumTestCase.admin_loginŸ   sÆ   € õ 	4à�‰×Ñ D×$8Ò$8¹)ÐDÔEØŸ™×3Ñ3°B·G±G¸ZÓHˆØ× Ñ  Ô*ØŸ™×3Ñ3°B·G±G¸ZÓHˆØ× Ñ  Ô*Ü�x“[ˆ
Ø×"Ñ"Ó$ñ 	Ø�M‰M×&Ñ&Ø—‘Ð0°:Ñ=óç‰eŒg÷	÷ 	ñ 	ús   Â98C:Ã:Dc                 ó–   — ddl m} ddlm}  || j                  j                  |j                  |«      «      }|j                  |«       y)zŠ
        Select the <OPTION> with the value `value` inside the <SELECT> widget
        identified by the CSS selector `selector`.
        r   r0   ©ÚSelectN)r4   r1   Úselenium.webdriver.support.uirp   r   rS   r7   Úselect_by_value©r   ÚselectorÚvaluer1   rp   Úselects         r   Úselect_optionz#AdminSeleniumTestCase.select_option°   s7   € õ
 	4Ý8á˜Ÿ™×2Ñ2°2·?±?ÀHÓMÓNˆØ×Ñ˜uÕ%r   c                 ó–   — ddl m} ddlm}  || j                  j                  |j                  |«      «      }|j                  |«       y)zŒ
        Deselect the <OPTION> with the value `value` inside the <SELECT> widget
        identified by the CSS selector `selector`.
        r   r0   ro   N)r4   r1   rq   rp   r   rS   r7   Údeselect_by_valuers   s         r   Údeselect_optionz%AdminSeleniumTestCase.deselect_option»   s7   € õ
 	4Ý8á˜Ÿ™×2Ñ2°2·?±?ÀHÓMÓNˆØ× Ñ  Õ'r   c                 óš   — ddl m} |xs | j                  }| j                  t	        |j                  |j                  |«      «      |«       y)z€
        Assert number of matches for a CSS selector.

        `root_element` allow restriction to a pre-selected node.
        r   r0   N)r4   r1   r   r   r%   Úfind_elementsr7   )r   rt   ÚcountÚroot_elementr1   s        r   ÚassertCountSeleniumElementsz1AdminSeleniumTestCase.assertCountSeleniumElementsÆ   s>   € õ 	4à#Ò4 t§}¡}ˆØ×ÑÜ�×*Ñ*¨2¯?©?¸HÓEÓFÈõ	
r   c                 óP  ‡‡— ddl mŠ |rb| j                  j                  ‰j                  ‰«      }g }|D ]"  }|j                  |j                  d«      «       Œ$ | j                  ||«       y | j                  «       5  | j                  ˆˆfd„«       d d d «       y # 1 sw Y   y xY w)Nr   r0   ru   c                 ó>   •— | j                  ‰j                  ‰«       S r$   )r|   r7   )rN   r1   Úoptions_selectors    €€r   r)   z<AdminSeleniumTestCase._assertOptionsValues.<locals>.<lambda>â   s!   ø€  v×';Ñ';ØŸ™Ð)9ó(ð $€ r   )
r4   r1   r   r|   r7   r
   Úget_attributer   Údisable_implicit_waitr!   )r   r‚   ÚvaluesÚoptionsÚactual_valuesÚoptionr1   s    `    @r   Ú_assertOptionsValuesz*AdminSeleniumTestCase._assertOptionsValuesÓ   s—   ù€ Ý3áØ—m‘m×1Ñ1°"·/±/ÐCSÓTˆGØˆMØ!ò D�Ø×$Ñ$ V×%9Ñ%9¸'Ó%BÕCðDà×Ñ˜V ]Õ3ð
 ×+Ñ+Ó-ñ Ø—‘ôô÷÷ ñ ús   Á=BÂB%c                 ó.   — | j                  d|z  |«       y)z{
        Assert that the <SELECT> widget identified by `selector` has the
        options with the given `values`.
        z%s > optionN©r‰   ©r   rt   r…   s      r   ÚassertSelectOptionsz)AdminSeleniumTestCase.assertSelectOptionsç   s   € ð
 	×!Ñ! -°(Ñ":¸FÕCr   c                 ó.   — | j                  d|z  |«       y)z„
        Assert that the <SELECT> widget identified by `selector` has the
        selected options with the given `values`.
        z%s > option:checkedNr‹   rŒ   s      r   ÚassertSelectedOptionsz+AdminSeleniumTestCase.assertSelectedOptionsî   s   € ð
 	×!Ñ!Ð"7¸(Ñ"BÀFÕKr   c                 ó~   — ddl m} | j                  j                  |j                  |«      j                  d«      dk(  S )zk
        Return True if the element identified by `selector` has the `disabled`
        attribute.
        r   r0   ÚdisabledÚtrue)r4   r1   r   rS   r7   rƒ   )r   rt   r1   s      r   Úis_disabledz!AdminSeleniumTestCase.is_disabledõ   s>   € õ
 	4ð �M‰M×&Ñ& r§¡¸ÓA×OÑOØóð ñð	
r   )é
   )é   r”   )z/admin/r$   )Ú__name__Ú
__module__Ú__qualname__Úavailable_appsr   r!   r.   r;   r@   rC   rF   rI   r-   r   rW   r^   rm   rw   rz   r   r‰   r�   r�   r“   Ú__classcell__)r   s   @r   r   r      sz   ø„ ò€Nôó
	>óó	
ó

ó
ó	
ó	
ó
ð ò.ó ð.ò*óò"	&ò	(ó
òò(DòLö
r   r   N)Ú
contextlibr   Ú"django.contrib.staticfiles.testingr   Údjango.testr   r   Údjango.test.seleniumr   Údjango.utils.cspr   Údjango.utils.translationr	   rf   Ú
__unittestÚNONEÚSELFr   © r   r   ú<module>r¥      s�   ðÝ %å Gß :Ý 1Ý  Ý 1ð €
ñ ØÐQÐRôñ àŸ™�zØŸ™�zØ—H‘H�:Ø—x‘x�jØ—h‘h�Zñôôh
Ð,Ð.Fó h
óóñh
r   