Ë
   _9¡œž5ã                  ó²   — 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
Z
ddlmZmZmZmZmZmZmZ dd„Zdd„Zdd„Zdd„Zdd	„Zdd
„Zdd„Zdd„Zdd„Zdd„Zy)z@Tests for network source, deduplication, and navigation modules.é    )ÚannotationsN)ÚDeduplicationEngineÚDocumentTrustÚKnowledgeDocumentÚKnowledgeNavigatorÚKnowledgeSourceÚNetworkSourceConfigÚSensitivityc                 óZ   — t        ddt        j                  t        j                  d¬«      S )Nzlocal-noteszfile:///knowledge/notesT)Ú	source_idÚ
source_uriÚtrustÚsensitivityÚapproved)r   r   ÚREVIEWEDr
   ÚPERSONAL© ó    ú>/home/oem/CyberBrain26-unified/tests/test_knowledge_deepweb.pyÚapproved_sourcer      s*   € ÜØØ,Ü×$Ñ$Ü×(Ñ(Øôð r   c                 ó  — t        «       } d}t        dddt        j                  |«      j	                  «       dt
        j                  t        j                  t        ddg¬«      j                  j                  i d	d	¬
«      }| j                  |d|g«      }|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.                  }	t1        |	«      }d}
||
k(  }|�s
t        j                  d|fd||
f«      dt!        j"                  «       v st        j$                  t0        «      rt        j&                  t0        «      nd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}}
|j.                  d   }|j2                  }	d}|	|k(  }|s€t        j                  d|fd|	|f«      t        j&                  |«      t        j&                  |	«      t        j&                  |«      dœz  }dd |iz  }t)        t        j*                  |«      «      ‚d x}x}	x}}y )!Nó   hello worldÚdoc1Úsrc1úfile:///test.txtú
text/plainú&cyberbrain26.knowledge_plane.contractsÚDocumentStatus©Úfromlistç        ©Údocument_idr   r   Úcontent_sha256Ú
media_typer   r   ÚstatusÚmetadataÚ
created_atÚ
updated_atT©Úis©z4%(py2)s
{%(py2)s = %(py0)s.is_duplicate
} is %(py5)sÚresult©Úpy0Úpy2Úpy5úassert %(py7)sÚpy7Úskip©ú==©z:%(py2)s
{%(py2)s = %(py0)s.recommended_action
} == %(py5)sé   )zP%(py5)s
{%(py5)s = %(py0)s(%(py3)s
{%(py3)s = %(py1)s.candidates
})
} == %(py8)sÚlen)r/   Úpy1Úpy3r1   Úpy8zassert %(py10)sÚpy10r   Ú
exact_hash)z2%(py3)s
{%(py3)s = %(py1)s.match_type
} == %(py6)s©r:   r;   Úpy6úassert %(py8)sr<   )r   r   ÚhashlibÚsha256Ú	hexdigestr   ÚEXTERNALr
   r   Ú
