§
    P#”jÌ  ã                   ó°   — d 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  G d„ dej        ¦  «        Zed	k    r ej        ¦   «          dS dS )
zVAutomated test suite for Enterprise Project CRUD, WBS Hierarchy, and AI WBS Generator.é    N)Ú
TestClient)Úget_current_user)Ú
create_app)ÚAIWbsGeneratorServicec                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestProjectCrudAndWbsServicec                 ó„   — t          ¦   «         | _        t          | j        ¦  «        | _        t	          ¦   «         | _        d S ©N)r   Úappr   Úclientr   Ú
ai_service©Úselfs    ú=C:\Projects\DSCons\tests\test_project_crud_and_wbs_service.pyÚsetUpz"TestProjectCrudAndWbsService.setUp   s/   € Ý‘<”<ˆŒÝ  ¤Ñ*Ô*ˆŒÝ/Ñ1Ô1ˆŒˆˆó    c                 ó   — i | j         _        d S r
   )r   Údependency_overridesr   s    r   ÚtearDownz%TestProjectCrudAndWbsService.tearDown   s   € Ø(*ˆŒÔ%Ð%Ð%r   c                 óp   — | j                              d¦  «        }|                      |j        d¦  «         dS )u6   Khi chÆ°a Ä‘Äƒng nháº­p, cÃ¡c endpoint tráº£ vá»� 401.ú/v1/erp/projectsi‘  N)r   ÚgetÚassertEqualÚstatus_code)r   Úress     r   Útest_unauthorized_accessz5TestProjectCrudAndWbsService.test_unauthorized_access   s4   € àŒk�oŠoÐ0Ñ1Ô1ˆØ×Ò˜œ¨#Ñ.Ô.Ð.Ð.Ð.r   c                 óÂ  — | j                              dddddd¬¦  «        }|                      d|¦  «         |                      d	|¦  «         |                      |d
         d¦  «         |                      |d         d¦  «         |d         }d„ |D ¦   «         }|                      t	          |¦  «        d¦  «         d„ |D ¦   «         }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      t	          |d	         ¦  «        d¦  «         dS )uh   Kiá»ƒm thá»­ nhÃ¢n viÃªn AI phÃ¢n tÃ­ch biá»ƒu giÃ¡ há»£p Ä‘á»“ng vÃ  láº­p timeline CPM 4 giai Ä‘oáº¡n.u0   Cá»¥m CÃ´ng TrÃ¬nh Cáº¥p NÆ°á»›c XÃ£ Kiáº¿n Minhu   Háº¡ táº§ng cáº¥p nÆ°á»›cg   `¸êAz
2026-09-01é´   u†   1. Ä�Ã o Ä‘áº¥t Ä‘áº·t á»‘ng HDPE D110: 4500 md
2. XÃ¢y bá»ƒ chá»©a nÆ°á»›c sáº¡ch 500m3: 1 cá»¥m
3. Tráº¡m bÆ¡m cáº¥p nÆ°á»›c: 2 mÃ¡y©Úproject_nameÚproject_typeÚcontract_valueÚ
start_dateÚduration_daysÚcontract_schedule_textÚ	wbs_itemsÚ
milestonesÚtotal_duration_daysÚgenerated_by_agentÚphucc                 ó*   — g | ]}|d          dk    ¯|‘ŒS )Ú	task_typeÚphase© ©Ú.0Úitems     r   ú
<listcomp>zNTestProjectCrudAndWbsService.test_ai_wbs_generator_service.<locals>.<listcomp>+   s'   € ÐGÐGÐG˜4¨$¨{Ô*;¸wÒ*FÐ*F�$Ð*FÐ*FÐ*Fr   é   c                 ó   — g | ]
}|d          ‘ŒS )Úwbs_coder.   r/   s     r   r2   zNTestProjectCrudAndWbsService.test_ai_wbs_generator_service.<locals>.<listcomp>/   s   € Ð6Ð6Ð6¨$�T˜*Ô%Ð6Ð6Ð6r   z1.0z2.0z3.0z4.0z2.1N)r   Úgenerate_timeline_and_wbsÚassertInr   ÚlenÚassertGreaterEqual)r   ÚresultÚwbsÚphasesÚ	wbs_codess        r   Útest_ai_wbs_generator_servicez:TestProjectCrudAndWbsService.test_ai_wbs_generator_service   sr  € à”×:Ò:ØKØ4Ø'Ø#Øð $nð ;ñ 
ô 
ˆð 	�Š�k 6Ñ*Ô*Ð*Ø�Š�l FÑ+Ô+Ð+Ø×Ò˜Ð 5Ô6¸Ñ<Ô<Ð<Ø×Ò˜Ð 4Ô5°vÑ>Ô>Ð>à�[Ô!ˆØGÐG 3ÐGÑGÔGˆØ×Ò�˜V™œ aÑ(Ô(Ð(ð 7Ð6°#Ð6Ñ6Ô6ˆ	Ø�Š�e˜YÑ'Ô'Ð'Ø�Š�e˜YÑ'Ô'Ð'Ø�Š�e˜YÑ'Ô'Ð'Ø�Š�e˜YÑ'Ô'Ð'Ø�Š�e˜YÑ'Ô'Ð'ð 	×Ò¥ F¨<Ô$8Ñ 9Ô 9¸1Ñ=Ô=Ð=Ð=Ð=r   c                 óò  — d„ | j         j        t          <   | j                             d¦  «        }|                      |j        d¦  «         |                     ¦   «         }|                      |t          ¦  «         | j         
                    dddddd	d
dœ¬¦  «        }|                      |j        d¦  «         |                     ¦   «         }|d         }| j         
                    ddddddddddd	d|dœ¬¦  «        }|                      |j        d¦  «         |                     ¦   «         }ddl}t          ddd¬¦  «                             |                     |d¬¦  «        ¦  «         |d         }	|                      |d         d¦  «         |                      t          |d         ¦  «        d ¦  «         | j                             d!|	› �¦  «        }
|                      |
j        d¦  «         |
                     ¦   «         }|                      |d"         d¦  «         |                      d#|¦  «         |                      d$|¦  «         | j                             d!|	› �d%d&d'œ¬¦  «        }|                      |j        d¦  «         |                     ¦   «         }|                      |d(         d%¦  «         | j         
                    d!|	› d)�d*d+d,d-d.d/d0d1d%d2d3d4œ¬¦  «        }|                      |j        d¦  «         |                     ¦   «         }|d         }| j                             d5|› �d6d7d8d9œ¬¦  «        }|                      |j        d¦  «         |                      |                     ¦   «         d:         d7¦  «         | j                             d5|› �¦  «        }|                      |j        d¦  «         | j                             d!|	› �¦  «        }|                      |j        d¦  «         dS );uA   Kiá»ƒm thá»­ vÃ²ng Ä‘á»�i CRUD dá»± Ã¡n vÃ  quáº£n lÃ½ WBS tasks.c                  ó   — ddddœS )Nzadmin-idzadmin@dscons.vnÚ
superadmin)ÚidÚemailÚroler.   r.   r   r   ú<lambda>zOTestProjectCrudAndWbsService.test_full_project_crud_lifecycle.<locals>.<lambda>;   s   € ØØ&Ø ðC
ð C
€ r   r   éÈ   z /v1/erp/projects/ai-generate-wbsu    NhÃ  Ä‘iá»�u hÃ nh KCN SÃ´ng LÃ´u   DÃ¢n dá»¥ng & CÃ´ng nghiá»‡pg   ÐˆÃðAz
2026-10-01éx   u>   Háº¡ng má»¥c káº¿t cáº¥u mÃ³ng vÃ  hoÃ n thiá»‡n nhÃ  3 táº§ngr   )Újsonr&   zDA-SONGLO-2026u   Ban QLDA KCN SÃ´ng LÃ´u   VÄ©nh PhÃºcg   @ÝJïAu   09.1/2026/HÄ�-SLÚplanning)Úproject_coder    Úclient_nameÚlocationr!   Úbudget_amountr"   r#   Úcontract_numberÚcontract_duration_daysÚstatusr&   éÉ   r   Nz	dump.jsonÚwzutf-8)ÚencodingF)Úensure_asciirB   rJ   é
   z/v1/erp/projects/r    Úwbs_treer'   Úin_progressu-   Ä�Ã£ khá»Ÿi cÃ´ng sau khi phÃª duyá»‡t KHLCNT)rP   ÚnotesrP   z/wbsz2.5u<   ThÃ­ nghiá»‡m kiá»ƒm tra Ä‘á»™ nÃ©n tÄ©nh cá»�c khoan nhá»“iÚtasku   Ä�iá»ƒmé   g    8œlAg    *u…Ar3   é2   u%   Ä�Æ¡n vá»‹ thÃ­ nghiá»‡m Ä‘á»™c láº­p)r5   Ú	task_namer,   ÚunitÚquantityÚunit_price_vndÚtotal_amount_vndr$   rP   Úprogress_percentÚassigned_rolez/v1/erp/projects/wbs/Ú	completedéd   u&   Ä�áº¡t cÆ°á»�ng Ä‘á»™ thiáº¿t káº¿ R28)rP   ra   rX   ra   )r   r   r   r   r   r   r   rH   ÚassertIsInstanceÚlistÚpostÚopenÚwriteÚdumpsr9   r8   r7   ÚputÚdelete)r   r   Úinitial_projectsÚai_resÚai_dataÚgenerated_wbsÚ
create_resÚcreatedrH   Ú
project_idÚ
detail_resÚdetailÚ
update_resÚupdatedÚwbs_add_resÚnew_wbsÚwbs_idÚ
wbs_up_resÚwbs_del_resÚdel_ress                       r   Ú test_full_project_crud_lifecyclez=TestProjectCrudAndWbsService.test_full_project_crud_lifecycle9   sw  € ð;
ð ;
ˆŒÔ%Õ&6Ñ7ð Œk�oŠoÐ0Ñ1Ô1ˆØ×Ò˜œ¨#Ñ.Ô.Ð.ØŸ8š8™:œ:ÐØ×ÒÐ.µÑ5Ô5Ð5ð ”×!Ò!Ø.à BØ >Ø".Ø*Ø!$Ø*jðð ð "ñ 

ô 

ˆð 	×Ò˜Ô+¨SÑ1Ô1Ð1Ø—+’+‘-”-ˆØ Ô,ˆð ”[×%Ò%Øà 0Ø BØ7Ø)Ø >Ø!-Ø".Ø*Ø#5Ø*-Ø$Ø*ðð ð &ñ 
ô 
ˆ
ð" 	×Ò˜Ô/°Ñ5Ô5Ð5Ø—/’/Ñ#Ô#ˆ [ [ [ [µ$°{ÀCÐRYÐ2ZÑ2ZÔ2Z×2`Ò2`Ðae×akÒakÐlsð  CHÐakñ  bIô  bIñ  3Jô  3Jð  3JØ˜T”]ˆ
Ø×Ò˜ Ô0Ð2BÑCÔCÐCØ×Ò¥ G¨KÔ$8Ñ 9Ô 9¸2Ñ>Ô>Ð>ð ”[—_’_Ð%E¸Ð%EÐ%EÑFÔFˆ
Ø×Ò˜Ô/°Ñ5Ô5Ð5Ø—’Ñ"Ô"ˆØ×Ò˜ Ô/Ð1SÑTÔTÐTØ�Š�j &Ñ)Ô)Ð)Ø�Š�l FÑ+Ô+Ð+ð ”[—_’_Ø, 
Ð,Ð,à'ØHðð ð %ñ 
ô 
ˆ
ð 	×Ò˜Ô/°Ñ5Ô5Ð5Ø—/’/Ñ#Ô#ˆØ×Ò˜ Ô*¨MÑ:Ô:Ð:ð ”k×&Ò&Ø0 
Ð0Ð0Ð0à!Ø[Ø#Ø!ØØ",Ø$.Ø!"Ø'Ø$&Ø!Hðð ð 'ñ 
ô 
ˆð  	×Ò˜Ô0°#Ñ6Ô6Ð6Ø×"Ò"Ñ$Ô$ˆØ˜”ˆð ”[—_’_Ø, FÐ,Ð,à%Ø$'ØAðð ð %ñ 
ô 
ˆ
ð 	×Ò˜Ô/°Ñ5Ô5Ð5Ø×Ò˜ŸšÑ*Ô*Ð+=Ô>ÀÑDÔDÐDð ”k×(Ò(Ð)IÀÐ)IÐ)IÑJÔJˆØ×Ò˜Ô0°#Ñ6Ô6Ð6ð ”+×$Ò$Ð%E¸Ð%EÐ%EÑFÔFˆØ×Ò˜Ô,¨cÑ2Ô2Ð2Ð2Ð2r   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r>   r~   r.   r   r   r   r      sd   € € € € € ð2ð 2ð 2ð
+ð +ð +ð/ð /ð /ð
>ð >ð >ð>q3ð q3ð q3ð q3ð q3r   r   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚfastapi.testclientr   Ú"app.modules.auth.presentation.authr   Úapp.mainr   Ú5app.modules.core.application.ai_wbs_generator_servicer   ÚTestCaser   r   Úmainr.   r   r   ú<module>r‘      sÒ   ðØ \Ð \à  € € € € € € € € € € € € €€€€à )Ð )Ð )Ð )Ð )Ð )à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø Ð Ð Ð Ð Ð Ø WÐ WÐ WÐ WÐ WÐ Wð^3ð ^3ð ^3ð ^3ð ^3 8Ô#4ñ ^3ô ^3ð ^3ðB ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   