Ë
    º9j�@  ã                  ó‚  — d Z ddlmZ ddlZddlmc mZ ddl	Z	ddl
m
Z
 ddlmZmZmZ 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mZmZmZ d"d„Zd#d$d„Zd%d&d„Zd'd„Z d(d„Z!d)d„Z"d*d„Z# G d„ d«      Z$ G d„ d«      Z% G d„ d«      Z& G d„ d«      Z' G d„ d«      Z( G d„ d«      Z) G d„ d«      Z* G d „ d!«      Z+y)+u<   Tests for MatchNotifier â€” SendGrid mocked, no real emails.é    )ÚannotationsN)Údatetime)Ú	MagicMockÚcallÚpatch)ÚSettings)ÚDgredClient)ÚMatchNotifier)Ú
LeadWriter)ÚMatchResultÚOfferÚ	PartQueryÚPostc                 ó\   — t        dddddd¬«      }|j                  | «       t        di |¤ŽS )	NÚtestTúSG.fake_key_for_testszsys@airminal.comzwlodek@tender.pl,d@dgx.devé
   )Údgred_api_keyÚdry_runÚsendgrid_api_keyÚnotify_email_fromÚnotify_email_toÚnotify_max_per_cycle© )ÚdictÚupdater   )Ú	overridesÚdefaultss     ú6/var/www/html/agent.samochodowy/tests/test_notifier.pyÚ	_settingsr       s:   € ÜØØØ0Ø,Ø4Øô€Hð ‡O�O�IÔÜÑ�hÑÐó    c                ól   — t        | d|d|j                  dd«      › �dt        dddd	d
