§
    ÿz»jN  ã                   óÔ   — 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
Z
ddl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  G d„ de
j        ¦  «        Zedk    r e
j        ¦   «          dS dS )zŸ
Unit and Integration tests for Feedback HTTP API and Isolated Storage.
Tests POST /api/feedback, GET /api/feedback, validation rules, and database isolation.
é    N)ÚFreeExileHTTPRequestHandler)ÚFeedbackServiceÚSystemDiagnosticsDTOc                   óL   — e Zd Zed„ ¦   «         Zed„ ¦   «         Zd„ Zd„ Zd„ ZdS )ÚTestFeedbackAPIIntegrationc                 óì  — t          j        ¦   «         | _        t          j                             | j        j        d¦  «        | _        t          j         	                    d¦  «        | _
        | j        t          j        d<   t          j        dt          ¦  «        | _        | j        j        d         | _        t#          j        | j        j        d¬¦  «        | _        | j                             ¦   «          d S )Nztest_api_feedback.dbÚFEEDBACK_DB_PATH)z	127.0.0.1r   é   T)ÚtargetÚdaemon)ÚtempfileÚTemporaryDirectoryÚtemp_dirÚosÚpathÚjoinÚnameÚtest_db_pathÚenvironÚgetÚorig_env_dbÚsocketserverÚ	TCPServerr   ÚhttpdÚserver_addressÚportÚ	threadingÚThreadÚserve_foreverÚserver_threadÚstart©Úclss    ú5C:\Projects\FreeExile\tests\unit\test_feedback_api.pyÚ
setUpClassz%TestFeedbackAPIIntegration.setUpClass   sº   € õ  Ô2Ñ4Ô4ˆŒÝœ7Ÿ<š<¨¬Ô(9Ð;QÑRÔRˆÔÝœ*Ÿ.š.Ð);Ñ<Ô<ˆŒØ),Ô)9�Œ
Ð%Ñ&õ !Ô*Ð+;Õ=XÑYÔYˆŒ	Ø”9Ô+¨AÔ.ˆŒÝ%Ô,°C´IÔ4KÐTXÐYÑYÔYˆÔØÔ×ÒÑ!Ô!Ð!Ð!Ð!ó    c                 ó  — | j                              ¦   «          | j                              ¦   «          | j        �| j        t          j        d<   n t          j                             dd ¦  «         | j                             ¦   «          d S )Nr	   )	r   ÚshutdownÚserver_closer   r   r   Úpopr   Úcleanupr"   s    r$   ÚtearDownClassz(TestFeedbackAPIIntegration.tearDownClass"   su   € àŒ	×ÒÑÔÐØŒ	×ÒÑ Ô Ð ØŒ?Ð&Ø-0¬_�BŒJÐ)Ñ*Ð*åŒJ�NŠNÐ-¨tÑ4Ô4Ð4ØŒ×ÒÑÔÐÐÐr&   c                 ó´  — d| j         › d�}ddddddd	d
dddœdœ}t          j        |¦  «                             d¦  «        }t          j                             ||ddid¬¦  «        }t          j                             |¦  «        5 }|                      |j	        d¦  «         t          j
        |                     ¦   «                              d¦  «        ¦  «        }|                      |d         ¦  «         |                      |d                              d¦  «        ¦  «         |                      d|d         ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Núhttp://127.0.0.1:ú/api/feedbackiŸ† ÚDaoSiLangThangÚGAMEPLAY_SUGGESTIONu;   Ä�á»� xuáº¥t thÃªm tÃ­nh nÄƒng khinh cÃ´ng vÆ°á»£t tÆ°á»�ngu{   KÃ­nh gá»­i Ban Quáº£n Trá»‹, hy vá»�ng game cÃ³ thÃªm thÃ¢n phÃ¡p Ä‘áº¡p tÆ°á»�ng Ä‘á»ƒ leo nÃ³c nhÃ  táº¡i thÃ nh chÃ­nh.ÚiOSziPhone 16 Prog      ^@é   u   Cá»• Tráº¥n Huyáº¿t LÃ¢n)Úclient_platformÚdevice_modelÚcurrent_fpsÚcurrent_ping_msÚcurrent_zone_name)Ú	player_idÚplayer_nameÚcategoryÚtitleÚcontentÚdiagnosticsúutf-8úContent-Typeúapplication/jsonÚPOST©ÚdataÚheadersÚmethodéÈ   ÚsuccessÚfeedback_idÚfb_u   Ä‘Ã£ ghi nháº­nÚmessage)r   ÚjsonÚdumpsÚencodeÚurllibÚrequestÚRequestÚurlopenÚassertEqualÚstatusÚloadsÚreadÚdecodeÚ
