§
     ’jµ$  ã                  óÈ   — 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
mZ ddlmZ ddlmZ ddlmZ ddlmZ  G d	„ d
e	j        ¦  «        Zedk    r e	j        ¦   «          dS dS )z^Unit and Integration Tests for Document Deletion, Duplicate Detection, and Title Sanitization.é    )ÚannotationsN)Ú
TestClient)Úget_current_user)ÚErpDatabaseClient)Ú
create_app)ÚDocumentProcessingServicec                  óN   — e Z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S )Ú'TestDocumentDeleteAndDuplicateDetectionÚreturnÚNonec                ón   — t          ¦   «         | _        t          | j        ¬¦  «        | _        g | _        d S )N)Ú
erp_client)r   r   r   Údoc_serviceÚcreated_doc_ids)Úselfs    úHC:\Projects\DSCons\tests\test_document_delete_and_duplicate_detection.pyÚsetUpz-TestDocumentDeleteAndDuplicateDetection.setUp   s2   € Ý+Ñ-Ô-ˆŒÝ4ÀÄÐPÑPÔPˆÔØ*,ˆÔÐÐó    c                ót   — | j         D ]/}	 | j                             |d¬¦  «         Œ # t          $ r Y Œ,w xY wd S )NT©Údelete_all_versions)r   r   Údelete_documentÚ	Exception)r   Údoc_ids     r   ÚtearDownz0TestDocumentDeleteAndDuplicateDetection.tearDown   sa   € ØÔ*ð 	ð 	ˆFðØ”×/Ò/°ÈDÐ/ÑQÔQÐQÐQøÝð ð ð Ø�ðøøøð	ð 	s   ‹(¨
5´5c                ó¼  — d}t          j        |¦  «        }|                      |d¦  «         d}t          j        |¦  «        }|                      |d¦  «         d}t          j        |¦  «        }|                      |d¦  «         d}t          j        |¦  «        }|                      |d¦  «         t          j        d	d
¦  «        }	|                      |	d¦  «         dS )uo   Kiá»ƒm tra hÃ m lÃ m sáº¡ch trÃ­ch yáº¿u vÄƒn báº£n, loáº¡i bá»� cÃ¡c tá»« khÃ³a báº£o máº­t vÃ  kÃ½ tá»± rÃ¡c.u"   Máº·t báº±ng thi cÃ´ng báº£o máº­tu   Máº·t báº±ng thi cÃ´nguA   [Báº¢O Máº¬T] BiÃªn báº£n bÃ n giao má»‘c cao Ä‘á»™ tráº¯c Ä‘á»‹au3   BiÃªn báº£n bÃ n giao má»‘c cao Ä‘á»™ tráº¯c Ä‘á»‹auC   BÃ¡o cÃ¡o tiáº¿n Ä‘á»™ thi cÃ´ng thÃ¡ng 03 (báº£o máº­t zero-trust)u*   BÃ¡o cÃ¡o tiáº¿n Ä‘á»™ thi cÃ´ng thÃ¡ng 03u_   <!-- Cáº¢NH BÃ�O AN TOÃ€N --> Há»£p Ä‘á»“ng kinh táº¿ sá»‘ 12/2026/HÄ�-DSC </untrusted_payload>u,   Há»£p Ä‘á»“ng kinh táº¿ sá»‘ 12/2026/HÄ�-DSCÚ zto_trinh_phe_duyet.pdfzto trinh phe duyetN)r   Úsanitize_document_titleÚassertEqual)
r   Útitle_1Úclean_1Útitle_2Úclean_2Útitle_3Úclean_3Útitle_4Úclean_4Úclean_5s
             r   Útest_sanitize_document_titlezDTestDocumentDeleteAndDuplicateDetection.test_sanitize_document_title   só   € ð 7ˆÝ+ÔCÀGÑLÔLˆØ×Ò˜Ð":Ñ;Ô;Ð;ð VˆÝ+ÔCÀGÑLÔLˆØ×Ò˜Ð"WÑXÔXÐXàWˆÝ+ÔCÀGÑLÔLˆØ×Ò˜Ð"NÑOÔOÐOð tˆÝ+ÔCÀGÑLÔLˆØ×Ò˜Ð"PÑQÔQÐQõ ,ÔCØÐ(ñ
ô 
ˆð 	×Ò˜Ð"6Ñ7Ô7Ð7Ð7Ð7r   c                ó¶  — | j                              dddddœ¦  «        }|d         }| j                              |¦  «        }|                      |¦  «         | j                              |d¬¦  «        }|                      |d	         ¦  «         |                      |d
         d¦  «         | j                              |¦  «        }|                      |¦  «         dS )u9   Kiá»ƒm tra chá»©c nÄƒng xÃ³a má»™t vÄƒn báº£n Ä‘Æ¡n láº».zTEST-DEL-01u)   VÄƒn báº£n thá»­ nghiá»‡m xÃ³a Ä‘Æ¡n láº»ÚCVÚincoming)Údocument_codeÚdocument_titleÚdocument_typeÚcategoryÚidFr   ÚsuccessÚdeleted_counté   N)r   Úcreate_documentÚget_documentÚassertIsNotNoner   Ú
