Ë
    Ä9jø  ã                   óà   — d 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 ddlmZmZ ej                  defd„«       Z G d„ d	«      Z G d
„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy)z&Tests for the layered matching engine.é    N)Úmatch)ÚCatalogIndex)ÚOfferÚ	PartQueryÚreturnc                  óÞ   — t        d«      } t        dddddddd	d
dg¬«	      t        dddddddddg¬«	      t        ddddddddg¬«      t        dddd d!d"d#g ¬«      g}| j                  |«       | S )$z,Build an in-memory index with sample offers.z:memory:Ú1Úallegrozhttps://a.pl/1z#Pompa wody VOLVO FH13 D13A 20744939ÚVOLVOÚFH13ÚpompaÚD13AÚ20744939Ú20734268)	Úoffer_idÚplatformÚurlÚtitleÚbrandÚmodelÚcategoryÚengine_codeÚ
oe_numbersÚ2Úebayzhttps://e.com/2z(Alternator OPEL Astra F C18NZ 0120488234ÚOPELzAstra FÚ
alternatorÚC18NZÚ
0120488234Ú3zhttps://a.pl/3z$Klocki hamulcowe MAN TGA 81508206039ÚMANÚTGAÚklockiÚ81508206039)r   r   r   r   r   r   r   r   Ú4zhttps://a.pl/4zFiltr oleju SCANIA R500ÚSCANIAÚR500Úfiltr)r   r   Úbuild_from_offers)ÚidxÚofferss     ú</var/www/html/agent.samochodowy/tests/test_matcher_engine.pyÚindexr-   
   s³   € ô �zÓ
"€CäØ 9Ð2BØ7Ø °'ØØ" JÐ/ô	
ô 	Ø 6Ð/@Ø<Ø 	°LØØ$�~ô	
ô 	Ø 9Ð2BØ8Ø˜u¨xØ%�ô		
ô 	Ø 9Ð2BØ+Ø &°7Øô		
ð+€Fð8 ×Ñ˜&Ô!Ø€Jó    c                   ó$   — e Zd Zdefd„Zdefd„Zy)ÚTestOeMatchr-   c                 óZ  — t        dddg¬«      }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}}|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}||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}}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 )NTzszukam pompy 20744939r   ©Úis_part_requestÚraw_textr   ©Úis©z/%(py2)s
{%(py2)s = %(py0)s.matched
} is %(py5)sÚresult©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7Úoe©ú==©z.%(py2)s
{%(py2)s = %(py0)s.method
} == %(py5)sçffffffî?©z2%(py2)s
{%(py2)s = %(py0)s.confidence
} == %(py5)sc              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)r	   N)r   )Ú.0Úos     r,   ú	<genexpr>z2TestOeMatch.test_exact_oe_match.<locals>.<genexpr>9   s   è ø€ Ò<¨�1—:‘: Õ$Ñ<ùs   ‚z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)r:   r;   Úpy4)r   r   ÚmatchedÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚmethodÚ
confidencer+   rI   )
Úselfr-   Úqueryr8   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_format5s
             r,   Útest_exact_oe_matchzTestOeMatch.test_exact_oe_match/   sÔ  € ÜØ Ø,Ø"�|ô
ˆô
 �u˜eÓ$ˆØ�~‰~Ð% Ð%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%×%×%×%Ñ%ˆv×%×%Ó%ˆv×%×%Ô%ˆ~×%×%Ò% ×%×%×%×%×%×%Ó%Ø�}‰}Ð$ Ð$ˆ} Ñ$×$×$Õ$ˆ} ×$×$×$×$×$Ñ$ˆv×$×$Ó$ˆv×$×$Ô$ˆ}×$×$Ò$ ×$×$×$×$×$×$Ó$Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ó(Ù<¨f¯m©mÔ<Ð<ŒsÐ<Ó<Ð<Ñ<×<×<×<×<Õ<Œs×<×<Ó<Œs×<×<Ô<Ð<×<×<Ò<Ð<×<×<×<×<×<Ó<r.   c                 óÈ  — t        dddg¬«      }t        ||«      }|j                  }d}||v }|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 )NTzszukam 999999999Ú	999999999r2   )ÚfuzzyÚbrak)Úin)z.%(py2)s
{%(py2)s = %(py0)s.method
} in %(py5)sr8   r9   r=   r>   )r   r   rT   rL   rM   rN   rO   rP   rQ   rR   rS   ©	rV   r-   rW   r8   rX   rY   rZ   r[   r\   s	            r,   Útest_oe_no_hitzTestOeMatch.test_oe_no_hit;   s–   € ÜØ Ø'Ø#�}ô
ˆô
 �u˜eÓ$ˆà�}‰}Ð1Ð 1Ð1ˆ}Ð 1Ð1×1×1Õ1ˆ}Ð 1×1×1×1×1×1Ñ1ˆv×1×1Ó1ˆv×1×1Ô1ˆ}×1×1Ò1Ð 1×1×1×1×1×1×1Ô1r.   N)Ú__name__Ú
