a
    Dgm#                     @   sV   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ d dl	m
Z
 G dd dZdS )	    N)contextmanager)UnionBeautifulSoup)get_user_model)assert_and_parse_htmlc                   @   s   e Zd Zeeeef edddZedd Z	d%dd	Z
ed&d
dZed'ddZeedd Zed(ddZdd Zdd Zd)ddZdd Zdd Zd*dd Zd+d!d"Zd,d#d$ZdS )-WagtailTestUtils)markupreturnc                 C   s
   t | dS )Nzhtml.parserr   )r	    r   _/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/test/utils/wagtail_tests.pyget_soup   s    zWagtailTestUtils.get_soupc                  C   sF   t  } | jdddddi}| jD ]}||vr|||< q| jjf i |S )zV
        Override this method to return an instance of your custom user model
        ztest@email.comemailpassword)r   USERNAME_FIELDZREQUIRED_FIELDSobjectscreate_superuser)
user_model	user_datafieldr   r   r   create_test_user   s    

z!WagtailTestUtils.create_test_userNr   c                 C   sj   t  }|d u r*|d u r|  }t||j}|jdkrDd|vrDd| }| | jjf d|i|j|i |S )Nr   @%s@example.comr   )r   r   getattrr   
assertTrueclientlogin)selfuserusernamer   r   r   r   r   r   "   s    
zWagtailTestUtils.loginc                 K   sD   t  }|pd|  |d< ||d< |jdkr2| ||j< |jjf i |S Nr   r   r   )r   r   r   create_userr   r   r   kwargsZUserr   r   r   r!   ;   s    

zWagtailTestUtils.create_userc                 K   sD   t  }|pd|  |d< ||d< |jdkr2| ||j< |jjf i |S r    )r   r   r   r   r"   r   r   r   r   H   s    

z!WagtailTestUtils.create_superuserc               	   c   sr   t jdd} d V  W d    n1 s(0    Y  | D ]6}t|jttfs6t j|j|j|j|j	|j
|jd q6d S )NT)record)messagecategoryfilenamelinenofileline)warningscatch_warnings
issubclassr&   DeprecationWarningPendingDeprecationWarningshowwarningr%   r'   r(   r)   r*   )Zwarning_listwr   r   r   ignore_deprecation_warningsU   s    $
z,WagtailTestUtils.ignore_deprecation_warningsr   c              
   c   sT   ddl m} |||| zd V  W |j| ||f n|j| ||f 0 d S )Nr   )hooks)Zwagtailr3   registerZ_hooksremove)r   	hook_namefnorderr3   r   r   r   register_hooki   s
    zWagtailTestUtils.register_hookc                 C   s   t |drt |dsdS |j|jkr(dS t|jt|jkr@dS |j|jkrtt|jD ]N}|j| \}}|j| \}}|d u r|}|d u r|}||ks||krZ dS qZdS NnameFT)hasattrr;   len
attributesrange)r   Ztag1Ztag2iattrvalueZ
other_attrZother_valuer   r   r   _tag_is_equals   s"    zWagtailTestUtils._tag_is_equalc                 C   s|   t |drt |dsdS |j|jkr(dS |jD ]H\}}|d u rb|d f|jvrv||f|jvrv dS q.||f|jvr. dS q.dS r:   )r<   r;   r>   )r   Zthin_tagZfat_tagrA   rB   r   r   r   _tag_matches_with_extra_attrs   s     z.WagtailTestUtils._tag_matches_with_extra_attrsFc                    s`   d} r |r2|d7 }n|r2|d7 }t|dr\|t fdd|jD 7 }|S )Nr      childrenc                 3   s   | ]}j | d V  qdS )allow_extra_attrsN)_count_tag_occurrences).0childrH   needler   r   r   	<genexpr>   s   z:WagtailTestUtils._count_tag_occurrences.<locals>.<genexpr>)rD   rC   r<   sumrF   )r   rM   haystackrH   countr   rL   r   rI      s    


z'WagtailTestUtils._count_tag_occurrencesc                 C   s"   |j dkrdS tdd |jD S )NscriptFc                 s   s   | ]}|d kV  qdS ))typeztext/templateNr   )rJ   rA   r   r   r   rN          z;WagtailTestUtils._tag_is_template_script.<locals>.<genexpr>)r;   anyr>   )r   tagr   r   r   _tag_is_template_script   s    
z(WagtailTestUtils._tag_is_template_scriptc                 c   s@   t |dsd S | |r |V  n|jD ]}| |E d H  q&d S )Nr;   )r<   rW   rF   _find_template_script_tags)r   rP   rK   r   r   r   rX      s    


z+WagtailTestUtils._find_template_script_tags c              	   C   sl   t | |d d}t | |d d}| j|||d}|d urR| |||d|||f   n| |d|d|   d S )N!First argument is not valid HTML:"Second argument is not valid HTML:rG   z4Found %d instances of '%s' in response (expected %d)r   zCouldn't find '%s' in response)r   rI   assertEqualassertNotEqual)r   rM   rP   rQ   
msg_prefixrH   
real_countr   r   r   assertTagInHTML   s,    z WagtailTestUtils.assertTagInHTMLc                 C   s   | j ||d|d d S )Nr   )rQ   r^   )ZassertInHTML)r   rM   rP   r^   r   r   r   assertNotInHTML   s    z WagtailTestUtils.assertNotInHTMLc              	   C   s   t | |d d}t | |d d}d}| |D ]@}|jr*| t|jd t | |jd d d}|| ||7 }q*|d ur| |||d|||f   n| |d|d|   d S )NrZ   r[   r   rE   z%Script tag content is not valid HTML:z;Found %d instances of '%s' in template script (expected %d)z%Couldn't find '%s' in template script)r   rX   rF   r\   r=   rI   r]   )r   rM   rP   rQ   r^   r_   Z
script_tagZscript_htmlr   r   r   assertTagInTemplateScript   s@    
z*WagtailTestUtils.assertTagInTemplateScript)NNr   )NN)NN)r   )F)NrY   F)rY   )NrY   )__name__
__module____qualname__staticmethodr   strbytesr   r   r   r   r!   r   r   r2   r9   rC   rD   rI   rW   rX   r`   ra   rb   r   r   r   r   r   
   s.   

	
 

r   )r+   
contextlibr   typingr   Zbs4r   Zdjango.contrib.authr   Zdjango.test.testcasesr   r   r   r   r   r   <module>   s   