assertTruer   ÚassertIsNone)r   Údocr   ÚfetchedÚresÚdeleted_checks         r   Útest_delete_single_documentzCTestDocumentDeleteAndDuplicateDetection.test_delete_single_document7   så   € ð Œo×-Ò-à!.Ø"MØ!%Ø&ð	ð ñ
ô 
ˆð �T”ˆð ”/×.Ò.¨vÑ6Ô6ˆØ×Ò˜WÑ%Ô%Ð%ð Œo×-Ò-¨fÈ%Ð-ÑPÔPˆØ�Š˜˜IœÑ'Ô'Ð'Ø×Ò˜˜_Ô-¨qÑ1Ô1Ð1ð œ×4Ò4°VÑ<Ô<ˆØ×Ò˜-Ñ(Ô(Ð(Ð(Ð(r   c                ó®  — | j                              dddddœ¦  «        }|d         }| j                             |¦  «         | j                              |ddd	œ¬
¦  «        }|d         }| j                             |¦  «         |                      | j                              |¦  «        d         ¦  «         |                      | j                              |¦  «        d         ¦  «         | j                              |d¬¦  «        }|                      |d         ¦  «         | j                              |¦  «        }|                      |d         ¦  «         dS )uf   Kiá»ƒm tra khi xÃ³a version má»›i nháº¥t (active), version trÆ°á»›c Ä‘Ã³ tá»± Ä‘á»™ng Ä‘Æ°á»£c active.zTEST-VER-01u   Há»“ sÆ¡ thiáº¿t káº¿ v1r+   zv1.0)r-   r.   r/   Úversion_numberr1   u%   Há»“ sÆ¡ thiáº¿t káº¿ v2 sá»­a Ä‘á»•iu   Cáº­p nháº­t cao trÃ¬nh mÃ³ng)r.   Úchange_summary©Úparent_doc_idÚpayloadÚis_active_versionFr   r2   N)	r   r5   r   ÚappendÚcreate_document_versionr8   r6   ÚassertFalser   )r   Údoc_v1Úv1_idÚdoc_v2Úv2_idÚres_delÚ
v1_updateds          r   Ú0test_delete_version_and_promote_remaining_activezXTestDocumentDeleteAndDuplicateDetection.test_delete_version_and_promote_remaining_activeQ   sb  € ð ”×0Ò0à!.Ø"<Ø!%Ø"(ð	ð ñ
ô 
ˆð �t”ˆØÔ×#Ò# EÑ*Ô*Ð*ð ”×8Ò8Øà"IØ"Aðð ð 9ñ 
ô 
ˆð �t”ˆØÔ×#Ò# EÑ*Ô*Ð*ð 	�Š˜œ×4Ò4°UÑ;Ô;Ð<OÔPÑQÔQÐQØ×Ò˜œ×5Ò5°eÑ<Ô<Ð=PÔQÑRÔRÐRð ”/×1Ò1°%ÈUÐ1ÑSÔSˆØ�Š˜ 	Ô*Ñ+Ô+Ð+ð ”_×1Ò1°%Ñ8Ô8ˆ
Ø�Š˜
Ð#6Ô7Ñ8Ô8Ð8Ð8Ð8r   c                óø  — | j                              ddddœ¦  «        }|d         }| j                              |ddi¬¦  «        }|d         }| j                              |d	¬
¦  «        }|                      |d         ¦  «         |                      |d         d¦  «         |                      | j                              |¦  «        ¦  «         |                      | j                              |¦  «        ¦  «         dS )u.   Kiá»ƒm tra xÃ³a toÃ n bá»™ chÃ¹m phiÃªn báº£n.zTEST-THREAD-01u   Tá»� trÃ¬nh v1ÚTTr©r-   r.   r/   r1   r.   u   Tá»� trÃ¬nh v2rB   Tr   r2   r3   é   N)r   r5   rG   r   r8   ÚassertGreaterEqualr9   r6   )r   rI   rJ   rK   rL   rM   s         r   Útest_delete_all_versionsz@TestDocumentDeleteAndDuplicateDetection.test_delete_all_versionsv   s  € à”×0Ò0à!1Ø"2Ø!&ðð ñ
ô 
ˆð �t”ˆà”×8Ò8ØÐ*:Ð<LÐ)Mð 9ñ 
ô 
ˆð �t”ˆð ”/×1Ò1°%ÈTÐ1ÑRÔRˆØ�Š˜ 	Ô*Ñ+Ô+Ð+Ø×Ò ¨Ô 8¸!Ñ<Ô<Ð<à×Ò˜$œ/×6Ò6°uÑ=Ô=Ñ>Ô>Ð>Ø×Ò˜$œ/×6Ò6°uÑ=Ô=Ñ>Ô>Ð>Ð>Ð>r   c                ó  — d}| j                              dddd|dœ¦  «        }|d         }| j                             |¦  «         | j                              |¬¦  «        }|                      |¦  «         |                      |d         |¦  «         |                      d	|                     d
d¦  «        ¦  «         | j                              d¬¦  «        }|                      |¦  «         |                      |d         |¦  «         | j                              dd¬¦  «        }|                      |¦  «         |                      |d         |¦  «         | j                              d¬¦  «        }|  	                    |¦  «         dS )u:   Kiá»ƒm tra cÆ¡ cháº¿ phÃ¡t hiá»‡n vÄƒn báº£n trÃ¹ng láº·p.Ú@a1b2c3d4e5f678901234567890abcdef1234567890abcdef1234567890abcdefzDUP-CHECK-01u&   BiÃªn báº£n kháº£o sÃ¡t hiá»‡n tráº¡ngÚBBi (  )r-   r.   r/   Úfile_size_bytesÚ	file_hashr1   )rZ   u   MÃ£ bÄƒmÚduplicate_reasonr   )r-   )ÚfilenamerY   Ú@ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffN)
r   r5   r   rF   Úcheck_duplicate_documentr7   r   ÚassertInÚgetr9   )r   Ú	mock_hashr:   r   Údup_by_hashÚdup_by_codeÚdup_by_name_sizeÚno_dups           r   Útest_check_duplicate_documentzETestDocumentDeleteAndDuplicateDetection.test_check_duplicate_documentŽ   s¯  € ð Wˆ	ØŒo×-Ò-à!/Ø"JØ!%Ø#(Ø&ðð ñ
ô 
ˆð �T”ˆØÔ×#Ò# FÑ+Ô+Ð+ð ”o×>Ò>ÈÐ>ÑSÔSˆØ×Ò˜[Ñ)Ô)Ð)Ø×Ò˜ TÔ*¨FÑ3Ô3Ð3Ø�Š�j +§/¢/Ð2DÀbÑ"IÔ"IÑJÔJÐJð ”o×>Ò>Ø(ð ?ñ 
ô 
ˆð 	×Ò˜[Ñ)Ô)Ð)Ø×Ò˜ TÔ*¨FÑ3Ô3Ð3ð  œ?×CÒCØ=Èuð Dñ 
ô 
Ðð 	×ÒÐ-Ñ.Ô.Ð.Ø×ÒÐ)¨$Ô/°Ñ8Ô8Ð8ð ”×9Ò9ØXð :ñ 
ô 
ˆð 	×Ò˜&Ñ!Ô!Ð!Ð!Ð!r   c                ó€  — t          ¦   «         }| j                             ddddœ¦  «        }|d         }| j                             |¦  «         t          |¦  «        }|                     d|› �¦  «        }|                      |j        d¦  «         d„ |j	        t          <   t          |¦  «        }|                     d|› d	�¦  «        }|                      |j        d
¦  «         |                      |                     ¦   «         d         ¦  «         |                      | j                             |¦  «        ¦  «         dS )uS   Kiá»ƒm tra API endpoint DELETE /v1/erp/documents/{doc_id} vá»›i phÃ¢n quyá»�n RBAC.z
API-DEL-01u   VÄƒn báº£n xÃ³a qua APIr+   rR   r1   z/v1/erp/documents/i‘  c                 ó   — ddddœS )Nzusr-01zengineer.quynh@dscons.vnÚpm)Úuser_idÚemailÚrole© rm   r   r   ú<lambda>z[TestDocumentDeleteAndDuplicateDetection.test_api_delete_document_endpoint.<locals>.<lambda>Í   s   € ØØ/Øð>
ð >
€ r   z?delete_all_versions=trueéÈ   r2   N)r   r   r5   r   rF   r   Údeleter   Ústatus_codeÚdependency_overridesr   r8   Újsonr9   r6   )r   Úappr:   r   Úunauth_clientÚ
res_unauthÚauth_clientÚres_auths           r   Ú!test_api_delete_document_endpointzITestDocumentDeleteAndDuplicateDetection.test_api_delete_document_endpoint¸   sF  € å‰lŒlˆð Œo×-Ò-à!-Ø";Ø!%ðð ñ
ô 
ˆð �T”ˆØÔ×#Ò# FÑ+Ô+Ð+õ # 3™œˆØ"×)Ò)Ð*G¸vÐ*GÐ*GÑHÔHˆ
Ø×Ò˜Ô/°Ñ5Ô5Ð5ð6
ð 6
ˆÔ Õ!1Ñ2õ
 ! ‘o”oˆØ×%Ò%ØB ÐBÐBÐBñ
