Ë
    Á(jƒ  ã                   ó$  — d Z ddlZddlmc mZ ddlZddlZddl	Z	ddl
mZ ddlmZmZmZ  e	j                   d¬«      de	j"                  ddfd	„«       Ze	j                   defd
„«       Z G d„ d«      Z G d„ d«      Z G d„ d«      Z G d„ d«      Zy)z¸Tests for the eBay Marketplace Account Deletion endpoint.

The hash example uses the values from eBay's official documentation:
https://developer.ebay.com/marketplace-account-deletion
é    N)Ú
TestClient)ÚappÚcompute_challenge_hashÚsettingsT)ÚautouseÚmonkeypatchÚreturnc                 ó`   — | j                  t        dd«       | j                  t        dd«       y)z-Inject test-specific settings for every test.Úebay_verification_tokenÚtokenabc123Úebay_deletion_endpoint_urlú(https://api.agent.dgx.dev/ebay/deletionsN)Úsetattrr   )r   s    ú;/var/www/html/agent.samochodowy/tests/test_ebay_deletion.pyÚ_override_settingsr      s.   € ð ×ÑœÐ";¸]ÔKØ×ÑÜØ$Ø2õó    c                  ó    — t        t        «      S )N)r   r   © r   r   Úclientr      s   € ä”c‹?Ðr   c                   ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚTestComputeChallengeHashc                 óÖ  — t        ddd«      }t        ddd«      }||k(  }|sÆt        j                  d|fd||f«      dt        j                  «       v st        j
                  |«      rt        j                  |«      nddt        j                  «       v st        j
                  |«      rt        j                  |«      nddœz  }d	d
|iz  }t        t        j                  |«      «      ‚d }y )NÚabcÚtokzhttps://example.com©ú==)z%(py0)s == %(py2)sÚh1Úh2)Úpy0Úpy2zassert %(py4)sÚpy4)	r   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanation)Úselfr   r   Ú@py_assert1Ú@py_format3Ú@py_format5s         r   Útest_deterministicz+TestComputeChallengeHash.test_deterministic%   sk   € Ü# E¨5Ð2GÓHˆÜ# E¨5Ð2GÓHˆØ�R‰x���ˆr�R�����‰ˆr��‹ˆr�����Š�R��‹�R������Šr   c           	      óü  — d}d}d}t        j                  ||z   |z   j                  d«      «      j                  «       }t	        |||«      }||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d	t        j                  «       v st        j                  |«      rt        j                  |«      nd	d
t        j                  «       v st        j                  |«      rt        j                  |«      nd
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Útest_challengeÚ
test_tokenzhttps://example.com/endpointúutf-8r   ©zB%(py5)s
{%(py5)s = %(py0)s(%(py1)s, %(py2)s, %(py3)s)
} == %(py7)sr   Ú	challengeÚtokenÚurlÚexpected©r   Úpy1r    Úpy3Úpy5Úpy7úassert %(py9)sÚpy9©ÚhashlibÚsha256ÚencodeÚ	hexdigestr   r"   r#   r$   r%   r&   r'   r(   r)   )	r*   r4   r5   r6   r7   Ú@py_assert4Ú@py_assert6Ú@py_format8Ú@py_format10s	            r   Útest_matches_manual_sha256z3TestComputeChallengeHash.test_matches_manual_sha256*   s&  € Ø$ˆ	ØˆØ,ˆÜ—>‘>Ø˜Ñ Ñ$×,Ñ,¨WÓ5ó
ç
‰)‹+ð 	ô & i°¸Ó<ÐHÐ<ÀÑH×H×HÖHÐ<À×H×H×H×H×HÑHÔ%×H×HÓHÔ%×H×H×H×H×HÒH i×H×HÓH i×H×H×H×H×HÒH°×H×HÓH°×H×H×H×H×HÒH¸×H×HÓH¸×H×HÔHÐ<×H×H×H×H×HÐHÀ×H×HÓHÀ×H×H×H×H×H×HÔHr   c           	      ó   — d}d}d}||z   |z   }t        j                  |j                  d«      «      j                  «       }t	        |||«      }||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dt        j                  «       v st        j                  |«      rt        j                  |«      ndd	t        j                  «       v st        j                  |«      rt        j                  |«      nd	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)aG  Verify against the documented eBay example.

        eBay docs state:
          challengeCode = "71cfa52e-5bf0-4b8b-b399-16e6e1d06496"
          verificationToken = "71cfa52e-5bf0-4b8b-b399-16e6e1d06496"
          endpoint = "https://www.example.com/webhook"
          expected hash = SHA-256 of the three concatenated
        z$71cfa52e-5bf0-4b8b-b399-16e6e1d06496zhttps://www.example.com/webhookr2   r   r3   r   r4   r5   Úendpointr7   r8   r=   r>   Nr?   )
r*   r4   r5   rJ   Úrawr7   rD   rE   rF   rG   s
             r   Útest_ebay_docs_vectorz.TestComputeChallengeHash.test_ebay_docs_vector3   s%  € ð ;ˆ	Ø6ˆØ4ˆØ˜%Ñ (Ñ*ˆÜ—>‘> #§*¡*¨WÓ"5Ó6×@Ñ@ÓBˆÜ% i°¸ÓAÐMÐAÀXÑM×M×MÖMÐAÀX×M×M×M×M×MÑMÔ%×M×MÓMÔ%×M×M×M×M×MÒM i×M×MÓM i×M×M×M×M×MÒM°×M×MÓM°×M×M×M×M×MÒM¸×M×MÓM¸×M×MÔMÐA×M×M×M×M×MÐMÀX×M×MÓMÀX×M×M×M×M×M×MÔMr   N)Ú__name__Ú
__module__Ú__qualname__r.   rH   rL   r   r   r   r   r   $   s   „ òò
IóNr   r   c                   ó0   — e Zd Zdefd„Zdefd„Zdefd„Zy)ÚTestChallengeEndpointr   c                 óÒ  — |j                  dddi¬«      }|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   }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 )Nú/ebay/deletionsÚchallenge_codeÚabc123©ÚparamséÈ   r   ©z3%(py2)s
{%(py2)s = %(py0)s.status_code
} == %(py5)sÚresp©r   r    r;   úassert %(py7)sr<   zcontent-typezapplication/json©z%(py1)s == %(py4)s©r9   r!   úassert %(py6)sÚpy6)ÚgetÚstatus_coder"   r#   r$   r%   r&   r'   r(   r)   Úheaders)r*   r   rZ   r+   rD   Ú@py_assert3Ú@py_format6rF   Ú@py_assert0Ú@py_assert2r-   Ú@py_format7s               r   Útest_returns_200_jsonz+TestChallengeEndpoint.test_returns_200_jsonI   sç   € Ø�z‰zÐ+Ð5EÀxÐ4PˆzÓQˆØ×ÑÐ& 3Ð&Ð 3Ñ&×&×&Õ&Ð 3×&×&×&×&×&Ñ&ˆt×&×&Ó&ˆt×&×&Ô&Ð×&×&Ò& 3×&×&×&×&×&×&Ó&Ø�|‰|˜NÑ+ÐAÐ/AÐAÐ+Ð/AÑA×A×AÕAÐ+Ð/A×A×AÓAÐ+×A×AÒAÐ/A×A×A×A×A×A×AÔAr   c                 ó¾  — d}|j                  dd|i¬«      }|j                  «       }t        |dd«      }|d   }||k(  }|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 )Nzmy-challengerS   rT   rV   r   r   ÚchallengeResponser   )z%(py1)s == %(py3)sr7   )r9   r:   zassert %(py5)sr;   )ra   Újsonr   r"   r#   r'   r$   r%   r&   r(   r)   )
r*   r   ÚcoderZ   Úbodyr7   rf   rg   Ú@py_format4re   s
             r   Útest_challenge_response_valuez3TestChallengeEndpoint.test_challenge_response_valueN   s¢   € ØˆØ�z‰zÐ+Ð5EÀtÐ4LˆzÓMˆØ�y‰y‹{ˆÜ)ØØØ6ó
ˆð
 Ð'Ñ(Ð4Ð(¨HÑ4×4×4Õ4Ð(¨H×4×4Ó4Ð(×4×4×4×4×4Ð4¨H×4×4Ó4¨H×4×4×4×4×4×4Ô4r   c                 ó¶  — |j                  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 )	NrS   i¦  r   rY   rZ   r[   r\   r<   )
ra   rb   r"   r#   r$   r%   r&   r'   r(   r)   ©r*   r   rZ   r+   rD   rd   re   rF   s           r   Útest_missing_challenge_code_422z5TestChallengeEndpoint.test_missing_challenge_code_422Y   sƒ   € Ø�z‰zÐ+Ó,ˆØ×ÑÐ& 3Ð&Ð 3Ñ&×&×&Õ&Ð 3×&×&×&×&×&Ñ&ˆt×&×&Ó&ˆt×&×&Ô&Ð×&×&Ò& 3×&×&×&×&×&×&Ô&r   N)rM   rN   rO   r   ri   rp   rs   r   r   r   rQ   rQ   H   s(   „ ðB¨Jó Bð
	5°Jó 	5ð'°jô 'r   rQ   c                   ó0   — e Zd Zdefd„Zdefd„Zdefd„Zy)ÚTestDeletionNotificationr   c                 óä  — ddiddœ}|j                  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   }	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 )NÚnotificationIdz	notif-001zuser-42©ÚmetadataÚuserIdrS   ©rl   rX   r   rY   rZ   r[   r\   r<   ÚstatusÚacknowledgedr]   r^   r_   r`   )Úpostrb   r"   r#   r$   r%   r&   r'   r(   r)   rl   )r*   r   ÚpayloadrZ   r+   rD   rd   re   rF   rf   rg   r-   rh   s                r   Útest_returns_200z)TestDeletionNotification.test_returns_200c   só   € à)¨;Ð7Øñ