__import__r   Ú
REGISTEREDÚcheck_duplicateÚis_duplicateÚ
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚrecommended_actionÚ
candidatesr9   Ú
match_type)ÚengineÚcontentÚdocr-   Ú@py_assert1Ú@py_assert4Ú@py_assert3Ú@py_format6Ú@py_format8Ú@py_assert2Ú@py_assert7Ú@py_assert6Ú@py_format9Ú@py_format11Ú@py_assert0Ú@py_assert5Ú@py_format7s                    r   Útest_deduplication_exact_hashre      s…  € Ü Ó"€FØ€GÜ
ØØØ%Ü—~‘~ gÓ.×8Ñ8Ó:ØÜ×$Ñ$Ü×(Ñ(ÜÐBÐN^ÐM_Ô`×oÑo×zÑzØØØô€Cð ×#Ñ# GÐ-?À#ÀÓG€FØ×ÑÐ& $Ð&Ð $Ð&×&×&Õ&Ð $×&×&×&×&×&Ñ&ˆ6×&×&Ó&ˆ6×&×&Ô&Ð×&×&Ò& $×&×&×&×&×&×&Ó&Ø×$Ñ$Ð.¨Ð.Ð$¨Ñ.×.×.Õ.Ð$¨×.×.×.×.×.Ñ.ˆ6×.×.Ó.ˆ6×.×.Ô.Ð$×.×.Ò.¨×.×.×.×.×.×.Ó.Ø× Ñ Ð&Œ3Ð Ó!Ð& QÐ&Ð! QÑ&×&×&Ö&Ð! Q×&×&×&×&×&Ñ&Œ3×&×&Ó&Œ3×&×&×&×&×&Ò&ˆv×&×&Ó&ˆv×&×&Ô&Ð ×&×&Ò&Ð!×&×&Ò& Q×&×&×&×&×&×&Õ&Ø×Ñ˜QÑÐ:Ð×*Ñ*Ð:¨lÐ:Ð*¨lÑ:×:×:Õ:Ð*¨l×:×:Ó:Ð×:×:Ò:Ð*×:×:Ò:¨l×:×:×:×:×:×:Ö:r   c                 ó`  — t        «       } d}| j                  |dg «      }|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}}y )Nr   r   Fr*   r,   r-   r.   r2   r3   Úregisterr5   r7   )r   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   )rU   rV   r-   rX   rY   rZ   r[   r\   s           r   Útest_deduplication_no_duplicaterh   5   s  € Ü Ó"€FØ€GØ×#Ñ# GÐ-?ÀÓD€FØ×ÑÐ' %Ð'Ð %Ð'×'×'Õ'Ð %×'×'×'×'×'Ñ'ˆ6×'×'Ó'ˆ6×'×'Ô'Ð×'×'Ò' %×'×'×'×'×'×'Ó'Ø×$Ñ$Ð2¨
Ð2Ð$¨
Ñ2×2×2Õ2Ð$¨
×2×2×2×2×2Ñ2ˆ6×2×2Ó2ˆ6×2×2Ô2Ð$×2×2Ò2¨
×2×2×2×2×2×2Ô2r   c                 ó<  — t        «       } g d¢}| j                  |g «      }t        |«      }d}||k(  }|söt        j                  d|fd||f«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      nd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
   d   }|j                  }d}||u }|s€t        j                  d|fd||f«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}x}}|d   d   }|j                  }d}||u }|s€t        j                  d|fd||f«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}x}}|d   d   }|j                  }d}||u }|s€t        j                  d|fd||f«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd	|iz  }t        t        j                  |«      «      ‚d x}x}x}}y )N))ó   helloÚurl1)s   worldÚurl2)rj   Úurl3é   r5   )z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sr9   Úresults)r/   r:   r;   r@   rA   r<   r   r8   Fr*   )z4%(py3)s
{%(py3)s = %(py1)s.is_duplicate
} is %(py6)sr?   é   T)r   Údeduplicate_batchr9   rJ   rK   rL   rM   rN   rO   rP   rQ   rI   )	rU   Úitemsro   r]   rc   rY   rd   r`   rb   s	            r   Útest_deduplication_batchrs   =   sî  € Ü Ó"€FÚH€EØ×&Ñ& u¨bÓ1€GÜˆw‹<Ð˜1Ðˆ<˜1Ñ××Õˆ<˜1×××××ÑŒ3××ÓŒ3×××××Òˆw××Óˆw××Ôˆ<××Ò˜1××××××Óà�1‰:�a‰=Ð.ˆ=×%Ñ%Ð.¨Ð.Ð%¨Ð.×.×.Õ.Ð%¨×.×.Ó.ˆ=×.×.Ò.Ð%×.×.Ò.¨×.×.×.×.×.×.Õ.Ø�1‰:�a‰=Ð.ˆ=×%Ñ%Ð.¨Ð.Ð%¨Ð.×.×.Õ.Ð%¨×.×.Ó.ˆ=×.×.Ò.Ð%×.×.Ò.¨×.×.×.×.×.×.Õ.Ø�1‰:�a‰=Ð-ˆ=×%Ñ%Ð-¨Ð-Ð%¨Ð-×-×-Õ-Ð%¨×-×-Ó-ˆ=×-×-Ò-Ð%×-×-Ò-¨×-×-×-×-×-×-Ö-r   c                 ó:  — t        «       } t        dddddt        j                  t        j
                  t        ddg¬«      j                  j                  d	d
dœdd¬«      }| j                  |«       d	}| j                  } |«       }||v }|sÁt        j                  d|fd||f«      t        j                  |«      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}x}}| j&                  }d	}	 ||	«      }
dg}|
|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                  |
«      t        j                  |«      dœz  }dd|iz  }t#        t        j$                  |«      «      ‚d x}x}	x}
x}}d}| j(                  } |«       }||v }|sÁt        j                  d|fd||f«      t        j                  |«      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}x}}d}| j(                  } |«       }||v }|sÁt        j                  d|fd||f«      t        j                  |«      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}x}}y )Nr   r   r   Úabcr   r   r   r   Úresearchzai,ml)ÚtopicÚtagsr!   r"   ©Úin)zI%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.get_topics
}()
}Únav)r:   r;   r1   r3   zassert %(py9)sÚpy9r5   )z\%(py6)s
{%(py6)s = %(py2)s
{%(py2)s = %(py0)s.get_documents_by_topic
}(%(py4)s)
} == %(py9)s)r/   r0   Úpy4r@   r|   zassert %(py11)sÚpy11Úai)zK%(py1)s in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.get_all_tags
}()
}Úml)r   r   r   rE   r
   r   rF   r   rG   Úadd_documentÚ
get_topicsrJ   rK   rO   rL   rM   rN   rP   rQ   Úget_documents_by_topicÚget_all_tags)r{   rW   rb   rY   r_   r]   r\   Ú@py_format10rX   rZ   rc   Ú@py_assert8r^   Ú@py_format12s                 r   Útest_navigator_topicsrˆ   H   sš  € Ü
Ó
€CÜ
ØØØ%ØØÜ×$Ñ$Ü×(Ñ(ÜÐBÐN^ÐM_Ô`×oÑo×zÑzØ%¨wÑ7ØØô€Cð ×Ñ�SÔØÐ)˜Ÿ™Ð)™Ó)Ð)ˆ:Ð)Ð)×)×)Õ)ˆ:Ð)×)×)Ó)ˆ:×)×)×)×)×)Ð)˜×)×)Ó)˜×)×)Ô)˜×)×)Ò)Ð)×)×)×)×)×)×)Õ)Ø×%Ñ%Ð= jÐ=Ñ% jÓ1Ð=°f°XÐ=Ð1°XÑ=×=×=Õ=Ð1°X×=×=×=×=×=Ñ=ˆ3×=×=Ó=ˆ3×=×=Ô=Ð%×=×=Ò= j×=×=Ò=Ð1×=×=Ò=°X×=×=×=×=×=×=×=ØÐ%�3×#Ñ#Ð%Ñ#Ó%Ð%ˆ4Ð%Ð%×%×%Õ%ˆ4Ð%×%×%Ó%ˆ4×%×%×%×%×%Ð%�3×%×%Ó%�3×%×%Ô%Ð#×%×%Ò%Ð%×%×%×%×%×%×%Õ%ØÐ%�3×#Ñ#Ð%Ñ#Ó%Ð%ˆ4Ð%Ð%×%×%Õ%ˆ4Ð%×%×%Ó%ˆ4×%×%×%×%×%Ð%�3×%×%Ó%�3×%×%Ô%Ð#×%×%Ò%Ð%×%×%×%×%×%×%Ö%r   c                 óR  — t        «       } t        dddddt        j                  t        j
                  t        ddg¬«      j                  j                  d	d