«      d| › �¬«      S )Nõ   TIR czÄ™Å›cizhttps://facebook.com/ú Ú ú/Szukam pompy wody do Volvo FH13, numer 20744939éé  é   é   r   é   z&https://facebook.com/groups/tir/posts/©Úpost_idÚgroupÚauthor_nameÚauthor_profile_urlÚtextÚ	timestampÚpost_url)r   Úreplacer   )ÚpidÚauthors     r   Ú_postr6   #   sK   € ÜØØØØ2°6·>±>À#ÀrÓ3JÐ2KÐLØ>Ü˜4  B¨¨BÓ/Ø9¸#¸Ð?ôð r!   c                ó@   — t        | ddddt        ddddd	«      d
¬«      S )Nr#   úJan Kowalskiú https://facebook.com/JanKowalskizSzukam pompy wody do Volvo FH13r'   r(   r)   r   r*   r%   r+   )r   r   )r4   s    r   Ú_post_no_urlr:   /   s1   € ÜØØØ"Ø=Ø.Ü˜4  B¨¨BÓ/Øôð r!   c            	     ó(   — t        ddddddgd¬«      S )	NTr&   ÚVOLVOÚFH13ú
pompa wodyÚ20744939u$   Zapytanie o pompÄ™ wody z numerem OE)Úis_part_requestÚraw_textÚbrandÚmodelÚcategoryÚ
oe_numbersÚreason)r   r   r!   r   Ú_queryrG   ;   s&   € ÜØØBØØØØ�<Ø5ôð r!   c                 ó&   — t        ddddddg¬«      S )NÚ1Úallegroúhttps://allegro.pl/1úPompa wody VOLVO FH13 20744939g      |@r?   )Úoffer_idÚplatformÚurlÚtitleÚpricerE   )r   r   r!   r   Ú_offerrR   G   s#   € ÜØØØ"Ø.ØØ�<ôð r!   c                 ó2   — t        ddt        «       gd¬«      S )Nçffffffî?ÚoeT©Ú
confidenceÚmethodÚoffersÚmatched)r   rR   r   r!   r   Ú_matched_resultr[   R   s   € ÜØ ¬f«h¨ZÀôð r!   c                ó6   — t        «       }| |_        d|_        |S )Nr!   )r   Ústatus_codeÚbody)r]   Úresps     r   Ú_mock_sg_responser`   X   s   € Ü‹;€DØ"€DÔØ€D„IØ€Kr!   c                  ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestNotifierEnabledc                ó¸  — t        t        «       «      }|j                  }d}||u }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )NT©Úis©z/%(py2)s
{%(py2)s = %(py0)s.enabled
} is %(py5)sÚn©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7©r
   r    ÚenabledÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation©Úselfrg   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8s          r   Útest_enabled_with_key_and_toz0TestNotifierEnabled.test_enabled_with_key_and_tod   s{   € Üœ)›+Ó&ˆØ�y‰yÐ ˜DÐ ˆy˜DÐ × × Õ ˆy˜D× × × × × Ñ ˆq× × Ó ˆq× × Ô ˆy× × Ò ˜D× × × × × × Ô r!   c                ó¼  — t        t        d¬«      «      }|j                  }d}||u }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}y )
Nr%   ©r   Frd   rf   rg   rh   rl   rm   rn   rx   s          r   Útest_disabled_without_keyz-TestNotifierEnabled.test_disabled_without_keyh   s~   € Üœ)°RÔ8Ó9ˆØ�y‰yÐ!˜EÐ!ˆy˜EÐ!×!×!Õ!ˆy˜E×!×!×!×!×!Ñ!ˆq×!×!Ó!ˆq×!×!Ô!ˆy×!×!Ò!˜E×!×!×!×!×!×!Ô!r!   c                ó¼  — t        t        d¬«      «      }|j                  }d}||u }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}y )
Nr%   ©r   Frd   rf   rg   rh   rl   rm   rn   rx   s          r   Útest_disabled_without_toz,TestNotifierEnabled.test_disabled_without_tol   s~   € Üœ)°BÔ7Ó8ˆØ�y‰yÐ!˜EÐ!ˆy˜EÐ!×!×!Õ!ˆy˜E×!×!×!×!×!Ñ!ˆq×!×!Ó!ˆq×!×!Ô!ˆy×!×!Ò!˜E×!×!×!×!×!×!Ô!r!   N)Ú__name__Ú
__module__Ú__qualname__r   r‚   r…   r   r!   r   rb   rb   c   s   „ ò!ò"ó"r!   rb   c                  ó|   — e Zd Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Zy)ÚTestSeparateMailsPerRecipientú;agent_samochodowy.dgred.notifier.MatchNotifier._send_singlec                óþ  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  D �cg c]  }|j                   d
   ‘Œ }	}d}
|
|	v }|s™t        j                  d|fd|
|	f«      t        j                  |
«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
}d}
|
|	v }|s™t        j                  d|fd|
|	f«      t        j                  |
«      dt        j                  «       v st        j                  |	«      rt        j                  |	«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚d x}
}y c c}w )NÚc1Úreplyé   ©ú==©z2%(py2)s
{%(py2)s = %(py0)s.call_count
} == %(py5)sÚ	mock_sendrh   rl   rm   r   zwlodek@tender.pl©Úin©z%(py1)s in %(py3)sÚ
recipients©Úpy1Úpy3úassert %(py5)srk   z	d@dgx.dev)r
   r    Únotify_matchr6   rG   r[   Ú
call_countrp   rq   rr   rs   rt   ru   rv   rw   Úcall_args_listÚargs)ry   r“   rg   rz   r{   r|   r}   r~   Úcr—   Ú@py_assert0Ú@py_assert2Ú@py_format4s                r   Ú&test_sends_separate_mail_per_recipientzDTestSeparateMailsPerRecipient.test_sends_separate_mail_per_recipientr   sw  € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ó(Ø)2×)AÑ)AÖB A�a—f‘f˜Q“iÐBˆ
ÐBØ!Ð/Ð! ZÐ/×/×/Õ/Ð! Z×/×/Ó/Ð!×/×/×/×/×/Ð/ Z×/×/Ó/ Z×/×/×/×/×/×/Ó/ØÐ(ˆ{˜jÐ(×(×(Õ(ˆ{˜j×(×(Ó(ˆ{×(×(×(×(×(Ð(˜j×(×(Ó(˜j×(×(×(×(×(×(Ô(ùò Cs   ÄI:c                ó<  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  D �cg c]  }|j                  d   ‘Œ }}|j                  D �cg c]  }|j                  d   ‘Œ }}|d   }|d   }||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }	d	d
|	iz  }
t        t        j                  |
«      «      ‚d x}x}}|d   }|d   }||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }	d	d
|	iz  }
t        t        j                  |
«      «      ‚d x}x}}y c c}w c c}w )Nr�   rŽ   r(   r�   r   r�   ©z%(py1)s == %(py4)s©r™   Úpy4úassert %(py6)sÚpy6)r
   r    rœ   r6   rG   r[   rž   rŸ   rp   rq   ru   rv   rw   )ry   r“   rg   r    ÚsubjectsÚbodiesr¡   r|   r¢   Ú@py_format5Ú@py_format7s              r   Ú.test_each_recipient_gets_same_subject_and_bodyzLTestSeparateMailsPerRecipient.test_each_recipient_gets_same_subject_and_body{   s  € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ'0×'?Ñ'?Ö@ !�A—F‘F˜1“IÐ@ˆÐ@Ø%.×%=Ñ%=Ö> �!—&‘&˜“)Ð>ˆÐ>Ø˜‰{Ð)˜h q™kÐ)ˆ{˜kÑ)×)×)Õ)ˆ{˜k×)×)Ó)ˆ{×)×)Ò)˜k×)×)×)×)×)×)Ó)Ø�a‰yÐ%˜F 1™IÐ%ˆy˜IÑ%×%×%Õ%ˆy˜I×%×%Ó%ˆy×%×%Ò%˜I×%×%×%×%×%×%Ô%ùò AùÚ>s   ÁFÁ5Fc                ó@  — t        t        d¬«      «      }|j                  t        «       t	        «       t        «       dd«       |j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}|j                  j                   d   }d}||k(  }	|	slt        j                  d|	fd||f«      t        j                  |«      t        j                  |«      dœz  }
dd|
iz  }t        t        j                  |«      «      ‚d x}x}	}y )Nzsolo@test.comr„   r�   rŽ   r(   r�   r’   r“   rh   rl   rm   r   r¦   r§   r©   rª   )r
   r    rœ   r6   rG   r[   r�   rp   rq   rr   rs   rt   ru   rv   rw   Ú	call_argsrŸ   )ry   r“   rg   rz   r{   r|   r}   r~   r¡   r¢   r­   r®   s               r   Útest_single_recipientz3TestSeparateMailsPerRecipient.test_single_recipient„   sü   € äœ)°OÔDÓEˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ó(Ø×"Ñ"×'Ñ'¨Ñ*Ð=¨oÐ=Ð*¨oÑ=×=×=Õ=Ð*¨o×=×=Ó=Ð*×=×=Ò=¨o×=×=×=×=×=×=Ô=r!   c                ó  — t        t        d¬«      «      }|j                  t        «       t	        «       t        «       dd«       |j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}x}}y )Nza@x.com,b@x.com,c@x.comr„   r�   rŽ   é   r�   r’   r“   rh   rl   rm   ©r
   r    rœ   r6   rG   r[   r�   rp   rq   rr   rs   rt   ru   rv   rw   ©ry   r“   rg   rz   r{   r|   r}   r~   s           r   Útest_three_recipientsz3TestSeparateMailsPerRecipient.test_three_recipients‹   sŸ   € äœ)Ð4MÔNÓOˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ô(r!   N)r†   r‡   rˆ   r   r¤   r¯   r²   r·   r   r!   r   rŠ   rŠ   q   sl   „ Ù
ÐHÓIñ)ó Jð)ñ ÐHÓIñ&ó Jð&ñ ÐHÓIñ>ó Jð>ñ ÐHÓIñ)ó Jñ)r!   rŠ   c                  óD   — e Zd Z ed«      d„ «       Z ed«      d„ «       Zy)ÚTestNotifierDedupr‹   c                ód  — t        t        «       «      }t        d«      }|j                  |t	        «       t        «       dd«       |j                  |t	        «       t        «       dd«       |j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }d	d
|iz  }t        t        j                  |«      «      ‚d x}x}}y )NÚdup1r�   rŽ   r�   r�   r’   r“   rh   rl   rm   )r
   r    r6   rœ   rG   r[   r�   rp   rq   rr   rs   rt   ru   rv   rw   )	ry   r“   rg   Úpostrz   r{   r|   r}   r~   s	            r   Ú!test_same_post_not_notified_twicez3TestNotifierDedup.test_same_post_not_notified_twice“   s»   € äœ)›+Ó&ˆÜ�V‹}ˆØ	�‰�tœV›X¤Ó'8¸$ÀÔHØ	�‰�tœV›X¤Ó'8¸$ÀÔHà×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ô(r!   c                ór  — t        t        «       «      }|j                  t        d«      t	        «       t        «       dd«       |j                  t        d«      t	        «       t        «       dd«       |j                  }d}||k(  }|s­t        j                  d|fd||f«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      t        j                  |«      d
œz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}y )NÚar�   rŽ   ÚbÚc2é   r�   r’   r“   rh   rl   rm   rµ   r¶   s           r   Ú"test_different_posts_both_notifiedz4TestNotifierDedup.test_different_posts_both_notifiedœ   sº   € äœ)›+Ó&ˆØ	�‰”u˜S“z¤6£8¬_Ó->ÀÀgÔNØ	�‰”u˜S“z¤6£8¬_Ó->ÀÀgÔNà×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ô(r!   N)r†   r‡   rˆ   r   r½   rÃ   r   r!   r   r¹   r¹   ’   s6   „ Ù
ÐHÓIñ)ó Jð)ñ ÐHÓIñ)ó Jñ)r!   r¹   c                  ó(   — e Zd Z ed«      d„ «       Zy)ÚTestNotifierThrottler‹   c                óÈ  — t        t        d¬«      «      }g }t        d«      D ]M  }|j                  t	        t        |«      «      t        «       t        «       d|› �d«      }|j                  |«       ŒO g d¢}||k(  }|s™t        j                  d|fd||f«      d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	t        j                  |«      d
œz  }dd|iz  }	t        t        j                   |	«      «      ‚dx}}|j"                  }d}
||
k(  }|s­t        j                  d|fd||
f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |
«      dœz  }	dd|	iz  }t        t        j                   |«      «      ‚dx}x}}
y)u?   max=3 posts â†’ 3 posts Ã— 2 recipients = 6 _send_single calls.r´   )r   é   r    rŽ   )TTTFFr�   )z%(py0)s == %(py3)sÚresults©ri   rš   r›   rk   Né   r’   r“   rh   rl   rm   )r
   r    Úrangerœ   r6   ÚstrrG   r[   Úappendrp   rq   rr   rs   rt   ru   rv   rw   r�   )ry   r“   rg   rÈ   ÚiÚokr¢   rz   r£   r}   r{   r|   r~   s                r   Ú/test_throttle_counts_per_post_not_per_recipientzDTestNotifierThrottle.test_throttle_counts_per_post_not_per_recipient¦   s5  € ô œ)¸Ô;Ó<ˆØˆÜ�q“ò 	ˆAØ—‘Ü”c˜!“f“œv›x¬Ó):¸aÀ¸s¸GÀWóˆBð �N‰N˜2Õð		ò
 ;Ð:ˆwÐ:Ñ:×:×:Õ:ˆwÐ:×:×:×:×:×:Ñ:ˆw×:×:Ó:ˆw×:×:Ô:Ð:×:×:×:×:×:×:Ñ:à×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ô(r!   N)r†   r‡   rˆ   r   rÐ   r   r!   r   rÅ   rÅ   ¥   s   „ Ù
ÐHÓIñ)ó Jñ)r!   rÅ   c                  óZ   — e Zd Z ed ed«      ¬«      d„ «       Z ed«      d„ «       Zd„ Zy)ÚTestNotifierErrorHandlingr‹   zSendGrid down©Úside_effectc                óª  — t        t        «       «      }|j                  t        j                  «      5  |j                  t        «       t        «       t        «       dd«      }d d d «       d}|u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      dœz  }dd	|iz  }t        t        j                   |«      «      ‚d x}}d
„ |j"                  D «       }t%        |«      }	|	s•ddt        j                  «       v st        j                  t$        «      rt        j                  t$        «      ndt        j                  |«      t        j                  |	«      dœz  }
t        t        j                   |
«      «      ‚d x}}	y # 1 sw Y   �ŒixY w)Nr�   rŽ   Frd   ©z%(py0)s is %(py3)srÏ   rÉ   r›   rk   c              3  ó8   K  — | ]  }d |j                   v –— Œ y­w)zSendGrid errorN©Úmessage©Ú.0Úrs     r   ú	<genexpr>zITestNotifierErrorHandling.test_error_logged_not_raised.<locals>.<genexpr>½   s   è ø€ ÒI°QÐ# q§y¡yÔ0ÑIùó   ‚ú,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany©ri   rj   r¨   )r
   r    Úat_levelÚloggingÚERRORrœ   r6   rG   r[   rp   rq   rr   rs   rt   ru   rv   rw   Úrecordsrà   )ry   r“   Úcaplogrg   rÏ   r¢   rz   r£   r}   r|   r­   s              r   Útest_error_logged_not_raisedz6TestNotifierErrorHandling.test_error_logged_not_raised¶   s  € ô œ)›+Ó&ˆØ�_‰_œWŸ]™]Ó+ñ 	UØ—‘¤£¬«´?Ó3DÀdÈGÓTˆB÷	UàÐˆr�Uˆ{××Õˆr�U×××××Ñˆr××Óˆr××Ô�U××××××ÑÙI¸&¿.¹.ÔIÐIŒsÐIÓIÐIÑI×I×I×I×IÕIŒs×I×IÓIŒs×I×IÔIÐI×I×IÒIÐI×I×I×I×I×IÓI÷	Uñ 	Uús   ³.GÇGc                ó‚  — t        d«      dg|_        t        t        «       «      }|j	                  t        «       t        «       t        «       dd«      }d}||u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}|j                   }d}||k(  }	|	s­t        j                  d|	fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }
t        t        j                  |
«      «      ‚dx}x}	}y)z1If first recipient fails, second still gets mail.ÚfailNr�   rŽ   Frd   rÖ   rÏ   rÉ   r›   rk   r�   r�   r’   r“   rh   rl   rm   )ÚRuntimeErrorrÔ   r
   r    rœ   r6   rG   r[   rp   rq   rr   rs   rt   ru   rv   rw   r�   )ry   r“   rg   rÏ   r¢   rz   r£   r}   r{   r|   r~   s              r   Ú*test_partial_failure_still_sends_to_otherszDTestNotifierErrorHandling.test_partial_failure_still_sends_to_others¿   s	  € ô ".¨fÓ!5°tÐ <ˆ	ÔÜœ)›+Ó&ˆØ�^‰^œE›G¤V£X¬Ó/@À$ÈÓPˆØÐˆr�Uˆ{××Õˆr�U×××××Ñˆr××Óˆr××Ô�U××××××ÑØ×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ô(r!   c                óÒ  — t        t        d¬«      «      }|j                  t        «       t	        «       t        «       dd«      }d}||u }|s™t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      d	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )Nr%   r�   r�   rŽ   Frd   rÖ   rÏ   rÉ   r›   rk   )r
   r    rœ   r6   rG   r[   rp   rq   rr   rs   rt   ru   rv   rw   )ry   rg   rÏ   r¢   rz   r£   r}   s          r   Útest_disabled_returns_falsez5TestNotifierErrorHandling.test_disabled_returns_falseÈ   s†   € Üœ)°RÔ8Ó9ˆØ�^‰^œE›G¤V£X¬Ó/@À$ÈÓPˆØÐˆr�Uˆ{××Õˆr�U×××××Ñˆr××Óˆr××Ô�U××××××Òr!   N)r†   r‡   rˆ   r   rê   rç   rë   rí   r   r!   r   rÒ   rÒ   µ   sF   „ Ù
ÐHÙ# OÓ4ô6ñJó6ðJñ ÐHÓIñ)ó Jð)ór!   rÒ   c                  ó$  — e Zd Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z	 ed«      d„ «       Z
 ed«      d	„ «       Z ed«      d
„ «       Z ed«      d„ «       Zy)ÚTestHtmlContentr‹   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )Nr�   rŽ   r   r(   r>   r”   r–   Úsubjectr˜   r›   rk   r<   ©r
   r    rœ   r6   rG   r[   rž   rŸ   rp   rq   ru   rr   rs   rt   rv   rw   )ry   r“   rg   rñ   r¡   r¢   r£   r}   s           r   Ú&test_subject_contains_part_and_vehiclez6TestHtmlContent.test_subject_contains_part_and_vehicleÏ   sö   € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×*Ñ*¨1Ñ-×2Ñ2°1Ñ5ˆØÐ&ˆ|˜wÐ&×&×&Õ&ˆ|˜w×&×&Ó&ˆ|×&×&×&×&×&Ð&˜w×&×&Ó&˜w×&×&×&×&×&×&Ó&ØÐ!ˆw˜'Ð!×!×!Õ!ˆw˜'×!×!Ó!ˆw×!×!×!×!×!Ð!˜'×!×!Ó!˜'×!×!×!×!×!×!Ô!r!   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )Nr�   zreply text herer   r�   zSzukam pompy wodyr”   r–   Úhtmlr˜   r›   rk   rò   ©ry   r“   rg   rõ   r¡   r¢   r£   r}   s           r   Útest_html_contains_post_textz,TestHtmlContent.test_html_contains_post_text×   sý   € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÐCTÔUØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ"Ð*Ð" dÐ*×*×*Õ*Ð" d×*×*Ó*Ð"×*×*×*×*×*Ð* d×*×*Ó* d×*×*×*×*×*×*Ó*Ø Ð(Ð  DÐ(×(×(Õ(Ð  D×(×(Ó(Ð ×(×(×(×(×(Ð( D×(×(Ó( D×(×(×(×(×(×(Ô(r!   c                óš  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )Nr�   rŽ   r   r�   rL   r”   r–   rõ   r˜   r›   rk   z450 PLNrK   rò   rö   s           r   Ú test_html_contains_offer_detailsz0TestHtmlContent.test_html_contains_offer_detailsß   sU  € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ/Ð7Ð/°4Ð7×7×7Õ7Ð/°4×7×7Ó7Ð/×7×7×7×7×7Ð7°4×7×7Ó7°4×7×7×7×7×7×7Ó7ØÐ ˆy˜DÐ × × Õ ˆy˜D× × Ó ˆy× × × × × Ð ˜D× × Ó ˜D× × × × × × Ó Ø%Ð-Ð%¨Ð-×-×-Õ-Ð%¨×-×-Ó-Ð%×-×-×-×-×-Ð-¨×-×-Ó-¨×-×-×-×-×-×-Ô-r!   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )NÚc123rŽ   r   r�   z/client/c123r”   r–   rõ   r˜   r›   rk   u   OtwÃ³rz lead w dgredrò   rö   s           r   Útest_html_contains_dgred_linkz-TestHtmlContent.test_html_contains_dgred_linkè   sù   € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸VÀWÔMØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØÐ%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%Ó%ˆ~×%×%×%×%×%Ð% ×%×%Ó% ×%×%×%×%×%×%Ó%Ø%Ð-Ð%¨Ð-×-×-Õ-Ð%¨×-×-Ó-Ð%×-×-×-×-×-Ð-¨×-×-Ó-¨×-×-×-×-×-×-Ô-r!   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚d x}}y )Nr�   rŽ   r   r�   r9   r”   r–   rõ   r˜   r›   rk   zProfil autorarò   rö   s           r   Ú&test_html_contains_author_profile_linkz6TestHtmlContent.test_html_contains_author_profile_linkð   sù   € äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ1Ð9Ð1°TÐ9×9×9Õ9Ð1°T×9×9Ó9Ð1×9×9×9×9×9Ð9°T×9×9Ó9°T×9×9×9×9×9×9Ó9ØÐ&ˆ $Ð&×&×&Õ&ˆ $×&×&Ó&ˆ×&×&×&×&×&Ð& $×&×&Ó& $×&×&×&×&×&×&Ô&r!   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}y)u0   Post URL â†’ 'OtwÃ³rz post na Facebooku' button.r�   rŽ   r   r�   õ   OtwÃ³rz post na Facebookur”   r–   rõ   r˜   r›   rk   Nzfacebook.com/groups/tir/posts/1rò   rö   s           r   Ú"test_html_contains_post_url_buttonz2TestHtmlContent.test_html_contains_post_url_buttonø   sþ   € ô œ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ*Ð2Ð*¨dÐ2×2×2Õ2Ð*¨d×2×2Ó2Ð*×2×2×2×2×2Ð2¨d×2×2Ó2¨d×2×2×2×2×2×2Ó2Ø0Ð8Ð0°DÐ8×8×8Õ8Ð0°D×8×8Ó8Ð0×8×8×8×8×8Ð8°D×8×8Ó8°D×8×8×8×8×8×8Ô8r!   c                óP  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v}|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}y)u/   No post_url â†’ warning text instead of button.r�   rŽ   r   r�   zBrak linku do postar”   r–   rõ   r˜   r›   rk   Nr   ©únot in©z%(py1)s not in %(py3)s)r
   r    rœ   r:   rG   r[   rž   rŸ   rp   rq   ru   rr   rs   rt   rv   rw   rö   s           r   Ú(test_html_missing_post_url_shows_warningz8TestHtmlContent.test_html_missing_post_url_shows_warning  sþ   € ô œ)›+Ó&ˆØ	�‰”|“~¤v£x´Ó1BÀDÈ'ÔRØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ$Ð,Ð$¨Ð,×,×,Õ,Ð$¨×,×,Ó,Ð$×,×,×,×,×,Ð,¨×,×,Ó,¨×,×,×,×,×,×,Ó,Ø*Ð6Ð*°$Ð6×6×6Õ6Ð*°$×6×6Ó6Ð*×6×6×6×6×6Ð6°$×6×6Ó6°$×6×6×6×6×6×6Ô6r!   c                ó  — t        t        «       «      }|j                  t        «       t	        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	œz  }d
d|iz  }t        t        j                  |«      «      ‚dx}}y)z(Verify the key HTML structural elements.r�   u   gotowa odpowiedÅºr   r�   zNowe dopasowanier”   r–   rõ   r˜   r›   rk   NzZapytanie z grupyzTIR czúDopasowana ofertau   Zobacz ofertÄ™úGotowa propozycja odpowiedzizAgent Samochodowyrò   rö   s           r   Útest_html_has_proper_structurez.TestHtmlContent.test_html_has_proper_structure
  s$  € ô œ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÐCVÔWØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆà!Ð)Ð! TÐ)×)×)Õ)Ð! T×)×)Ó)Ð!×)×)×)×)×)Ð) T×)×)Ó) T×)×)×)×)×)×)Ó)à"Ð*Ð" dÐ*×*×*Õ*Ð" d×*×*Ó*Ð"×*×*×*×*×*Ð* d×*×*Ó* d×*×*×*×*×*×*Ó*ØÐˆx˜4Ð××Õˆx˜4××Óˆx×××××Ð˜4××Ó˜4××××××Óà"Ð*Ð" dÐ*×*×*Õ*Ð" d×*×*Ó*Ð"×*×*×*×*×*Ð* d×*×*Ó* d×*×*×*×*×*×*Ó*ØÐ'Ð 4Ð'×'×'Õ'Ð 4×'×'Ó'Ð×'×'×'×'×'Ð' 4×'×'Ó' 4×'×'×'×'×'×'Ó'à-Ð5Ð-°Ð5×5×5Õ5Ð-°×5×5Ó5Ð-×5×5×5×5×5Ð5°×5×5Ó5°×5×5×5×5×5×5Ó5Ø"Ð*Ð" dÐ*×*×*Õ*Ð" d×*×*Ó*Ð"×*×*×*×*×*Ð* d×*×*Ó* d×*×*×*×*×*×*Ó*à"Ð*Ð" dÐ*×*×*Õ*Ð" d×*×*Ó*Ð"×*×*×*×*×*Ð* d×*×*Ó* d×*×*×*×*×*×*Ô*r!   c                ó  — t        dddddt        ddd«      d	¬
«      }t        t        «       «      }|j	                  |t        «       t        «       dd«       |j                  d   j                  d   }d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                   |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                   |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                   |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                   |«      «      ‚dx}}y)z0HTML special chars in post text must be escaped.Úesc1zTest <Group>zA & Bzhttps://fb.com/abu)   Szukam czÄ™Å›ci "specjalnej" <TIR> & inner'   r(   r)   zhttps://fb.com/p/1r+   r�   zreply <tag>r   r�   z&lt;TIR&gt;r”   r–   rõ   r˜   r›   rk   Nz
&amp; innez	A &amp; Bz&lt;tag&gt;)r   r   r
   r    rœ   rG   r[   rž   rŸ   rp   rq   ru   rr   rs   rt   rv   rw   )	ry   r“   r¼   rg   rõ   r¡   r¢   r£   r}   s	            r   Útest_html_escapes_special_charsz/TestHtmlContent.test_html_escapes_special_chars  sÐ  € ô Ø .¸gØ2Ø<Ü˜t Q¨Ó+Ð6Jô	
ˆô œ)›+Ó&ˆØ	�‰�tœV›X¤Ó'8¸$ÀÔNØ×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØÐ$ˆ} Ð$×$×$Õ$ˆ} ×$×$Ó$ˆ}×$×$×$×$×$Ð$ ×$×$Ó$ ×$×$×$×$×$×$Ó$ØÐ#ˆ|˜tÐ#×#×#Õ#ˆ|˜t×#×#Ó#ˆ|×#×#×#×#×#Ð#˜t×#×#Ó#˜t×#×#×#×#×#×#Ó#ØÐ"ˆ{˜dÐ"×"×"Õ"ˆ{˜d×"×"Ó"ˆ{×"×"×"×"×"Ð"˜d×"×"Ó"˜d×"×"×"×"×"×"Ó"ØÐ$ˆ} Ð$×$×$Õ$ˆ} ×$×$Ó$ˆ}×$×$×$×$×$Ð$ ×$×$Ó$ ×$×$×$×$×$×$Ô$r!   c                ó^  — t        ddg d¬«      }t        t        «       «      }|j                  t	        «       t        «       |dd«       |j                  d   j                  d   }d	}||v}|s™t        j                  d
|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚dx}}d}||v }|s™t        j                  d|fd||f«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      nddœz  }dd|iz  }t        t        j                  |«      «      ‚dx}}y)u:   No offers â†’ no offer card, but rest of mail still works.rT   rU   TrV   r�   rŽ   r   r�   r  r  r  rõ   r˜   r›   rk   Nr	  r”   r–   )r   r
   r    rœ   r6   rG   rž   rŸ   rp   rq   ru   rr   rs   rt   rv   rw   )	ry   r“   Úresultrg   rõ   r¡   r¢   r£   r}   s	            r   Útest_html_no_offerz"TestHtmlContent.test_html_no_offer/  s  € ô ¨°TÀ"ÈdÔSˆÜœ)›+Ó&ˆØ	�‰”u“w¤£¨&°$¸Ô@Ø×'Ñ'¨Ñ*×/Ñ/°Ñ2ˆØ"Ð.Ð"¨$Ð.×.×.Õ.Ð"¨$×.×.Ó.Ð"×.×.×.×.×.Ð.¨$×.×.Ó.¨$×.×.×.×.×.×.Ó.Ø-Ð5Ð-°Ð5×5×5Õ5Ð-°×5×5Ó5Ð-×5×5×5×5×5Ð5°×5×5Ó5°×5×5×5×5×5×5Ô5r!   N)r†   r‡   rˆ   r   ró   r÷   rù   rü   rþ   r  r  r
  r  r  r   r!   r   rï   rï   Î   s  „ Ù
ÐHÓIñ"ó Jð"ñ ÐHÓIñ)ó Jð)ñ ÐHÓIñ.ó Jð.ñ ÐHÓIñ.ó Jð.ñ ÐHÓIñ'ó Jð'ñ ÐHÓIñ9ó Jð9ñ ÐHÓIñ7ó Jð7ñ ÐHÓIñ+ó Jð+ñ& ÐHÓIñ%ó Jð%ñ  ÐHÓIñ6ó Jñ6r!   rï   c                  ó`   — e Zd Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Zy)ÚTestSendGridIntegrationzsendgrid.SendGridAPIClientc                óü   — t        «       }t        d«      |j                  _        ||_        t	        t        «       «      }|j                  ddd«       |j                  d«       |j                  j                  «        y )NéÊ   útest@example.comÚSubjectú<p>Body</p>r   )	r   r`   ÚsendÚreturn_valuer
   r    Ú_send_singleÚassert_called_once_withÚassert_called_once©ry   ÚMockSGClientÚmock_instancerg   s       r   Ú#test_send_single_calls_sendgrid_apiz;TestSendGridIntegration.test_send_single_calls_sendgrid_api;  sb   € ä!›ˆÜ*;¸CÓ*@ˆ×ÑÔ'Ø$1ˆÔ!äœ)›+Ó&ˆØ	�‰Ð)¨9°mÔDà×,Ñ,Ð-DÔEØ×Ñ×-Ñ-Õ/r!   c                ó  — t        «       }t        d«      |j                  _        ||_        t	        t        «       «      }t        j                  t        d¬«      5  |j                  ddd«       d d d «       y # 1 sw Y   y xY w)Ni�  zSendGrid HTTP 400)Úmatchr  r  r  )
r   r`   r  r  r
   r    ÚpytestÚraisesrê   r  r  s       r   Útest_send_single_raises_on_4xxz6TestSendGridIntegration.test_send_single_raises_on_4xxG  si   € ä!›ˆÜ*;¸CÓ*@ˆ×ÑÔ'Ø$1ˆÔ!äœ)›+Ó&ˆÜ�]‰]œ<Ð/BÔCñ 	IØ�N‰NÐ-¨y¸-ÔH÷	I÷ 	Iñ 	Iús   ÁA7Á7B c                ó®  — t        «       }t        d«      |j                  _        ||_        t	        t        «       «      }|j                  t        «       t        «       t        «       dd«       |j                  }|j                  }d}||k(  }|sÁt        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                   |«      ndt        j                   |«      t        j                   |«      t        j                   |«      dœz  }d	d