ˆð �{‰{Ð,°7ˆ{Ó;ˆØ×ÑÐ& 3Ð&Ð 3Ñ&×&×&Õ&Ð 3×&×&×&×&×&Ñ&ˆt×&×&Ó&ˆt×&×&Ô&Ð×&×&Ò& 3×&×&×&×&×&×&Ó&Ø�y‰y‹{˜8Ñ$Ð6¨Ð6Ð$¨Ñ6×6×6Õ6Ð$¨×6×6Ó6Ð$×6×6Ò6¨×6×6×6×6×6×6Ô6r   c                 óö  — ddiddœ}|j                  d«      5  |j                  d|¬«       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}}y # 1 sw Y   ŒÃxY w)Nrw   ú	notif-002úuser-99rx   ÚINFOrS   r{   c              3   óX   K  — | ]"  }d |j                   v xr d|j                   v –— Œ$ y­w)r‚   rƒ   N)Úmessage)Ú.0Úrs     r   ú	<genexpr>zBTestDeletionNotification.test_logs_notification.<locals>.<genexpr>s   s*   è ø€ Ò_È1�; !§)¡)Ð+ÒF°	¸Q¿Y¹YÐ0FÓFÑ_ùs   ‚(*z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úany)r   r    r!   )Úat_levelr~   ÚrecordsrŠ   r$   r%   r"   r&   r'   r(   r)   )r*   r   Úcaplogr   r+   rd   r-   s          r   Útest_logs_notificationz/TestDeletionNotification.test_logs_notificationl   s®   € à)¨;Ð7Øñ
ˆð �_‰_˜VÓ$ñ 	9Ø�K‰KÐ)°ˆKÔ8÷	9á_ÐPV×P^ÑP^Ô_Ð_ŒsÐ_Ó_Ð_Ñ_×_×_×_×_Õ_Œs×_×_Ó_Œs×_×_Ô_Ð_×_×_Ò_Ð_×_×_×_×_×_Ó_÷	9ð 	9ús   ™C/Ã/C8c                 óº  — |j                  di ¬«      }|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 )
NrS   r{   rX   r   rY   rZ   r[   r\   r<   )
r~   rb   r"   r#   r$   r%   r&   r'   r(   r)   rr   s           r   Útest_empty_payloadz+TestDeletionNotification.test_empty_payloadu   s‡   € Ø�{‰{Ð,°2ˆ{Ó6ˆØ×ÑÐ& 3Ð&Ð 3Ñ&×&×&Õ&Ð 3×&×&×&×&×&Ñ&ˆt×&×&Ó&ˆt×&×&Ô&Ð×&×&Ò& 3×&×&×&×&×&×&Ô&r   N)rM   rN   rO   r   r€   rŽ   r�   r   r   r   ru   ru   b   s(   „ ð7 zó 7ð`¨Zó `ð'¨ô 'r   ru   c                   ó   — e Zd Zdefd„Zy)Ú
TestHealthr   c                 ó„  — |j                  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	d
i}||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 )Nz/healthrX   r   rY   rZ   r[   r\   r<   r|   Úok)zC%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.json
}()
} == %(py7)s)r   r    r!   r<   r=   r>   )ra   rb   r"   r#   r$   r%   r&   r'   r(   r)   rl   )r*   r   rZ   r+   rD   rd   re   rF   rE   Ú@py_assert5rG   s              r   Útest_healthzTestHealth.test_health   s	  € Ø�z‰z˜)Ó$ˆØ×ÑÐ& 3Ð&Ð 3Ñ&×&×&Õ&Ð 3×&×&×&×&×&Ñ&ˆt×&×&Ó&ˆt×&×&Ô&Ð×&×&Ò& 3×&×&×&×&×&×&Ó&Ø�y‰yÐ.‰y‹{Ð.˜x¨Ð.Ð.ˆ{Ð.Ñ.×.×.Õ.ˆ{Ð.×.×.×.×.×.Ñ.ˆt×.×.Ó.ˆt×.×.Ô.ˆy×.×.Ò.ˆ{×.×.Ò.Ð.×.×.×.×.×.×.Ö.r   N)rM   rN   rO   r   r–   r   r   r   r’   r’   ~   s   „ ð/ *ô /r   r’   )Ú__doc__Úbuiltinsr$   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter"   r@   rl   ÚpytestÚfastapi.testclientr   Ú*agent_samochodowy.compliance.ebay_deletionr   r   r   ÚfixtureÚMonkeyPatchr   r   r   rQ   ru   r’   r   r   r   ú<module>r¡      sŸ   ðñ÷ „ ƒÛ ã Ý )ç \Ñ \ð €‡�˜Ôð F×$6Ñ$6ð ¸4ò ó ðð ‡�ð�
ò ó ð÷Nñ N÷H'ñ '÷4'ñ '÷8/ò /r   