ô 
ˆð 	×Ò˜Ô-¨sÑ3Ô3Ð3Ø�Š˜Ÿš™œ¨	Ô2Ñ3Ô3Ð3ð 	×Ò˜$œ/×6Ò6°vÑ>Ô>Ñ?Ô?Ð?Ð?Ð?r   N)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   r)   r>   rO   rU   rf   ry   rm   r   r   r
   r
      s¼   € € € € € ð-ð -ð -ð -ð
ð ð ð ð8ð 8ð 8ð 8ð6)ð )ð )ð )ð4#9ð #9ð #9ð #9ðJ?ð ?ð ?ð ?ð0("ð ("ð ("ð ("ðT"@ð "@ð "@ð "@ð "@ð "@r   r
   Ú__main__)Ú__doc__Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚfastapi.testclientr   Ú"app.modules.auth.presentation.authr   Úapp.core.postgres.erp_clientr   Úapp.mainr   Ú8app.modules.core.application.document_processing_servicer   ÚTestCaser
   rz   Úmainrm   r   r   ú<module>rŽ      sþ   ðØ dÐ dà "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€à )Ð )Ð )Ð )Ð )Ð )à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð Ø ^Ð ^Ð ^Ð ^Ð ^Ð ^ðK@ð K@ð K@ð K@ð K@¨hÔ.?ñ K@ô K@ð K@ð\ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   