|iz  }	t#        t        j$                  |	«      «      ‚dx}x}x}}y)z5Each recipient triggers a separate SendGrid API call.r  r�   rŽ   r�   r�   )zL%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.send
}.call_count
} == %(py7)sr  )ri   rj   r¨   rm   zassert %(py9)sÚpy9N)r   r`   r  r  r
   r    rœ   r6   rG   r[   r�   rp   rq   rr   rs   rt   ru   rv   rw   )
ry   r  r  rg   rz   r|   Ú@py_assert6Ú@py_assert5r~   Ú@py_format10s
             r   Ú'test_full_flow_sends_separate_api_callsz?TestSendGridIntegration.test_full_flow_sends_separate_api_callsQ  sÙ   € ô "›ˆÜ*;¸CÓ*@ˆ×ÑÔ'Ø$1ˆÔ!äœ)›+Ó&ˆØ	�‰”u“w¤£¬/Ó*;¸TÀ7ÔKð ×!Ñ!Ð1Ð!×,Ñ,Ð1°Ð1Ð,°Ñ1×1×1Õ1Ð,°×1×1×1×1×1Ñ1ˆ}×1×1Ó1ˆ}×1×1Ô1Ð!×1×1Ò1Ð,×1×1Ò1°×1×1×1×1×1×1Ö1r!   N)r†   r‡   rˆ   r   r   r%  r+  r   r!   r   r  r  :  sP   „ Ù
Ð'Ó(ñ	0ó )ð	0ñ Ð'Ó(ñIó )ðIñ Ð'Ó(ñ
2ó )ñ
2r!   r  c                  óŒ   — e Zd Z ed«      d„ «       Z ed«      d„ «       Z ed«      d„ «       Z ed ed«      ¬«      d„ «       Zy)	ÚTestWriterNotifierIntegrationr‹   c                óL  — t        «       }t        |«      }t        ||«      }|j                  t	        «       t        «       t        «       «       |j                  }d}||k(  }|s­t        j                  d|fd||f«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                  |	«      «      ‚d x}x}}|j!                  «        y )Nr�   r�   r’   r“   rh   rl   rm   )r    r	   r   Ú
write_leadr6   rG   r[   r�   rp   rq   rr   rs   rt   ru   rv   rw   Úclose)
ry   r“   ÚsettingsÚdgredÚwriterrz   r{   r|   r}   r~   s
             r   Ú#test_notifier_called_for_dopasowanozATestWriterNotifierIntegration.test_notifier_called_for_dopasowanod  s³   € ä“;ˆÜ˜HÓ%ˆÜ˜E 8Ó,ˆØ×Ñœ%›'¤6£8¬_Ó->Ô?à×#Ñ#Ð( qÐ(Ð# qÑ(×(×(Õ(Ð# q×(×(×(×(×(Ñ(ˆy×(×(Ó(ˆy×(×(Ô(Ð#×(×(Ò( q×(×(×(×(×(×(Ó(Ø�‰�r!   c                óü   — t        «       }t        |«      }t        ||«      }t        ddt	        «       gd¬«      }|j                  t        «       t        «       |«       |j                  «        |j                  «        y )Ng333333ã?ÚatrybutyTrV   )
r    r	   r   r   rR   r/  r6   rG   Úassert_not_calledr0  ©ry   r“   r1  r2  r3  r  s         r   Ú#test_notifier_not_called_for_reviewzATestWriterNotifierIntegration.test_notifier_not_called_for_reviewn  sa   € ä“;ˆÜ˜HÓ%ˆÜ˜E 8Ó,ˆÜ¨°ZÜ%+£X J¸ô>ˆà×Ñœ%›'¤6£8¨VÔ4Ø×#Ñ#Ô%Ø�‰�r!   c                óè   — t        «       }t        |«      }t        ||«      }t        ddd¬«      }|j	                  t        «       t        «       |«       |j                  «        |j                  «        y )Ng        ÚbrakF)rW   rX   rZ   )	r    r	   r   r   r/  r6   rG   r7  r0  r8  s         r   Ú%test_notifier_not_called_for_no_matchzCTestWriterNotifierIntegration.test_notifier_not_called_for_no_matchy  sX   € ä“;ˆÜ˜HÓ%ˆÜ˜E 8Ó,ˆÜ¨°FÀEÔJˆØ×Ñœ%›'¤6£8¨VÔ4Ø×#Ñ#Ô%Ø�‰�r!   ÚboomrÓ   c                ó–  — t        «       }t        |«      }t        ||«      }|j                  t        j
                  «      5  |j                  t        «       t        «       t        «       «       ddd«       d„ |j                  D «       }t        |«      }|s•ddt        j                  «       v st        j                  t        «      rt        j                   t        «      ndt        j                   |«      t        j                   |«      dœz  }t#        t        j$                  |«      «      ‚dx}}|j'                  «        y# 1 sw Y   ŒÓxY w)u@   SendGrid error must NOT propagate â€” lead writing must succeed.Nc              3  ó8   K  — | ]  }d |j                   v –— Œ y­w)zLead writtenNrØ   rÚ   s     r   rÝ   z^TestWriterNotifierIntegration.test_sendgrid_failure_does_not_break_pipeline.<locals>.<genexpr>Œ  s   è ø€ ÒG°1�> Q§Y¡YÔ.ÑGùrÞ   rß   rà   rá   )r    r	   r   râ   rã   ÚINFOr/  r6   rG   r[   rå   rà   rr   rs   rp   rt   ru   rv   rw   r0  )	ry   r“   ræ   r1  r2  r3  rz   r|   r­   s	            r   Ú-test_sendgrid_failure_does_not_break_pipelinezKTestWriterNotifierIntegration.test_sendgrid_failure_does_not_break_pipelineƒ  sÏ   € ô “;ˆÜ˜HÓ%ˆÜ˜E 8Ó,ˆØ�_‰_œWŸ\™\Ó*ñ 	DØ×Ñœe›g¤v£x´Ó1BÔC÷	DáG¸¿¹ÔGÐGŒsÐGÓGÐGÑG×G×G×G×GÕGŒs×G×GÓGŒs×G×GÔGÐG×G×GÒGÐG×G×G×G×G×GÒGØ�‰�÷	Dð 	Dús   Á,D?Ä?EN)	r†   r‡   rˆ   r   r4  r9  r<  rê   rA  r   r!   r   r-  r-  c  su   „ Ù
ÐHÓIñó Jðñ ÐHÓIñó Jðñ ÐHÓIñó Jðñ ÐHÙ# FÓ+ô-ñó-ñr!   r-  )Úreturnr   )rI   r8   )r4   rÌ   r5   rÌ   rB  r   )Únourl)r4   rÌ   rB  r   )rB  r   )rB  r   )rB  r   )r  ),Ú__doc__Ú
__future__r   Úbuiltinsrr   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterp   rã   r   Úunittest.mockr   r   r   r#  Úagent_samochodowy.configr   Úagent_samochodowy.dgred.clientr	   Ú agent_samochodowy.dgred.notifierr
   Úagent_samochodowy.dgred.writerr   Úagent_samochodowy.modelsr   r   r   r   r    r6   r:   rG   rR   r[   r`   rb   rŠ   r¹   rÅ   rÒ   rï   r  r-  r   r!   r   ú<module>rP     s¨   ðÙ Bå "ç  „ ƒÝ ß 0Ñ 0ã å -Ý 6Ý :Ý 5ß HÓ Hó
 ô	ô	ó	óóó÷"ñ "÷)ñ )÷B)ñ )÷&)ñ )÷ ñ ÷2i6ñ i6÷X"2ñ "2÷R*ò *r!   