__module__Ú__qualname__r   r^   re   © r.   r,   r0   r0   .   s   „ ð
=¨ó 
=ð2 Lô 2r.   r0   c                   ó   — e Zd Zdefd„Zy)ÚTestEngineCodeMatchr-   c                 óè  — t        dddd¬«      }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}}|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}||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 )NTzalternator do Opla C18NZr   r   )r3   r4   r   r   r5   r7   r8   r9   r=   r>   r   r@   rB   gš™™™™™é?rD   ©r   r   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rd   s	            r,   Útest_engine_code_matchz*TestEngineCodeMatch.test_engine_code_matchG   sr  € ÜØ Ø/ØØô	
ˆô �u˜eÓ$ˆØ�~‰~Ð% Ð%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%×%×%×%Ñ%ˆv×%×%Ó%ˆv×%×%Ô%ˆ~×%×%Ò% ×%×%×%×%×%×%Ó%Ø�}‰}Ð- Ð-ˆ} Ñ-×-×-Õ-ˆ} ×-×-×-×-×-Ñ-ˆv×-×-Ó-ˆv×-×-Ô-ˆ}×-×-Ò- ×-×-×-×-×-×-Ó-Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r.   N)rf   rg   rh   r   rn   ri   r.   r,   rk   rk   F   s   „ ð
)¨Lô 
)r.   rk   c                   ó<   — e Zd Zdefd„Zdefd„Zdefd„Zdefd„Zy)ÚTestAttributeMatchr-   c                 óê  — t        ddddd¬«      }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}}|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}||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(   All three attributes confirmed â†’ 0.90.Tzklocki MAN TGAr!   r"   r#   ©r3   r4   r   r   r   r5   r7   r8   r9   r=   r>   NÚatrybutyr@   rB   çÍÌÌÌÌÌì?rD   rm   rd   s	            r,   Ú#test_brand_model_category_confirmedz6TestAttributeMatch.test_brand_model_category_confirmedU   su  € äØ Ø%ØØØô
ˆô �u˜eÓ$ˆØ�~‰~Ð% Ð%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%×%×%×%Ñ%ˆv×%×%Ó%ˆv×%×%Ô%ˆ~×%×%Ò% ×%×%×%×%×%×%Ó%Ø�}‰}Ð* 
Ð*ˆ} 
Ñ*×*×*Õ*ˆ} 
×*×*×*×*×*Ñ*ˆv×*×*Ó*ˆv×*×*Ô*ˆ}×*×*Ò* 
×*×*×*×*×*×*Ó*Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r.   c                 óè  — t        dddd¬«      }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}}|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}||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 )NTzfiltr Scaniar&   r(   )r3   r4   r   r   r5   r7   r8   r9   r=   r>   rs   r@   rB   gš™™™™™á?rD   rm   rd   s	            r,   Útest_brand_category_onlyz+TestAttributeMatch.test_brand_category_onlyc   sr  € ÜØ Ø#ØØô	
ˆô �u˜eÓ$ˆØ�~‰~Ð% Ð%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%×%×%×%Ñ%ˆv×%×%Ó%ˆv×%×%Ô%ˆ~×%×%Ò% ×%×%×%×%×%×%Ó%Ø�}‰}Ð* 
Ð*ˆ} 
Ñ*×*×*Õ*ˆ} 
×*×*×*×*×*Ñ*ˆv×*×*Ó*ˆv×*×*Ô*ˆ}×*×*Ò* 
×*×*×*×*×*×*Ó*Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r.   c                 ó¾  — t        ddddd¬«      }t        ||«      }g }|j                  }d}||k7  }|}|s|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  }|j                  |«       |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  }|j                  |«       t	        j                  |d«      i z  }dd|iz  }t        t	        j                  |«      «      ‚dx}x}x}x}x}x}	x}}
y)uE   brand+model match but wrong category â†’ no match (not random parts).Tzrozrusznik MAN TGAr!   r"   Ú
rozrusznikrr   rs   gš™™™™™Ù?)ú!=)z.%(py4)s
{%(py4)s = %(py2)s.method
} != %(py7)sr8   )r;   rJ   r>   z%(py9)sÚpy9©ú<)z5%(py13)s
{%(py13)s = %(py11)s.confidence
} < %(py16)s)Úpy11Úpy13Úpy16z%(py18)sÚpy18é   zassert %(py21)sÚpy21N)r   r   rT   rU   rL   rM   rN   rO   rP   rQ   ÚappendÚ_format_booloprR   rS   )rV   r-   rW   r8   rX   rZ   Ú@py_assert6Ú@py_assert5Ú@py_assert0Ú@py_assert12Ú@py_assert15Ú@py_assert14r\   Ú@py_format10Ú@py_format17Ú@py_format19Ú@py_format20Ú@py_format22s                     r,   Útest_wrong_category_rejectedz/TestAttributeMatch.test_wrong_category_rejectedo   s  € äØ Ø)ØØØ!ô
ˆô �u˜eÓ$ˆáFˆv�}‰}ÐF 
ÐFˆ} 
Ñ*ÔF¨f×.?Ñ.?ÐFÀ$ÐFÐ.?À$Ñ.F×F×F×FÐFˆ} 
×F×F×F×F×FÑFˆv×F×FÓFˆv×F×FÔFˆ}×F×FÒF 
×F×F×F×F×F×FÕFÐ.?À$×F×F×F×F×FÑF¨f×F×FÓF¨f×F×FÔFÐ.?×F×FÒFÀ$×F×F×F×F×F×F×F×F×F×F×F×F×F×Fr.   c                 óê  — t        ddddd¬«      }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}}|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}||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)z9Model variant 'TGA xyz' should match catalog model 'TGA'.Tzklocki MAN TGA xxlr!   zTGA xxlr#   rr   r5   r7   r8   r9   r=   r>   Nrs   r@   rB   rt   rD   rm   rd   s	            r,   Útest_flexible_model_matchz,TestAttributeMatch.test_flexible_model_match|   su  € äØ Ø)ØØØô
ˆô �u˜eÓ$ˆØ�~‰~Ð% Ð%ˆ~ Ð%×%×%Õ%ˆ~ ×%×%×%×%×%Ñ%ˆv×%×%Ó%ˆv×%×%Ô%ˆ~×%×%Ò% ×%×%×%×%×%×%Ó%Ø�}‰}Ð* 
Ð*ˆ} 
Ñ*×*×*Õ*ˆ} 
×*×*×*×*×*Ñ*ˆv×*×*Ó*ˆv×*×*Ô*ˆ}×*×*Ò* 
×*×*×*×*×*×*Ó*Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r.   N)rf   rg   rh   r   ru   rw   r‘   r“   ri   r.   r,   rp   rp   T   s4   „ ð)¸ó )ð
)¨ló 
)ðG°,ó Gð)¨|ô )r.   rp   c                   ó   — e Zd Zdefd„Zy)ÚTestNoMatchr-   c                 óÌ  — t        ddddd¬«      }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}}y )NTu$   potrzebujÄ™ zderzak Fiat Ducato 2015ÚFIATÚDucatoÚzderzakrr   g      à?r|   )z1%(py2)s
{%(py2)s = %(py0)s.confidence
} < %(py5)sr8   r9   r=   r>   )r   r   rU   rL   rM   rN   rO   rP   rQ   rR   rS   rd   s	            r,   Útest_completely_unrelatedz%TestNoMatch.test_completely_unrelatedŒ   s›   € ÜØ Ø;ØØØô
ˆô �u˜eÓ$ˆà× Ñ Ð& 3Ð&Ð  3Ñ&×&×&Õ&Ð  3×&×&×&×&×&Ñ&ˆv×&×&Ó&ˆv×&×&Ô&Ð ×&×&Ò& 3×&×&×&×&×&×&Ô&r.   N)rf   rg   rh   r   rš   ri   r.   r,   r•   r•   ‹   s   „ ð
'¨|ô 
'r.   r•   c                   ó   — e Zd Zdefd„Zy)ÚTestLayerPriorityr-   c           	      ób  — t        dddddddg¬«      }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                  }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)z?When OE matches, engine_code/attributes layers are not reached.Tzpompa Volvo 20744939r   r   r   r   r   )r3   r4   r   r   r   r   r   r?   r@   rB   r8   r9   r=   r>   NrC   rD   )r   r   rT   rL   rM   rN   rO   rP   rQ   rR   rS   rU   rd   s	            r,   Útest_oe_wins_over_attributesz.TestLayerPriority.test_oe_wins_over_attributesš   s  € äØ Ø+ØØØØØ"�|ô
ˆô �u˜eÓ$ˆØ�}‰}Ð$ Ð$ˆ} Ñ$×$×$Õ$ˆ} ×$×$×$×$×$Ñ$ˆv×$×$Ó$ˆv×$×$Ô$ˆ}×$×$Ò$ ×$×$×$×$×$×$Ó$Ø× Ñ Ð( DÐ(Ð  DÑ(×(×(Õ(Ð  D×(×(×(×(×(Ñ(ˆv×(×(Ó(ˆv×(×(Ô(Ð ×(×(Ò( D×(×(×(×(×(×(Ô(r.   N)rf   rg   rh   r   rž   ri   r.   r,   rœ   rœ   ™   s   „ ð)°,ô )r.   rœ   )Ú__doc__ÚbuiltinsrN   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterL   ÚpytestÚ agent_samochodowy.matcher.enginer   Úagent_samochodowy.matcher.indexr   Úagent_samochodowy.modelsr   r   Úfixturer-   r0   rk   rp   r•   rœ   ri   r.   r,   ú<module>r©      sk   ðÙ ,ç  „ ƒå 2Ý 8ß 5ð ‡�ð ˆ|ò  ó ð ÷F2ñ 2÷0)ñ )÷4)ñ 4)÷n'ñ '÷)ò )r.   