o
     ÐãYœ  ã                   @   s„   d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dl	m
Z
mZ d dlmZmZ G dd„ deƒZdd	„ ZG d
d„ deƒZdS )é    N)Úsettings)ÚTestCase)ÚmodelsÚutils)ÚMailboxÚMessagec                   @   s   e Zd ZdS )ÚEmailIntegrationTimeoutN)Ú__name__Ú
__module__Ú__qualname__© r   r   úK/var/www/html/env/lib/python3.10/site-packages/django_mailbox/tests/base.pyr      s    r   c                 C   sJ   t tj tj t¡d| ¡dƒ�}| ¡ W  d   ƒ S 1 sw   Y  d S ©NÚmessagesÚrb©ÚopenÚosÚpathÚjoinÚdirnameÚ__file__Úread)ÚnameÚfr   r   r   Úget_email_as_text   ó   
ýú$ør   c                       sp   e Zd ZddgZ‡ fdd„Zddd„Zdd	„ Zd
d„ Zddd„Zdd„ Z	dd„ Z
‡ fdd„Z‡ fdd„Z‡  ZS )ÚEmailMessageTestCasezMIME-VersionzContent-Transfer-Encodingc                    s¨   t  ¡ }|d | _|d | _|d | _tjjdd�| _t	j
 d¡| _t	j
 d¡| _t	j
 d¡| _d	| _d
| _dt_| jt_dt_| jt_| jt_dt_tt| ƒ ¡  d S )NÚallowed_mimetypesÚstrip_unallowed_mimetypesÚtext_stored_mimetypeszfrom@example.com)Ú
from_emailÚEMAIL_ACCOUNTÚEMAIL_PASSWORDÚEMAIL_SMTP_SERVERznobody@nowhere.comi,  z+django.core.mail.backends.smtp.EmailBackendiK  T)r   Úget_settingsÚ_ALLOWED_MIMETYPESÚ_STRIP_UNALLOWED_MIMETYPESÚ_TEXT_STORED_MIMETYPESr   ÚobjectsÚcreateÚmailboxr   ÚenvironÚgetÚtest_accountÚtest_passwordÚtest_smtp_serverÚtest_from_emailÚmaximum_wait_secondsr   ÚEMAIL_BACKENDÚ
EMAIL_HOSTÚ
EMAIL_PORTÚEMAIL_HOST_USERÚEMAIL_HOST_PASSWORDÚEMAIL_USE_TLSÚsuperr   ÚsetUp)ÚselfÚdm_settings©Ú	__class__r   r   r:   $   s$   
ÿ
zEmailMessageTestCase.setUpNc                 C   sB   t   ¡ | j }	 t   ¡ |krtƒ ‚| j |¡}|r|S t  d¡ q)NTé   )Útimer2   r   r+   Úget_new_mailÚsleep)r;   r+   Ú	conditionÚmaximum_waitr   r   r   r   Ú_get_new_messages>   s   
úz&EmailMessageTestCase._get_new_messagesc                 C   sJ   t tj tj t¡d|¡dƒ�}| ¡ W  d   ƒ S 1 sw   Y  d S r   r   )r;   r   r   r   r   r   Ú_get_email_as_textH   r   z'EmailMessageTestCase._get_email_as_textc                 C   s$   |   |¡}tjrt |¡S t |¡S ©N)rF   ÚsixÚPY3ÚemailÚmessage_from_bytesÚmessage_from_string)r;   r   Úcopyr   r   r   Ú_get_email_objectS   s   


z&EmailMessageTestCase._get_email_objectc                 C   sd   |  ¡ dkr| dd¡ ¡ }| dd¡ ¡ }| dd¡ dd¡}| dd¡ dd¡}||kr0dS dS )	a   Check if headers are (close enough to) identical.

         * This is particularly tricky because Python 2.6, Python 2.7 and
           Python 3 each handle header strings slightly differently.  This
           should mash away all of the differences, though.
         * This also has a small loophole in that when re-writing e-mail
           payload encodings, we re-build the Content-Type header, so if the
           header was originally unquoted, it will be quoted when rehydrating
           the e-mail message.

        zcontent-typeú"Ú z
	ú z
 FT)ÚlowerÚreplaceÚupper)r;   ÚleftÚrightÚheaderr   r   r   Ú_headers_identicalZ   s   z'EmailMessageTestCase._headers_identicalc                 C   sæ  |  ¡ D ]1\}}|| s|| jv rq|| std| ƒ‚| j|| ||d�s5td|t|ƒt|| ƒf ƒ‚q|  ¡ D ]1\}}|| sH|| jv rHq:|| sRtd| ƒ‚| j|| ||d�sktd|t|ƒt|| ƒf ƒ‚q:| ¡ | ¡ krz|  ||¡ | ¡ r©| ¡ }| ¡ }t|ƒt|ƒkr”|  ||¡ t	t|ƒƒD ]}|  
|| || ¡ qšd S | ¡ d u sµ| ¡ d u rÝ| ¡ d u rÆ|jd urÆ|  ||¡ | ¡ d u rÙ|jd urÛ|  ||¡ d S d S d S | ¡  ¡ | ¡  ¡ krñ|  ||¡ d S d S )NzExtra header '%s')rW   zHeader '%s' unequal:
%s
%s)ÚitemsÚALLOWED_EXTRA_HEADERSÚAssertionErrorrX   ÚreprÚis_multipartÚ_raise_mismatchedÚget_payloadÚlenÚrangeÚcompare_email_objectsÚstrip)r;   rU   rV   ÚkeyÚvalueÚleft_payloadsÚright_payloadsÚnr   r   r   rb   s   sj   
ýÿÿ
ýÿÿþÿ

þÿz*EmailMessageTestCase.compare_email_objectsc                 C   s   t d| ¡ | ¡ f ƒ‚)Nz$Message payloads do not match:
%s
%s)r[   Ú	as_string©r;   rU   rV   r   r   r   r^   ¦   s   þÿz&EmailMessageTestCase._raise_mismatchedc                    s,   t |tjjƒstt| ƒ ||¡S |  ||¡S rG   )Ú
isinstancerJ   Úmessager   r9   r   ÚassertEqualrb   rj   r=   r   r   rm   ®   s   z EmailMessageTestCase.assertEqualc                    sL   t j ¡ D ]}| ¡  q| jt_| jt_| j	t_
| j ¡  tt| ƒ ¡  d S rG   )r   r)   ÚallÚdeleter&   r   ÚALLOWED_MIMETYPESr'   ÚSTRIP_UNALLOWED_MIMETYPESr(   ÚTEXT_STORED_MIMETYPESr+   r9   r   ÚtearDown)r;   rl   r=   r   r   rs   ³   s   

zEmailMessageTestCase.tearDownrG   )r	   r
   r   rZ   r:   rE   rF   rN   rX   rb   r^   rm   rs   Ú__classcell__r   r   r=   r   r      s    þ


3r   )rJ   Úos.pathr   r@   rH   Údjango.confr   Údjango.testr   Údjango_mailboxr   r   Údjango_mailbox.modelsr   r   Ú	Exceptionr   r   r   r   r   r   r   Ú<module>   s    