§
    ¯µ›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 dd	lmZ dd
lmZmZmZmZmZ  G d„ de	j        ¦  «        ZdS )u\   Unit and integration tests for document taxonomy and auto-numbering {Sá»‘}/{NÄƒm}/{MÃ£}-Ä�S.é    )ÚannotationsN)Údatetime)ÚAny)Ú
TestClient)ÚErpDatabaseClient)Ú
create_app)Úget_current_user)ÚDOCUMENT_GROUPSÚDOCUMENT_TYPESÚget_document_typeÚget_group_for_typeÚget_taxonomy_groupedc                  ó>   — e Zd Zd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd	S )Ú!TestDocumentTaxonomyAndAutoNumberÚreturnÚNonec                ó:   — t          ¦   «         | _        g | _        d S )N)r   Ú
erp_clientÚcreated_doc_ids)Úselfs    úAC:\Projects\DSCons\tests\test_document_taxonomy_and_autonumber.pyÚsetUpz'TestDocumentTaxonomyAndAutoNumber.setUp   s   € Ý+Ñ-Ô-ˆŒØ*,ˆÔÐÐó    c           	     óR  — | j                              ¦   «         5 }|                     ¦   «         5 }| j        D ],}	 |                     d|||f¦  «         Œ# t
          $ r Y Œ)w xY w|                     ¦   «          d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nz\DELETE FROM erp_documents WHERE id = %s OR parent_document_id = %s OR root_document_id = %s;)r   Úget_connectionÚcursorr   ÚexecuteÚ	ExceptionÚcommit)r   ÚconnÚcurÚdoc_ids       r   ÚtearDownz*TestDocumentTaxonomyAndAutoNumber.tearDown   sE  € ØŒ_×+Ò+Ñ-Ô-ð 
	°Ø—’‘”ð 	 #Ø"Ô2ð ð �FðØŸšØzØ# V¨VÐ4ñô ð ð øõ %ð ð ð Ø˜ðøøøà—’‘”�ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð
	ð 
	ð 
	ñ 
	ô 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	øøøð 
	ð 
	ð 
	ð 
	ð 
	ð 
	sW   šB¯
BºAÁBÁ
A!	ÁBÁ A!	Á!BÁ8BÂB	ÂBÂB	ÂBÂB Â#B c                óì  — |                       dt          ¦  «         |                       dt          ¦  «         |                       dt          ¦  «         |                       dt          ¦  «         |                       dt          ¦  «         |                       dt          ¦  «         t          d¦  «        }|                      |¦  «         |                      |d         d¦  «         |                      |d	         d
¦  «         t          d¦  «        }|                      |¦  «         |                      |d         d¦  «         |                      t          d¦  «        d¦  «         |                      t          d¦  «        d¦  «         |                      t          d¦  «        d¦  «         |                      t          d¦  «        d¦  «         |                      t          d¦  «        d¦  «         |                      t          d¦  «        d¦  «         t          ¦   «         }|                      t          |¦  «        d¦  «         |                      t          |d         d         ¦  «        dk    ¦  «         dS )uM   Kiá»ƒm tra cáº¥u trÃºc 5 Ä�áº¡i nhÃ³m nghiá»‡p vá»¥ vÃ  danh má»¥c sub-types.ÚlegalÚcontractÚ	technicalÚsiteÚ	financialÚotherÚTMÚgroupÚnameu#   Thuyáº¿t minh & Dá»± toÃ¡n sÆ¡ bá»™ÚUNCÚCVu   HÄ�ÚBVÚBBNTÚSKÚUNKNOWN_CUSTOMé   Úitemsé   N)	ÚassertInr
   r   ÚassertIsNotNoneÚassertEqualr   r   ÚlenÚ
