Ë
    ¹ûàgL!  ã                   ó–   — 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  G d„ de	«      Z ed	d
i¬«       G d„ dee«      «       Zy)é    )Úcontextmanager)ÚStaticLiveServerTestCase)Úmodify_settings)ÚSeleniumTestCase)ÚMiddlewareMixin)Úgettextc                   ó   — e Zd ZdZd„ Zy)ÚCSPMiddlewarez5The admin's JavaScript should be compatible with CSP.c                 ó$   — d|j                   d<   |S )Nzdefault-src 'self'zContent-Security-Policy)Úheaders)ÚselfÚrequestÚresponses      úX/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/django/contrib/admin/tests.pyÚprocess_responsezCSPMiddleware.process_response   s   € Ø6Jˆ×ÑÐ2Ñ3Øˆó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   © r   r   r
   r
   
   s
   „ Ù?ór   r
   Úappendz(django.contrib.admin.tests.CSPMiddleware)Ú
MIDDLEWAREc                   óš   — e Zd Zg 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d„Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zy)ÚAdminSeleniumTestCase)zdjango.contrib.adminzdjango.contrib.authzdjango.contrib.contenttypeszdjango.contrib.sessionszdjango.contrib.sitesc                 ó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>-   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_popup'   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.byr3   Úselenium.webdriver.supportr5   r#   Úpresence_of_element_locatedÚCSS_SELECTOR©r   Úcss_selectorr"   r3   Úecs        r   Úwait_forzAdminSeleniumTestCase.wait_for1   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   r2   r4   N)r6   r3   r7   r5   r#   Útext_to_be_present_in_elementr9   ©r   r;   Útextr"   r3   r<   s         r   Úwait_for_textz#AdminSeleniumTestCase.wait_for_text<   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   r2   r4   N)r6   r3   r7   r5   r#   Ú#text_to_be_present_in_element_valuer9   r@   s         r   Úwait_for_valuez$AdminSeleniumTestCase.wait_for_valueH   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   r2   r4   N)r6   r3   r7   r5   r#   Úvisibility_of_element_locatedr9   r:   s        r   Úwait_until_visiblez(AdminSeleniumTestCase.wait_until_visibleV   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   r2   r4   N)r6   r3   r7   r5   r#   Úinvisibility_of_element_locatedr9   r:   s        r   Úwait_until_invisiblez*AdminSeleniumTestCase.wait_until_invisiblea   s0   € õ 	4ÝHà�‰Ø×.Ñ.°·±ÀÐ/NÓOÐQXõ	
r   c                 ó*   — | j                  d„ |«       y)z1
        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>q   s   € ˜6×0Ñ0Ð1NÓOØñ€ r   N)r#   )r   r"   s     r   r/   z%AdminSeleniumTestCase.wait_page_readyl   s   € ð 	�‰ñàõ	
r   c              #   óà   K  — ddl m} ddlm} | j                  j                  |j                  d«      }d–— | j                  |j                  |«      |¬«       | j                  |¬«       y­w)zA
        Block until a new page has loaded and is ready.
        r   r2   r4   ÚhtmlN)r"   )
r6   r3   r7   r5   r   Úfind_elementÚTAG_NAMEr#   Ústaleness_ofr/   )r   r"   r3   r<   Úold_pages        r   Úwait_page_loadedz&AdminSeleniumTestCase.wait_page_loadedv   sU   è ø€ õ
 	4ÝHà—=‘=×-Ñ-¨b¯k©k¸6ÓBˆÛà�‰˜Ÿ™¨Ó1¸7ˆÔCØ×Ñ WÐÕ-ùs   ‚A,A.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   r2   ÚusernameÚpasswordzLog inz//input[@value="%s"]N)r6   r3   r   ÚgetÚlive_server_urlrS   ÚNAMEÚ	send_keysÚ_rW   ÚXPATHÚclick)r   rY   rZ   Ú	login_urlr3   Ú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   r2   ©ÚSelectN)r6   r3   Úselenium.webdriver.support.uiri   r   rS   r9   Úselect_by_value©r   ÚselectorÚvaluer3   ri   Ú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   r2   rh   N)r6   r3   rj   ri   r   rS   r9   Údeselect_by_valuerl   s         r   Údeselect_optionz%AdminSeleniumTestCase.deselect_option    s7   € õ
 	4Ý8á˜Ÿ™×2Ñ2°2·?±?ÀHÓMÓNˆØ× Ñ  Õ'r   Nc                 óš   — 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   r2   N)r6   r3   r   ÚassertEqualr'   Úfind_elementsr9   )r   rm   ÚcountÚroot_elementr3   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   r2   rn   c                 ó>   •— | j                  ‰j                  ‰«       S r&   )rv   r9   )rP   r3   Úoptions_selectors    €€r   r+   z<AdminSeleniumTestCase._assertOptionsValues.<locals>.<lambda>Ç   s!   ø€  v×';Ñ';ØŸ™Ð)9ó(ð $€ r   )
r6   r3   r   rv   r9   r   Úget_attributeru   Údisable_implicit_waitr#   )r   r|   ÚvaluesÚoptionsÚactual_valuesÚoptionr3   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   rm   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«      j                  |«      dk7  S )zh
        Return True if the element identified by `selector` has the CSS class
        `klass`.
        r   r2   Úclassr,   )r6   r3   r   rS   r9   r}   Úfind)r   rm   Úklassr3   s       r   Úhas_css_classz#AdminSeleniumTestCase.has_css_classÚ   sG   € õ
 	4ð �M‰M×&Ñ&Ø—‘Øó÷ ‰]˜7Ó#ß‰T�%‹[Øñð	
r   )é
   )é   r�   )z/admin/r&   )r   r   r   Úavailable_appsr#   r0   r=   rB   rE   rH   rK   r/   r   rW   rf   rp   rs   ry   rƒ   r‡   r‰   rŽ   r   r   r   r   r      so   „ ò€Nó	>óó	
ó

ó
ó	
ó	
ó
ð ò.ó ð.óò"	&ò	(ó
òò(DòLó
r   r   N)Ú
contextlibr   Ú"django.contrib.staticfiles.testingr   Údjango.testr   Údjango.test.seleniumr   Údjango.utils.deprecationr   Údjango.utils.translationr   r_   r
   r   r   r   r   ú<module>r˜      sQ   ðÝ %å GÝ 'Ý 1Ý 4Ý 1ô�Oô ñ ˜XÐ'QÐRÔSôV
Ð,Ð.Fó V
ó TñV
r   