Skip to main content
Glama

URL Reputation and Validity Checker

by prismon
test_history.cpython-313-pytest-8.3.5.pyc41 kB
� ��7h�5���SrSSKrSSKJs Jr SSKrSSKJ r J r J r J r SSK J r JrJr SSKrSSKrSSKJr SSKJrJrJr "SS5rg) zUnit tests for history.py�N)�Mock� AsyncMock�patch� MagicMock)�datetime�timezone� timedelta��DomainHistoryChecker)� DomainHistory�URLValidationResult�ConfidenceLevelc���\rSrSrSr\R S5r\R S5rSr Sr \RRS5r \RRS5r\RRS 5r\RRS 5r\RRS 5r\RRS 5r\RRS 5r\RRS5r\RRS5rSrSrSrSrSrSrSrSrSrSr\RRS5r Sr!g)�TestDomainHistoryChecker� z$Test suite for DomainHistoryChecker.c��[SS9$)z'Create a DomainHistoryChecker instance.zTest-Agent/1.0�� user_agentr ��selfs �I/home/josh/Projects/reputation-and-validity-checker/tests/test_history.py�checker� TestDomainHistoryChecker.checkers��$�/?�@�@�c �>�[SSSSSS/[RS9$)z"Create a mock URLValidationResult.�https://example.comT����?��)�url�is_valid� status_code� response_time�content_length� ssl_valid�warnings�confidence_level)r r�HIGHrs r�mock_validation_result�/TestDomainHistoryChecker.mock_validation_results/��#�%�������,�1�1�  � rc���[5nURnSo2U:HoD(d�[R"SU4SX#45S[R "5;d[R "U5(a[R"U5OS[R"U5[R"U5S.-nSSU0-n[[R"U55eS=n=pCg) z)Test DomainHistoryChecker initialization.zURL-Reputation-Checker/1.0��==�z2%(py2)s {%(py2)s = %(py0)s.user_agent } == %(py5)sr��py0�py2�py5�assert %(py7)s�py7N� r r� @pytest_ar�_call_reprcompare� @py_builtins�locals�_should_repr_global_name� _saferepr�AssertionError�_format_explanation�rr� @py_assert1� @py_assert4� @py_assert3� @py_format6� @py_format8s r� test_init�"TestDomainHistoryChecker.test_init#s���&�(���!�!�A�%A�A�%A�A�A�A�A�A�!�A�A�A�A�A�A�w�A�A�A�A�w�A�A�A�!�A�A�A�%A�A�A�A�A�A�A�Arc���[SS9nURnSo2U:HoD(d�[R"SU4SX#45S[R "5;d[R "U5(a[R"U5OS[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=pCg ) z1Test DomainHistoryChecker with custom user agent.z Custom-Agentrr,r.rr/r3r4Nr5r>s r�test_init_custom_user_agent�4TestDomainHistoryChecker.test_init_custom_user_agent(s��&�.�A���!�!�3�^�3�^�3�3�3�3�3�!�3�3�3�3�3�3�w�3�3�3�3�w�3�3�3�!�3�3�3�^�3�3�3�3�3�3�3rc ��# �[SSS[RS9n[SSS[RS9nUUSS.n[SSS[RS9SS .n[R"US US 9 [R"US US 9 UR S 5IShv�N nSSS5 SSS5 [ W[5ow(Gd+SS[R"5;d[R"[ 5(a[R"[ 5OSS[R"5;d[R"U5(a[R"U5OSS[R"5;d[R"[5(a[R"[5OS[R"U5S.-n[[R"U55eSnURn So�U :How(d�[R "SU4SX�45S[R"5;d[R"U5(a[R"U5OS[R"U 5[R"U 5S.-n SSU 0-n [[R"U 55eS=n =pzUR"o�U:How(d�[R "SU4SX�45S[R"5;d[R"U5(a[R"U5OS[R"U 5S[R"5;d[R"U5(a[R"U5OSS.-nSSU0-n [[R"U 55eS=p�UR$o�U:How(d�[R "SU4SX�45S[R"5;d[R"U5(a[R"U5OS[R"U 5S [R"5;d[R"U5(a[R"U5OS S.-nSSU0-n [[R"U 55eS=p�UR&n So�U :How(d�[R "SU4S!X�45S[R"5;d[R"U5(a[R"U5OS[R"U 5[R"U 5S.-n SSU 0-n [[R"U 55eS=n =pzUR(n SnSnSn[Rn[X�UUS9nU U:How(Gd�[R "SU4S"U U45S[R"5;d[R"U5(a[R"U5OS[R"U 5S#[R"5;d[R"[5(a[R"[5OS#[R"U5[R"U5[R"U5S$[R"5;d[R"[5(a[R"[5OS$[R"U5[R"U5S%. -nS&S'U0-n[[R"U55eS=n =n=n=n=n=nnUR*n So�U :How(d�[R "SU4S(X�45S[R"5;d[R"U5(a[R"U5OS[R"U 5[R"U 5S.-n SSU 0-n [[R"U 55eS=n =pzUR,n So�U Low(d�[R "S)U4S*X�45S[R"5;d[R"U5(a[R"U5OS[R"U 5[R"U 5S.-n SSU 0-n [[R"U 55eS=n =pzUR,n S+o�U :�ow(d�[R "S,U4S-X�45S[R"5;d[R"U5(a[R"U5OS[R"U 5[R"U 5S.-n SSU 0-n [[R"U 55eS=n =pzgG N�!,(df  G N�=f!,(df  G N�=f7f).z)Test successful domain history retrieval.�����tzinfo��zExample Registrar Inc.)� creation_date�expiration_date� registrar�i�)�first_snapshot�total_snapshots�_get_whois_info�� return_value�_get_wayback_inforNz5assert %(py4)s {%(py4)s = %(py0)s(%(py1)s, %(py2)s) }� isinstance�historyr )r0�py1r1�py4� example.comr,�z.%(py2)s {%(py2)s = %(py0)s.domain } == %(py5)sr/r3r4)z5%(py2)s {%(py2)s = %(py0)s.creation_date } == %(py4)srO)r0r1r\�assert %(py6)s�py6)z7%(py2)s {%(py2)s = %(py0)s.expiration_date } == %(py4)srP)z1%(py2)s {%(py2)s = %(py0)s.registrar } == %(py5)s)z�%(py2)s {%(py2)s = %(py0)s.wayback_first_snapshot } == %(py15)s {%(py15)s = %(py4)s(%(py6)s, %(py8)s, %(py10)s, tzinfo=%(py13)s {%(py13)s = %(py11)s.utc }) }rr) r0r1r\r`�py8�py10�py11�py13�py15zassert %(py17)s�py17�z?%(py2)s {%(py2)s = %(py0)s.wayback_total_snapshots } == %(py5)s��is not)z4%(py2)s {%(py2)s = %(py0)s.age_days } is not %(py5)si@��>)z/%(py2)s {%(py2)s = %(py0)s.age_days } > %(py5)s)rr�utcr�object�get_domain_historyrYr r8r9r6r:r;r<r=�domainr7rOrPrQ�wayback_first_snapshot�wayback_total_snapshots�age_days)rrrOrP�mock_whois_info�mock_wayback_inforZrA� @py_format5r?r@rBrC� @py_format7� @py_assert5� @py_assert7� @py_assert9� @py_assert12� @py_assert14� @py_format16� @py_format18s r�test_get_domain_history_success�8TestDomainHistoryChecker.test_get_domain_history_success-s����!��q�!�H�L�L�A� �"�4��A�h�l�l�C��+�.�1� ��'�t�Q��(�,�,�G�#� �� �\�\�'�#4�?� S����g�':�IZ�[� '� :� :�;P� Q�Q��\�T��'�=�1�1�1�1�1�1�1�1�1�z�1�1�1�1�z�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��~�~�.��.��.�.�.�.�.�~�.�.�.�.�.�.�w�.�.�.�.�w�.�.�.�~�.�.�.��.�.�.�.�.�.�.��$�$�5� �5�5�5�5�5�$�5�5�5�5�5�5�w�5�5�5�5�w�5�5�5�$�5�5�5�5�5�5� �5�5�5�5� �5�5�5�5�5�5�5��&�&�9�/�9�9�9�9�9�&�9�9�9�9�9�9�w�9�9�9�9�w�9�9�9�&�9�9�9�9�9�9�/�9�9�9�9�/�9�9�9�9�9�9�9�� � �<�$<�<�$<�<�<�<�<�<� �<�<�<�<�<�<�w�<�<�<�<�w�<�<�<� �<�<�<�$<�<�<�<�<�<�<�<��-�-�Z�$�Z��Z�1�Z�X�\�\�Z��$�1�\�1Z�Z�-�1Z�Z�Z�Z�Z�Z�-�1Z�Z�Z�Z�Z�Z�Z�w�Z�Z�Z�Z�w�Z�Z�Z�-�Z�Z�Z�Z�Z�Z��Z�Z�Z�Z��Z�Z�Z�$�Z�Z�Z��Z�Z�Z�1�Z�Z�Z�Z�Z�Z�X�Z�Z�Z�Z�X�Z�Z�Z�\�Z�Z�Z�1Z�Z�Z�Z�Z�Z�Z�Z�Z��.�.�6�$�6�$�6�6�6�6�6�.�6�6�6�6�6�6�w�6�6�6�6�w�6�6�6�.�6�6�6�$�6�6�6�6�6�6�6����+�t�+�t�+�+�+�+�+��+�+�+�+�+�+�w�+�+�+�+�w�+�+�+��+�+�+�t�+�+�+�+�+�+�+����&�$�&�$�&�&�&�&�&��&�&�&�&�&�&�w�&�&�&�&�w�&�&�&��&�&�&�$�&�&�&�&�&�&�&�R�\�[��T� S�sI�A.i�0i �h9�h6�h9�!i �)f i�6h9�9 i �i � i�ic��# �[R"US0S9 [R"US0S9 URS5IShv�N nSSS5 SSS5 WRnSoCU:HoU(d�[R "SU4SX445S [ R"5;d[R"U5(a[R"U5OS [R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pTgN�!,(df  N�=f!,(df  N�=f7f) z2Test domain history extraction from subdomain URL.rUrVrXz"https://subdomain.example.com/pathNr]r,r^rZr/r3r4) rrmrnror6r7r8r9r:r;r<r=�rrrZr?r@rArBrCs r�!test_get_domain_history_subdomain�:TestDomainHistoryChecker.test_get_domain_history_subdomainLs�����\�\�'�#4�2� F����g�':��L� '� :� :�;_� `�`��M�G��~�~�.��.��.�.�.�.�.�~�.�.�.�.�.�.�w�.�.�.�.�w�.�.�.�~�.�.�.��.�.�.�.�.�.�.�a�M�L��G� F�sF�E�E�D4�D2�D4� E�C E�2D4�4 E �>E� E�Ec���# �[R"US[S5S9 [R"USSS0S9 URS5IS hv�N nS S S 5 S S S 5 WRnS oCU:HoU(d�[ R "S U4S X445S [R"5;d[ R"U5(a[ R"U5OS [ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=pTURnS oCULoU(d�[ R "SU4SX445S [R"5;d[ R"U5(a[ R"U5OS [ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=pTURnS oCULoU(d�[ R "SU4SX445S [R"5;d[ R"U5(a[ R"U5OS [ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=pTURnSoCU:HoU(d�[ R "S U4SX445S [R"5;d[ R"U5(a[ R"U5OS [ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=pTg GNp!,(df  GNu=f!,(df  GN=f7f)z*Test domain history when some checks fail.rUz WHOIS failed�� side_effectrXrT�drVrNr]r,r^rZr/r3r4��is)z5%(py2)s {%(py2)s = %(py0)s.creation_date } is %(py5)s)z1%(py2)s {%(py2)s = %(py0)s.registrar } is %(py5)srg)rrm� Exceptionrnror6r7r8r9r:r;r<r=rOrQrqr�s r�'test_get_domain_history_with_exceptions�@TestDomainHistoryChecker.test_get_domain_history_with_exceptionsUs8����\�\�'�#4�)�N�B[� \����g�':�J[�]`�Ia�b� '� :� :�;P� Q�Q��c�]��~�~�.��.��.�.�.�.�.�~�.�.�.�.�.�.�w�.�.�.�.�w�.�.�.�~�.�.�.��.�.�.�.�.�.�.��$�$�,��,��,�,�,�,�,�$�,�,�,�,�,�,�w�,�,�,�,�w�,�,�,�$�,�,�,��,�,�,�,�,�,�,�� � �(�D�(�D�(�(�(�(�(� �(�(�(�(�(�(�w�(�(�(�(�w�(�(�(� �(�(�(�D�(�(�(�(�(�(�(��.�.�5�#�5�#�5�5�5�5�5�.�5�5�5�5�5�5�w�5�5�5�5�w�5�5�5�.�5�5�5�#�5�5�5�5�5�5�5� R�c�b��]� \�sF� O'�O�O�O�O�O�M#O'�O� O � O� O$�O'c���# �[5n[SSS5Ul[SSS5UlSUl[ SUS9 UR S5IShv�N nSSS5 S oDW;oU(d�[R"S U4S XC45[R"U5S [R"5;d[R"U5(a[R"U5OS S .-nSSU0-n[[R"U55eS=pESoDU;oU(d�[R"S U4S XC45[R"U5S [R"5;d[R"U5(a[R"U5OS S .-nSSU0-n[[R"U55eS=pEUSnSo�U:HoU(do[R"SU4SXH45[R"U5[R"U5S.-n SSU 0-n [[R"U 55eS=n=pXgGN�!,(df  GN=f7f)zTest successful WHOIS lookup.rJrKrN�Test Registrar� whois.whoisrVr]NrO)�in)z%(py1)s in %(py3)s�info)r[�py3�assert %(py5)sr2rPrQr,�z%(py1)s == %(py4)s�r[r\r_r`)rrrOrPrQrrUr6r7r;r8r9r:r<r=) rr�mock_whois_datar�� @py_assert0� @py_assert2� @py_format4rBrArurvs r�test_get_whois_info_success�4TestDomainHistoryChecker.test_get_whois_info_successasw����&��(0��q�!�(<��%�*2�4��A�*>��'�$4��!� �=�� ?� �0�0��?�?�D�@��&�$�&�&�&�&�&��&�&�&��&�&�&�&�&�&�$�&�&�&�&�$�&�&�&�&�&�&�&� �(�D�(�(�(�(�(� �(�(�(� �(�(�(�(�(�(�D�(�(�(�(�D�(�(�(�(�(�(�(��K� �4�$4�4�$4�4�4�4�4�4� �4�4�4� �4�4�4�$4�4�4�4�4�4�4�4� @�@� ?�s1�AI'�I�I�I�G6I'�I� I$�I'c��^# �[5n[SSS5[SSS5/Ul[SSS5/UlSUl[ SUS9 UR S5IS hv�N nS S S 5 WS oDRnSoeU:How(d�[R"S U4S XV45[R"U5[R"U5[R"U5S .-nSSU0-n [[R"U 55eS =n=n=pvg N�!,(df  N�=f7f)zTest WHOIS with list of dates.rJrKrRrNr�r�rVr]NrOr,)z+%(py3)s {%(py3)s = %(py1)s.day } == %(py6)s)r[r�r`�assert %(py8)sra) rrrOrPrQrrU�dayr6r7r;r<r=) rrr�r�r�r�rwr@rv� @py_format9s r�test_get_whois_info_list_dates�7TestDomainHistoryChecker.test_get_whois_info_list_datesps�����&��)1�$��1�)=�x��a�QR�?S�(T��%�+3�D�!�Q�+?�*@��'�$4��!� �=�� ?� �0�0��?�?�D�@��O�$�-�(�(�-�A�-�A�-�-�-�-�-�(�-�-�-�$�-�-�-�(�-�-�-�A�-�-�-�-�-�-�-�@�@� ?�s1�AD-�D�%D�&D�*B0D-�D� D*�&D-c��# �[S[S5S9 URS5IShv�N nSSS5 0nWU:HoD(d�[R"SU4SX#45S[ R "5;d[R"U5(a[R"U5OS[R"U5S .-nS S U0-n[[R"U55eS=pCgN�!,(df  N�=f7f) zTest WHOIS lookup failure.r�z Lookup failedr�r]Nr,�z%(py0)s == %(py3)sr��r0r�r�r2) rr�rUr6r7r8r9r:r;r<r=�rrr�r�r?r�rBs r�test_get_whois_info_exception�6TestDomainHistoryChecker.test_get_whois_info_exception~s�����=�i��.H� I� �0�0��?�?�D�J���t�r�z�����t�������t�����t����r��������@�J� I��,�D�C0�C.�C0�B>D�.C0�0 C>�:Dc ��b# �[5nSUl/SQn[5nX$RlX4Rl[ SUS9 UR S5IShv�N nSSS5 WSnSnS nS n [Rn [XxX�S 9o�U :Ho�(Gdi[R"S U 4S Xk45[R"U5S[R"5;d[R"[5(a[R"[5OS[R"U5[R"U5[R"U 5S[R"5;d[R"[5(a[R"[5OS[R"U 5[R"U 5S.-n SSU 0-n[![R""U55eS=n=n =n=n=n =p�USnSo�U:Ho�(do[R"S U 4SXo45[R"U5[R"U5S.-nSSU0-n[![R""U55eS=n=p�gGN9!,(df  GN>=f7f)z'Test successful Wayback Machine lookup.�20000201120000)rKrR���� waybackpy.UrlrVrNrSrJrRrKrLr,)zp%(py1)s == %(py14)s {%(py14)s = %(py3)s(%(py5)s, %(py7)s, %(py9)s, tzinfo=%(py12)s {%(py12)s = %(py10)s.utc }) }rr)r[r�r2r4�py9rb�py12�py14zassert %(py16)s�py16rTr�r�r�r_r`)r� timestamp�oldestrW�cdx_apirrXrrlrr6r7r;r8r9r:r<r=)rr� mock_oldest�mock_cdx�mock_wbr�r�r@� @py_assert6� @py_assert8� @py_assert11� @py_assert13r�� @py_format15� @py_format17rArurvs r�test_get_wayback_info_success�6TestDomainHistoryChecker.test_get_wayback_info_success�s�����f� � 0� ��"���&��&1���#�'/���$� �?�� 9� �2�2�3H�I�I�D�:��$�%�R�$�R��R�1�R�X�\�\�R��$�1�)R�R�)R�R�R�R�R�R�%�R�R�R�%�R�R�R�R�R�R��R�R�R�R��R�R�R�$�R�R�R��R�R�R�1�R�R�R�R�R�R�X�R�R�R�R�X�R�R�R�\�R�R�R�)R�R�R�R�R�R�R�R�R��%�&�+�!�+�!�+�+�+�+�+�&�+�+�+�&�+�+�+�!�+�+�+�+�+�+�+�J�:� 9�s1�A J/� J�!J�"J�&H4J/�J� J,�'J/c�� # �[5n[S5URl/URl[ SUS9 URS5IShv�N nSSS5 WSnSoTULof(do[R"SU4SXE45[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=peUS nS oTU:Hof(do[R"SU4SXE45[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pegGN!,(df  GN=f7f)z'Test Wayback Machine with no snapshots.z No archivesr�rVrNrSr�)z%(py1)s is %(py4)sr�r_r`rTrr,r�) rr�r�r�r�rWrrXr6r7r;r<r=) rrr�r�r�rAr�rurvs r�"test_get_wayback_info_no_snapshots�;TestDomainHistoryChecker.test_get_wayback_info_no_snapshots�s����&��%.�}�%=����"�')����$� �?�� 9� �2�2�3H�I�I�D�:��$�%�-��-��-�-�-�-�-�%�-�-�-�%�-�-�-��-�-�-�-�-�-�-��%�&�+�!�+�!�+�+�+�+�+�&�+�+�+�&�+�+�+�!�+�+�+�+�+�+�+�J�:� 9�s1�AF�E1�E.�E1�DF�.E1�1 F�;Fc��# �[S[S5S9 URS5IShv�N nSSS5 0nWU:HoD(d�[R"SU4SX#45S[ R "5;d[R"U5(a[R"U5OS[R"U5S .-nS S U0-n[[R"U55eS=pCgN�!,(df  N�=f7f) z$Test Wayback Machine lookup failure.r�z API errorr�rNr,r�r�r�r�r2) rr�rXr6r7r8r9r:r;r<r=r�s r�test_get_wayback_info_exception�8TestDomainHistoryChecker.test_get_wayback_info_exception�s�����?� �+�0F� G� �2�2�3H�I�I�D�H���t�r�z�����t�������t�����t����r��������J�H� G�r�c���[SSS[RS9nURU5nX2:HoD(d�[R "SU4SX245S[ R"5;d[R"U5(a[R"U5OSS[ R"5;d[R"U5(a[R"U5OSS.-nS S U0-n[[R"U55eS nURnS otULo�(d�[R "S U4S XG45S[ R"5;d[R"U5(a[R"U5OS[R"U5[R"U5S.-n SSU 0-n [[R"U 55eS =n=p�g )z3Test _ensure_timezone with timezone-aware datetime.rJrKrLr,)z%(py0)s == %(py2)s�result�dt�r0r1�assert %(py4)sr\Nrh)z2%(py2)s {%(py2)s = %(py0)s.tzinfo } is not %(py5)sr/r3r4) rrrl�_ensure_timezoner6r7r8r9r:r;r<r=rM) rrr�r�r?� @py_format3rur@rArBrCs r�test_ensure_timezone_with_tz�5TestDomainHistoryChecker.test_ensure_timezone_with_tz�s�� �d�A�q���� 6���)�)�"�-���|�����v�������v�����v���������������������}�}�(�D�(�D�(�(�(�(�(�}�(�(�(�(�(�(�v�(�(�(�(�v�(�(�(�}�(�(�(�D�(�(�(�(�(�(�(rc��[SSS5nURU5nURn[RoTU:Hof(Gd [ R "SU4SXE45S[R"5;d[ R"U5(a[ R"U5OS[ R"U5S[R"5;d[ R"[5(a[ R"[5OS[ R"U5S.-nSS U0-n[[ R"U55eS =n=peg ) z*Test _ensure_timezone with naive datetime.rJrKr,)zG%(py2)s {%(py2)s = %(py0)s.tzinfo } == %(py6)s {%(py6)s = %(py4)s.utc }r�r)r0r1r\r`r�raN) rr�rMrrlr6r7r8r9r:r;r<r=) rrr�r�r?rwrArvr�s r�test_ensure_timezone_without_tz�8TestDomainHistoryChecker.test_ensure_timezone_without_tz�s��� �d�A�q� !���)�)�"�-���}�}�,�� � �,� �,�,�,�,�,�}�,�,�,�,�,�,�v�,�,�,�,�v�,�,�,�}�,�,�,�,�,�,��,�,�,�,��,�,�,� �,�,�,�,�,�,�,rc��URS5nSo2ULoD(d�[R"SU4SX#45S[R"5;d[R "U5(a[R "U5OS[R "U5S.-nSSU0-n[[R"U55eS=pCg)z Test _ensure_timezone with None.Nr�)z%(py0)s is %(py3)sr�r�r�r2) r�r6r7r8r9r:r;r<r=)rrr�r�r?r�rBs r�test_ensure_timezone_none�2TestDomainHistoryChecker.test_ensure_timezone_none�sl���)�)�$�/�����~�����v�������v�����v�����������rc ���[S[SSS[RS9SSS9nUR X25nSoTU:�of(d�[ R "S U4S XE45S [R"5;d[ R"U5(a[ R"U5OS [ R"U5S .-nS SU0-n[[ R"U55eS=peg)z1Test reputation calculation for excellent domain.r]rJrKrLi�i��rorOrrrq�Z��>=)z%(py0)s >= %(py3)s�scorer�r�r2N) r rrrl�calculate_reputation_scorer6r7r8r9r:r;r<r=� rrr)rZr�r�r?r�rBs r�)test_calculate_reputation_score_excellent�BTestDomainHistoryChecker.test_calculate_reputation_score_excellent�s���� �"�4��A�h�l�l�C��$'�  ���2�2�7�S�����{�����u�������u�����u�����������rc���[S[R"[R5[ SS9- SSS9nUR X25nSoTU:of(d�[R"SU4SXE45S [R"5;d[R"U5(a[R"U5OS [R"U5S .-nS S U0-n[[R"U55eS =peg )z+Test reputation calculation for new domain.z newsite.com�)�daysrr��2)�<)z%(py0)s < %(py3)sr�r�r�r2N)r r�nowrrlr r�r6r7r8r9r:r;r<r=r�s r�*test_calculate_reputation_score_new_domain�CTestDomainHistoryChecker.test_calculate_reputation_score_new_domain�s���� �"�,�,�x�|�|�4�y�b�7I�I��$%�  ���2�2�7�S����r�z�����u�������u�����u����r�������rc�*�/SQnUGHupE[SUS9nURXb5nXu:�o�(d�[R"SU4SXu45S[R "5;d[R "U5(a[R"U5OSS[R "5;d[R "U5(a[R"U5OSS.-n S S U 0-n [[R"U 55eS nGM g ) z#Test domain age scoring categories.))i�r�)iG�)g�@�)r� )r�r�)r�rR�test.com�rorrr��z%(py0)s >= %(py2)sr�� expected_minr�r�r\N� r r�r6r7r8r9r:r;r<r=) rrr)� test_casesrrr�rZr�r?r�rus r�2test_calculate_reputation_score_domain_age_scoring�KTestDomainHistoryChecker.test_calculate_reputation_score_domain_age_scoring�s��� � �'1� "�H�#�:��I�G��6�6�w�W�E��(� (� (� (� (�5� (� (� (� (� (� (�5� (� (� (� (�5� (� (� (� (� (� (�L� (� (� (� (�L� (� (� (� (� (� (� (�'1rc�*�/SQnUGHupE[SUS9nURXb5nXu:�o�(d�[R"SU4SXu45S[R "5;d[R "U5(a[R"U5OSS[R "5;d[R "U5(a[R"U5OSS.-n S S U 0-n [[R"U 55eS nGM g ) z(Test Wayback Machine scoring categories.))�r�)�Kr�)r�r�)r�r�)r�rRr�)rorqr�r�r�r�r�r�r\Nr�) rrr)r�� snapshotsr�rZr�r?r�rus r�/test_calculate_reputation_score_wayback_scoring�HTestDomainHistoryChecker.test_calculate_reputation_score_wayback_scoring�s��� � �(2� #�I�#�:�y�Y�G��6�6�w�W�E��(� (� (� (� (�5� (� (� (� (� (� (�5� (� (� (� (�5� (� (� (� (� (� (�L� (� (� (� (�L� (� (� (� (� (� (� (�(2rc �d�[SS9n[SSSSSS/S9nURX#5n[S SS S S S /S9nURX%5nXF:�ow(d�[R"SU4SXF45S[ R "5;d[R"U5(a[R"U5OSS[ R "5;d[R"U5(a[R"U5OSS.-nSSU0-n [[R"U 55eSng)zTest technical factors scoring.r�)rorTrrr�r r!r"r#r$r%r&zhttp://example.comi�g@r�Frj)z%(py0)s > %(py2)s� score_good� score_poorr�r�r\N� r r r�r6r7r8r9r:r;r<r=) rrrZ� good_resultr�� poor_resultr�r?r�rus r�1test_calculate_reputation_score_technical_factors�JTestDomainHistoryChecker.test_calculate_reputation_score_technical_factors�s����z�2��*�%������� � ��7�7��M� �*�$������� � ��7�7��M� ��&�&�&�&�&�z�&�&�&�&�&�&�z�&�&�&�&�z�&�&�&�&�&�&�J�&�&�&�&�J�&�&�&�&�&�&�&rc �p�[SSS9n/S4S/S4SS/S4/S QS 4/S QS 4/nUGH upE[S SSSSSUS9nURX&5nXu:�o�(d�[R"SU4SXu45S[ R "5;d[R"U5(a[R"U5OSS[ R "5;d[R"U5(a[R"U5OSS.-n SSU 0-n [[R"U 55eSnGM g)z,Test impact of warnings on reputation score.r�imr���w1r��w2r�)rr�w3r�)rrr�w4rrTrg�?rr�r�r�r��expected_consistencyr�r�r\Nr�) rrrZr�r&r r�r�r?r�rus r�/test_calculate_reputation_score_warnings_impact�HTestDomainHistoryChecker.test_calculate_reputation_score_warnings_impacts����z�C�@����H��V�R�L��D�\�2� � �� #� %�q� )�  � �/9� *�H�(�)���!�#��!��F��6�6�w�G�E��0� 0� 0� 0� 0�5� 0� 0� 0� 0� 0� 0�5� 0� 0� 0� 0�5� 0� 0� 0� 0� 0� 0�0� 0� 0� 0� 0�0� 0� 0� 0� 0� 0� 0� 0�/9rc ���[SSSS9n[SSSSS S/S 9nURX#5nS oTU:Hof(d�[R"S U4S XE45S[ R "5;d[R"U5(a[R"U5OS[R"U5S.-nSSU0-n[[R"U55eS=peg)z,Test that reputation score is capped at 100.r]iBr)rorrrqrTrg�������?i'r�gY@r,r�r�r�r�r2Nr�) rrrZ�perfect_resultr�r�r?r�rBs r�'test_calculate_reputation_score_max_100�@TestDomainHistoryChecker.test_calculate_reputation_score_max_1005s��� � ��$(� �� -�%���� ��� ���2�2�7�K�����~�����u�������u�����u�����������rc��# �SS0n[R"USUS9 [R"US0S9 URS5IShv�N nSSS5 SSS5 WRnSoTULof(d�[R "SU4S XE45S [ R"5;d[R"U5(a[R"U5OS [R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pegN�!,(df  N�=f!,(df  N�=f7f)z2Test domain history when creation date is missing.rQzExample RegistrarrUrVrXrNr�)z0%(py2)s {%(py2)s = %(py0)s.age_days } is %(py5)srZr/r3r4) rrmrnrrr6r7r8r9r:r;r<r=) rrrsrZr?r@rArBrCs r�#test_get_domain_history_no_age_days�<TestDomainHistoryChecker.test_get_domain_history_no_age_daysKs���� �,� ���\�\�'�#4�?� S����g�':��L� '� :� :�;P� Q�Q��M�T����'�4�'�4�'�'�'�'�'��'�'�'�'�'�'�w�'�'�'�'�w�'�'�'��'�'�'�4�'�'�'�'�'�'�'�R�M�L��T� S�sF�E�E�D7� D5� D7�E�CE�5D7�7 E �E� E�E�N)"�__name__� __module__� __qualname__�__firstlineno__�__doc__�pytest�fixturerr)rDrG�mark�asyncior~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r�rr rr�__static_attributes__rrrrr s���.� �^�^�A��A� �^�^�  ��  �B� 4�  �[�[���'��'�< �[�[���/��/� �[�[��� 6�� 6� �[�[��� 5�� 5� �[�[��� .�� .� �[�[������ �[�[���,��,�" �[�[��� ,�� ,� �[�[������)�-� � � �)�" )�'�<1�8�, �[�[��� (�� (rr)r�builtinsr8�_pytest.assertion.rewrite� assertion�rewriter6r� unittest.mockrrrrrrr �whois� waybackpy�url_reputation_checker.historyr �url_reputation_checker.modelsr r rrrrr�<module>r's6����� �;�;�2�2� ��?�]�]�I(�I(r

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/prismon/reputation-checker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server