assertTrue)r   ÚtmÚuncÚgroupeds       r   Útest_domain_taxonomy_hierarchyz@TestDocumentTaxonomyAndAutoNumber.test_domain_taxonomy_hierarchy)   s   € à�Š�g�Ñ/Ô/Ð/Ø�Š�j¥/Ñ2Ô2Ð2Ø�Š�k¥?Ñ3Ô3Ð3Ø�Š�f�oÑ.Ô.Ð.Ø�Š�k¥?Ñ3Ô3Ð3Ø�Š�g�Ñ/Ô/Ð/õ ˜tÑ$Ô$ˆØ×Ò˜RÑ Ô Ð Ø×Ò˜˜Gœ kÑ2Ô2Ð2Ø×Ò˜˜FœÐ%JÑKÔKÐKå Ñ&Ô&ˆØ×Ò˜SÑ!Ô!Ð!Ø×Ò˜˜Wœ {Ñ3Ô3Ð3ð 	×ÒÕ+¨DÑ1Ô1°7Ñ;Ô;Ð;Ø×ÒÕ+¨EÑ2Ô2°JÑ?Ô?Ð?Ø×ÒÕ+¨DÑ1Ô1°;Ñ?Ô?Ð?Ø×ÒÕ+¨FÑ3Ô3°VÑ<Ô<Ð<Ø×ÒÕ+¨DÑ1Ô1°;Ñ?Ô?Ð?Ø×ÒÕ+Ð,<Ñ=Ô=¸wÑGÔGÐGå&Ñ(Ô(ˆØ×Ò�˜W™œ qÑ)Ô)Ð)Ø�Š�˜G KÔ0°Ô9Ñ:Ô:¸aÒ?Ñ@Ô@Ð@Ð@Ð@r   c                óÞ  — t          j        ¦   «         j        }| j                             d¦  «        }|                      |d         d¦  «         |                      |d         |¦  «         |                      |d                              d|› d�¦  «        ¦  «         | j                             d¦  «        }|                      |d         d¦  «         |                      |d                              d|› d�¦  «        ¦  «         | j                             d	¦  «        }|                      |d         d	¦  «         |                      |d                              d|› d
�¦  «        ¦  «         dS )uK   Kiá»ƒm tra quy táº¯c sinh sá»‘ hiá»‡u tá»± Ä‘á»™ng {Sá»‘}/{NÄƒm}/{MÃ£}-Ä�S.r/   Údoc_typeÚyearÚ	next_codeú/u   /CV-Ä�Sr+   u   /TM-Ä�SÚHDNTu	   /HDNT-Ä�SN)r   ÚnowrB   r   Úget_next_document_coder9   r;   Úendswith)r   Úcurrent_yearÚres_cvÚres_tmÚ
res_customs        r   Útest_auto_numbering_suffix_dsz?TestDocumentTaxonomyAndAutoNumber.test_auto_numbering_suffix_dsH   sY  € å”|‘~”~Ô*ˆð ”×7Ò7¸Ñ=Ô=ˆØ×Ò˜ 
Ô+¨TÑ2Ô2Ð2Ø×Ò˜ œ¨Ñ6Ô6Ð6Ø�Š˜˜{Ô+×4Ò4Ð5N¸Ð5NÐ5NÐ5NÑOÔOÑPÔPÐPð ”×7Ò7¸Ñ=Ô=ˆØ×Ò˜ 
Ô+¨TÑ2Ô2Ð2Ø�Š˜˜{Ô+×4Ò4Ð5N¸Ð5NÐ5NÐ5NÑOÔOÑPÔPÐPð ”_×;Ò;¸FÑCÔCˆ
Ø×Ò˜ JÔ/°Ñ8Ô8Ð8Ø�Š˜
 ;Ô/×8Ò8Ð9T¸\Ð9TÐ9TÐ9TÑUÔUÑVÔVÐVÐVÐVr   c                óÆ  — t          ¦   «         }dd„}||j        t          <   t          |¦  «        }|                     d¦  «        }|                      |j        d¦  «         |                     ¦   «         }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d	|d         ¦  «         |                     d
¦  «        }|                      |j        d¦  «         |                     ¦   «         }|                      |d         d¦  «         |  	                    |d          
                    d¦  «        ¦  «         dS )u9   Kiá»ƒm tra cÃ¡c API endpoints /taxonomy vÃ  /next-number.r   údict[str, Any]c                 ó   — ddddœS )NÚtest_auditorÚ