idd¬«      }| j                  |«       | j                  d|g«      }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   ru   r   r   r   r   ÚdescriptionzAI research paperr!   r"   r   ry   ©z%(py1)s in %(py3)sro   ©r:   r;   úassert %(py5)sr1   )r   r   r   rE   r
   r   rF   r   rG   r�   Úsearch_by_keywordrJ   rK   rO   rL   rM   rN   rP   rQ   )r{   rW   ro   rb   r]   Ú@py_format4r[   s          r   Útest_navigator_searchr�   ^   sÜ   € Ü
Ó
€CÜ
ØØØ%ØØÜ×$Ñ$Ü×(Ñ(ÜÐBÐN^ÐM_Ô`×oÑo×zÑzØÐ!4Ð5ØØô€Cð ×Ñ�SÔØ×#Ñ# D¨3¨%Ó0€GØÐˆ6�WÐ××Õˆ6�W××Óˆ6×××××Ð�W××Ó�W××××××Ôr   c                 ó  — t        «       } t        dddddt        j                  t        j
                  t        ddg¬«      j                  j                  i d	d	¬
«      t        dddddt        j                  t        j
                  t        ddg¬«      j                  j                  i d	d	¬
«      g}| j                  |«      }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   zhttps://example.com/page1ru   r   r   r   r   r!   r"   Údoc2Úsrc2zhttps://other.com/page2Údefzexample.comry   r‹   ÚclustersrŒ   r�   r1   z	other.com)r   r   r   rE   r
   r   rF   r   rG   Úcluster_by_sourcerJ   rK   rO   rL   rM   rN   rP   rQ   )r{   Údocsr•   rb   r]   r�   r[   s          r   Ú test_navigator_cluster_by_sourcer˜   r   sq  € Ü
Ó
€CäØØØ2Ø Ø#Ü×(Ñ(Ü#×,Ñ,ÜÐFÐRbÐQcÔd×sÑs×~Ñ~ØØØô	
ô 	ØØØ0Ø Ø#Ü×(Ñ(Ü#×,Ñ,ÜÐFÐRbÐQcÔd×sÑs×~Ñ~ØØØô	
ð€Dð8 ×$Ñ$ TÓ*€HØÐ$ˆ=˜HÐ$×$×$Õ$ˆ=˜H×$×$Ó$ˆ=×$×$×$×$×$Ð$˜H×$×$Ó$˜H×$×$×$×$×$×$Ó$ØÐ"ˆ;˜(Ð"×"×"Õ"ˆ;˜(×"×"Ó"ˆ;×"×"×"×"×"Ð"˜(×"×"Ó"˜(×"×"×"×"×"×"Ô"r   c                 óÌ  — t        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	}||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 )NÚtest)r   r5   )z1%(py2)s
{%(py2)s = %(py0)s.source_id
} == %(py5)sÚconfigr.   r2   r3   g      >@)z/%(py2)s
{%(py2)s = %(py0)s.timeout
} == %(py5)si€–˜ )z9%(py2)s
{%(py2)s = %(py0)s.max_content_bytes
} == %(py5)s)r	   r   rJ   rK   rL   rM   rN   rO   rP   rQ   ÚtimeoutÚmax_content_bytes)r›   rX   rY   rZ   r[   r\   s         r   Ú#test_network_source_config_defaultsrž   •   s]  € Ü ¨6Ô2€FØ×ÑÐ%˜vÐ%Ð˜vÑ%×%×%Õ%Ð˜v×%×%×%×%×%Ñ%ˆ6×%×%Ó%ˆ6×%×%Ô%Ð×%×%Ò%˜v×%×%×%×%×%×%Ó%Ø�>‰>Ð!˜TÐ!ˆ>˜TÑ!×!×!Õ!ˆ>˜T×!×!×!×!×!Ñ!ˆ6×!×!Ó!ˆ6×!×!Ô!ˆ>×!×!Ò!˜T×!×!×!×!×!×!Ó!Ø×#Ñ#Ð1 zÐ1Ð# zÑ1×1×1Õ1Ð# z×1×1×1×1×1Ñ1ˆ6×1×1Ó1ˆ6×1×1Ô1Ð#×1×1Ò1 z×1×1×1×1×1×1Ô1r   c                 ó6  — ddl m}  t        j                  t        d¬«      5  | j                  d«       d d d «       t        j                  t        d¬«      5  | j                  d«       d d d «       | j                  d«       y # 1 sw Y   ŒPxY w# 1 sw Y   Œ'xY w)	Nr   ©ÚNetworkSourceAdapterzunsupported URL scheme)Úmatchzftp://example.comzmust have a hostnamezhttps://zhttps://example.com/path)Ú+cyberbrain26.knowledge_plane.network_sourcer¡   ÚpytestÚraisesÚ
ValueErrorÚ_validate_urlr    s    r   Ú test_network_source_validate_urlr¨   œ   s�   € ÝPä	�‰”zÐ)AÔ	Bñ @Ø×*Ñ*Ð+>Ô?÷@ô 
�‰”zÐ)?Ô	@ñ 7Ø×*Ñ*¨:Ô6÷7ð ×&Ñ&Ð'AÕB÷@ð @ú÷7ð 7ús   ¢BÁBÂBÂBc                 ó  — ddl m}  d}| j                  |«      }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    si   <html><head><style>body{}</style></head><body><script>alert('x')</script><p>Hello World</p></body></html>zHello Worldry   r‹   r-   rŒ   r�   r1   Úalert)únot in)z%(py1)s not in %(py3)szbody{})r£   r¡   Ú_extract_htmlrJ   rK   rO   rL   rM   rN   rP   rQ   )r¡   Úhtmlr-   rb   r]   r�   r[   s          r   Ú#test_network_source_html_extractionr®   ©   s%  € ÝPàw€DØ!×/Ñ/°Ó5€FØÐ"ˆ=˜FÐ"×"×"Õ"ˆ=˜F×"×"Ó"ˆ=×"×"×"×"×"Ð"˜F×"×"Ó"˜F×"×"×"×"×"×"Ó"ØÐ ˆ7˜&Ð × × Õ ˆ7˜&× × Ó ˆ7× × × × × Ð ˜&× × Ó ˜&× × × × × × Ó ØÐ!ˆ8˜6Ð!×!×!Õ!ˆ8˜6×!×!Ó!ˆ8×!×!×!×!×!Ð!˜6×!×!Ó!˜6×!×!×!×!×!×!Ô!r   )Úreturnr   )r¯   ÚNone)Ú__doc__Ú
__future__r   ÚbuiltinsrL   Ú_pytest.assertion.rewriteÚ	assertionÚrewriterJ   rB   r¤   Úcyberbrain26.knowledge_planer   r   r   r   r   r	   r
   r   re   rh   rs   rˆ   r�   r˜   rž   r¨   r®   r   r   r   ú<module>r¸      sX   ðÙ Få "ç  „ ƒã ÷÷ ñ óó;ó.3ó.ó&ó,ó( #óF2ó
Cô"r   