U
    |hm#                     @   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   h/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/test/utils/wagtail_tests.pyget_soup   s    zWagtailTestUtils.get_soupc                  C   sB   t  } | jdddddi}| jD ]}||kr|||< q| jjf |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 kr*|d kr|  }t||j}|jdkrDd|krDd| }| | jjf d|i|j|i |S )Nr   @%s@example.comr   )r   r   getattrr   Z
assertTrueclientlogin)selfuserusernamer   r   r   r   r   r   "   s    
zWagtailTestUtils.loginc                 K   s@   t  }|pd|  |d< ||d< |jdkr2| ||j< |jjf |S Nr   r   r   )r   r   r   create_userr   r   r   kwargsZUserr   r   r   r    ;   s    

zWagtailTestUtils.create_userc                 K   s@   t  }|pd|  |d< ||d< |jdkr2| ||j< |jjf |S r   )r   r   r   r   r!   r   r   r   r   H   s    

z!WagtailTestUtils.create_superuserc               	   c   s^   t jdd} d V  W 5 Q R X | D ]6}t|jttfs"t j|j|j|j|j	|j
|jd q"d 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   s@   ddl m} |||| z
d V  W 5 |j| ||f X d S )Nr   )hooks)Zwagtailr2   registerZ_hooksremove)r   	hook_namefnorderr2   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 kr|}|d k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 krb|d f|jkrv||f|jkrv dS q.||f|jkr. dS q.dS r9   )r;   r:   r=   )r   Zthin_tagZfat_tagr@   rA   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rG   needler   r   r   	<genexpr>   s     z:WagtailTestUtils._count_tag_occurrences.<locals>.<genexpr>)rC   rB   r;   sumrE   )r   rL   haystackrG   countr   rK   r   rH      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   )rI   r@   r   r   r   rM      s     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;   rU   rE   _find_template_script_tags)r   rO   rJ   r   r   r   rV      s    


z+WagtailTestUtils._find_template_script_tags c              	   C   sl   t | |d d}t | |d d}| j|||d}|d k	rR| |||d|||f   n| |d|d|   d S )N!First argument is not valid HTML:"Second argument is not valid HTML:rF   z4Found %d instances of '%s' in response (expected %d)r   zCouldn't find '%s' in response)r   rH   assertEqualassertNotEqual)r   rL   rO   rP   
msg_prefixrG   
real_countr   r   r   assertTagInHTML   s@              
z WagtailTestUtils.assertTagInHTMLc                 C   s   | j ||d|d d S )Nr   )rP   r\   )ZassertInHTML)r   rL   rO   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 k	r| |||d|||f   n| |d|d|   d S )NrX   rY   r   rD   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   rV   rE   rZ   r<   rH   r[   )r   rL   rO   rP   r\   r]   Z
script_tagZscript_htmlr   r   r   assertTagInTemplateScript   sL          
z*WagtailTestUtils.assertTagInTemplateScript)NNr   )NN)NN)r   )F)NrW   F)rW   )NrW   )__name__
__module____qualname__staticmethodr   strbytesr   r   r   r   r    r   r   r1   r8   rB   rC   rH   rU   rV   r^   r_   r`   r   r   r   r   r   
   s2   

	
     

r   )r*   
contextlibr   typingr   Zbs4r   Zdjango.contrib.authr   Zdjango.test.testcasesr   r   r   r   r   r   <module>   s   