assertTrueÚ
startswithÚassertIn)ÚselfÚurlÚpayloadrD   ÚreqÚrespÚres_bodys          r$   Útest_post_feedback_successz5TestFeedbackAPIIntegration.test_post_feedback_success,   s¬  € Ø: $¤)Ð:Ð:Ð:ˆàØ+Ø-ØRð Uà#(Ø /Ø$Ø#%Ø%?ðð ð
ð 
ˆõ Œz˜'Ñ"Ô"×)Ò)¨'Ñ2Ô2ˆÝŒn×$Ò$ S¨t¸nÐN`Ð=aÐjpÐ$ÑqÔqˆåŒ^×#Ò# CÑ(Ô(ð 	B¨DØ×Ò˜Tœ[¨#Ñ.Ô.Ð.Ý”z $§)¢)¡+¤+×"4Ò"4°WÑ"=Ô"=Ñ>Ô>ˆHØ�OŠO˜H YÔ/Ñ0Ô0Ð0Ø�OŠO˜H ]Ô3×>Ò>¸uÑEÔEÑFÔFÐFØ�MŠMÐ+¨X°iÔ-@ÑAÔAÐAð	Bð 	Bð 	Bñ 	Bô 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bøøøð 	Bð 	Bð 	Bð 	Bð 	Bð 	Bs   ÂB:EÅEÅEc                 óº  — d| j         › d�}ddddddœ}t          j        |¦  «                             d	¦  «        }t          j                             ||d
did¬¦  «        }|                      t          j        j	        ¦  «        5 }t          j         
                    |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      |j        j        d¦  «         d S )Nr.   r/   iž† ÚTesterÚ
BUG_REPORTu
   Lá»—i gameÚLag)r9   r:   r;   r<   r=   r?   r@   rA   rB   rC   i�  )r   rL   rM   rN   rO   rP   rQ   ÚassertRaisesÚerrorÚ	HTTPErrorrR   rS   Ú	exceptionÚcode)r[   r\   r]   rD   r^   Úctxs         r$   Ú#test_post_feedback_validation_errorz>TestFeedbackAPIIntegration.test_post_feedback_validation_errorF   s  € Ø: $¤)Ð:Ð:Ð:ˆð Ø#Ø$Ø!Øð
ð 
ˆõ Œz˜'Ñ"Ô"×)Ò)¨'Ñ2Ô2ˆÝŒn×$Ò$ S¨t¸nÐN`Ð=aÐjpÐ$ÑqÔqˆà×Ò�vœ|Ô5Ñ6Ô6ð 	(¸#ÝŒN×"Ò" 3Ñ'Ô'Ð'ð	(ð 	(ð 	(ñ 	(ô 	(ð 	(ð 	(ð 	(ð 	(ð 	(ð 	(øøøð 	(ð 	(ð 	(ð 	(à×Ò˜œÔ+¨SÑ1Ô1Ð1Ð1Ð1s   Â B0Â0B4Â7B4c                 óä  — d| j         › d�}t          j                             |d¬¦  «        }t          j                             |¦  «        5 }|                      |j        d¦  «         t          j        | 	                    ¦   «          
                    d¦  «        ¦  «        }|                      d|¦  «         |                      |d         t          ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nr.   r/   ÚGET)rF   rG   r?   Ú	feedbacks)r   rO   rP   rQ   rR   rS   rT   rL   rU   rV   rW   rZ   ÚassertIsInstanceÚlist)r[   r\   r^   r_   r`   s        r$   Útest_get_feedback_listz1TestFeedbackAPIIntegration.test_get_feedback_listW   s  € Ø: $¤)Ð:Ð:Ð:ˆÝŒn×$Ò$ S°Ð$Ñ7Ô7ˆåŒ^×#Ò# CÑ(Ô(ð 	?¨DØ×Ò˜Tœ[¨#Ñ.Ô.Ð.Ý”z $§)¢)¡+¤+×"4Ò"4°WÑ"=Ô"=Ñ>Ô>ˆHØ�MŠM˜+ xÑ0Ô0Ð0Ø×!Ò! (¨;Ô"7½Ñ>Ô>Ð>ð		?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?ð 	?ð 	?s   ÁBC%Ã%C)Ã,C)N)	Ú__name__Ú
__module__Ú__qualname__Úclassmethodr%   r,   ra   rl   rr   © r&   r$   r   r      sx   € € € € € Øð"ð "ñ „[ð"ð ðð ñ „[ððBð Bð Bð42ð 2ð 2ð"?ð ?ð ?ð ?ð ?r&   r   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arrL   r   r   ÚunittestÚurllib.requestrO   Úurllib.errorr   r   Útools.serve_webappr   Ú server.feedback.feedback_servicer   r   ÚTestCaser   rs   Úmainrw   r&   r$   ú<module>r‡      s  ððð ð
 € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø 	€	€	€	à :Ð :Ð :Ð :Ð :Ð :Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RðL?ð L?ð L?ð L?ð L? Ô!2ñ L?ô L?ð L?ð^ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr&   