superadminztest@dscons.vn)Úuser_idÚroleÚemail© rV   r   r   Úoverride_authzdTestDocumentTaxonomyAndAutoNumber.test_api_taxonomy_and_next_number_endpoints.<locals>.override_auth`   s   € Ø-°|ÐN^Ð_Ð_Ð_r   z/v1/erp/documents/taxonomyéÈ   ÚgroupsÚtypesÚ	hierarchyr'   z)/v1/erp/documents/next-number?doc_type=TMrA   r+   rC   u   -Ä�SN)r   rO   )r   Údependency_overridesr	   r   Úgetr9   Ústatus_codeÚjsonr7   r;   rH   )r   ÚapprW   ÚclientÚres_taxÚdata_taxÚres_nextÚ	data_nexts           r   Ú+test_api_taxonomy_and_next_number_endpointszMTestDocumentTaxonomyAndAutoNumber.test_api_taxonomy_and_next_number_endpoints\   sN  € å‰lŒlˆð	`ð 	`ð 	`ð 	`ð 6CˆÔ Õ!1Ñ2Ý˜C‘”ˆð —*’*Ð9Ñ:Ô:ˆØ×Ò˜Ô,¨cÑ2Ô2Ð2Ø—<’<‘>”>ˆØ�Š�h Ñ)Ô)Ð)Ø�Š�g˜xÑ(Ô(Ð(Ø�Š�k 8Ñ,Ô,Ð,Ø�Š�k 8¨KÔ#8Ñ9Ô9Ð9ð —:’:ÐIÑJÔJˆØ×Ò˜Ô-¨sÑ3Ô3Ð3Ø—M’M‘O”Oˆ	Ø×Ò˜ :Ô.°Ñ5Ô5Ð5Ø�Š˜	 +Ô.×7Ò7¸Ñ?Ô?Ñ@Ô@Ð@Ð@Ð@r   c                ó*  ‡— | j                              ¦   «         5 }|                     ¦   «         5 }|                     d¦  «         |                     ¦   «         }|rt          |d         ¦  «        nd}ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   | j                              |dddddœ¦  «        Š| j                             ‰d         ¦  «         |  	                    ‰d	         d¦  «         |  	                    ‰d
         d¦  «         |  
                    ‰d                              d¦  «        ¦  «         | j                              d¬¦  «        }t          ˆfd„|D ¦   «         ¦  «        }|  
                    |d¦  «         dS )uk   Táº¡o vÄƒn báº£n vá»›i document_type ká»¹ thuáº­t vÃ  kiá»ƒm tra document_group Ä‘Æ°á»£c tá»± Ä‘á»™ng gÃ¡n.z!SELECT id FROM companies LIMIT 1;ÚidNuA   Báº£n váº½ thiáº¿t káº¿ thi cÃ´ng cá»‘ng há»™p máº«u kiá»ƒm thá»­r0   zAUTO-TEST-BVu&   Kiá»ƒm thá»­ phÃ¢n loáº¡i tá»± Ä‘á»™ng)Ú
company_idÚdocument_titleÚdocument_typeÚdocument_codeÚsummary_contentrk   Údocument_groupr'   rl   u   /BV-Ä�S)rn   c              3  ó<   •K  — | ]}|d          ‰d          k    V — ŒdS )rh   NrV   )Ú.0ÚdÚdocs     €r   ú	<genexpr>zcTestDocumentTaxonomyAndAutoNumber.test_document_group_auto_resolve_and_filtering.<locals>.<genexpr>Œ   s0   øè è € Ð<Ð<¨Q�A�d”G˜s 4œyÒ(Ð<Ð<Ð<Ð<Ð<Ð<r   zEDocument should be found when filtering by document_group='technical')r   r   r   r   ÚfetchoneÚstrÚcreate_documentr   Úappendr9   r;   rH   Úlist_documentsÚany)r   r    r!   Úc_rowri   Ú	docs_techÚfoundrr   s          @r   Ú.test_document_group_auto_resolve_and_filteringzPTestDocumentTaxonomyAndAutoNumber.test_document_group_auto_resolve_and_filteringv   s  ø€ àŒ_×+Ò+Ñ-Ô-ð 	=°°t·{²{±}´}ð 	=ÈØ�KŠKÐ;Ñ<Ô<Ð<Ø—L’L‘N”NˆEØ-2Ð<�˜U 4œ[Ñ)Ô)Ð)¸ˆJð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=ð
 Œo×-Ò-Ø$ØaØ!Ø+ØGð/
ð /
ñ ô ˆð 	Ô×#Ò# C¨¤IÑ.Ô.Ð.à×Ò˜˜_Ô-¨tÑ4Ô4Ð4Ø×Ò˜Ð-Ô.°Ñ<Ô<Ð<Ø�Š˜˜OÔ,×5Ò5°iÑ@Ô@ÑAÔAÐAð ”O×2Ò2À+Ð2ÑNÔNˆ	ÝÐ<Ð<Ð<Ð<°)Ð<Ñ<Ô<Ñ<Ô<ˆØ�Š˜ÐfÑgÔgÐgÐgÐgs5   ›B°AA?Á3BÁ?B	ÂBÂB	ÂBÂBÂBN)r   r   )	Ú__name__Ú
__module__Ú__qualname__r   r#   r?   rM   rf   r}   rV   r   r   r   r      sž   € € € € € ð-ð -ð -ð -ðð ð ð ðAð Að Að Að>Wð Wð Wð Wð(Að Að Að Að4hð hð hð hð hð hr   r   )Ú__doc__Ú
__future__r   ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestr   Útypingr   Úfastapi.testclientr   Úapp.core.postgres.erp_clientr   Úapp.mainr   Ú"app.modules.auth.presentation.authr	   Ú)app.modules.core.domain.document_taxonomyr
   r   r   r   r   ÚTestCaser   rV   r   r   ú<module>r‘      s=  ðØ bÐ bà "Ð "Ð "Ð "Ð "Ð "à  € € € € € € € € € € € € €€€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à )Ð )Ð )Ð )Ð )Ð )à :Ð :Ð :Ð :Ð :Ð :Ø Ð Ð Ð Ð Ð Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?ðð ð ð ð ð ð ð ð ð ð ð ð ð ðvhð vhð vhð vhð vh¨Ô(9ñ vhô vhð vhð vhð vhr   