§
    ãã™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 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 )zSAutomated tests for fuel efficiency tracking, dossier generation, and IPC features.é    N)Ú
TestClient)Úget_current_user)ÚProjectCrudRepository)Ú
create_app)ÚDossierGeneratorService)ÚEquipmentEfficiencyServicec                   ó,   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ ZdS )ÚTestAdvancedOperationalFeaturesc                 ó  — t          ¦   «         | _        t          | j        ¦  «        | _        t	          ¦   «         | _        t          | j        ¦  «        | _        t          | j        ¦  «        | _	        d„ }|| j        j
        t          <   d S )Nc                  ó   — ddddœS )Nzadmin-idzadmin@dscons.vnÚ
superadmin)ÚidÚemailÚrole© r   ó    ú>C:\Projects\DSCons\tests\test_advanced_operational_features.pyÚ	mock_userz8TestAdvancedOperationalFeatures.setUp.<locals>.mock_user   s   € Ø$Ð/@È,ÐWÐWÐWr   )r   Úappr   Úclientr   Úrepor   Úefficiency_servicer   Údossier_serviceÚdependency_overridesr   )Úselfr   s     r   ÚsetUpz%TestAdvancedOperationalFeatures.setUp   sz   € Ý‘<”<ˆŒÝ  ¤Ñ*Ô*ˆŒÝ)Ñ+Ô+ˆŒ	Ý"<¸T¼YÑ"GÔ"GˆÔÝ6°t´yÑAÔAˆÔð	Xð 	Xð 	Xð ;DˆŒÔ%Õ&6Ñ7Ð7Ð7r   c                 ó   — i | j         _        d S )N)r   r   )r   s    r   ÚtearDownz(TestAdvancedOperationalFeatures.tearDown   s   € Ø(*ˆŒÔ%Ð%Ð%r   c           	      ó$  — d}| j                              ¦   «         5 }|                     ¦   «         5 }|                     |¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |s|                      d¦  «         t          |d         ¦  «        }| j                             |ddddd	d¬
¦  «        }|  	                    |d         d¦  «         | j         
                    |¦  «        }|                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         |                      d|¦  «         dS )uL   Kiá»ƒm thá»­ ghi nháº­n nhiÃªn liá»‡u vÃ  tÃ­nh toÃ¡n hiá»‡u suáº¥t ca mÃ¡y.zISELECT id, equipment_code, fuel_norm_per_hour FROM erp_equipment LIMIT 1;Nz/No equipment found in database to run fuel testr   z
2026-08-21g      ^@g     ‚Ô@g    à9CAg     Àb@)Úequipment_idÚ	fill_dateÚfuel_quantity_litersÚunit_price_vndÚtotal_cost_vndÚodometer_hoursÚsource_invoice_idÚstatusÚsuccessÚequipment_codeÚfuel_norm_per_hourÚ#average_consumption_liters_per_hourÚefficiency_percentageÚwarning_levelÚ	fuel_logs)r   Úget_connectionÚcursorÚexecuteÚfetchoneÚskipTestÚstrr   Úrecord_fuel_logÚassertEqualÚget_equipment_efficiencyÚassertIn)r   ÚsqlÚconnÚcurÚequipÚequip_idÚresÚmetricss           r   Ú test_record_fuel_log_and_metricsz@TestAdvancedOperationalFeatures.test_record_fuel_log_and_metrics   s  € ð Xð 	ð ŒY×%Ò%Ñ'Ô'ð 	#¨4°·²±´ð 	#À#Ø�KŠK˜ÑÔÐØ—L’L‘N”NˆEð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð ð 	MØ�MŠMÐKÑLÔLÐLå�u˜T”{Ñ#Ô#ˆð Ô%×5Ò5Ø!Ø"Ø!&Ø"Ø$Ø Ø"ð 6ñ 
ô 
ˆð 	×Ò˜˜Xœ¨	Ñ2Ô2Ð2ð Ô)×BÒBÀ8ÑLÔLˆØ�ŠÐ&¨Ñ0Ô0Ð0Ø�ŠÐ*¨GÑ4Ô4Ð4Ø�ŠÐ;¸WÑEÔEÐEØ�ŠÐ-¨wÑ7Ô7Ð7Ø�Š�o wÑ/Ô/Ð/Ø�Š�k 7Ñ+Ô+Ð+Ð+Ð+ó4   œA>±*A'ÁA>Á'A+	Á+A>Á.A+	Á/A>Á>BÂBc                 ó^  — d}| j                              ¦   «         5 }|                     ¦   «         5 }|                     |¦  «         |                     ¦   «         }ddd¦  «         n# 1 swxY w Y   ddd¦  «         n# 1 swxY w Y   |s|                      d¦  «         t          |d         ¦  «        }| j                             |¦  «        }|  	                    |d         d¦  «         |  
                    d|¦  «         |  
                    d|¦  «         |  
                    d	|¦  «         dS )
uJ   Kiá»ƒm thá»­ sinh biá»ƒu máº«u KCS Ä‘iá»�n sáºµn thÃ´ng tin há»£p Ä‘á»“ng.z/SELECT id FROM dossier_review_findings LIMIT 1;NzLNo dossier review findings found in database to run template generation testr   r'   r(   ÚfilenameÚdownload_urlÚcontent_type)r   r/   r0   r1   r2   r3   r4   r   Úgenerate_dossier_templater6   r8   )r   r9   r:   r;   ÚfindingÚ
finding_idr>   s          r   Ú test_dossier_template_generationz@TestAdvancedOperationalFeatures.test_dossier_template_generationC   s˜  € ð @ˆØŒY×%Ò%Ñ'Ô'ð 	%¨4°·²±´ð 	%À#Ø�KŠK˜ÑÔÐØ—l’l‘n”nˆGð	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%ñ 	%ô 	%ð 	%ð 	%ð 	%ð 	%ð 	%ð 	%øøøð 	%ð 	%ð 	%ð 	%ð ð 	Ø�MŠMØ^ñô ð õ ˜ œÑ'Ô'ˆ
ð Ô"×<Ò<¸ZÑHÔHˆØ×Ò˜˜Xœ¨	Ñ2Ô2Ð2Ø�Š�j #Ñ&Ô&Ð&Ø�Š�n cÑ*Ô*Ð*Ø�Š�n cÑ*Ô*Ð*Ð*Ð*rA   c           	      ó,  — | j                              ¦   «         }|s|                      d¦  «         t          |d         d         ¦  «        }| j                             d|› d�¦  «        }|                      |j        d¦  «         |                      | 	                    ¦   «         t          ¦  «         d}	 dd	d
ddddddœ}| j                             d|› d�|¬¦  «        }|                      |j        d¦  «         |                      | 	                    ¦   «         d         d¦  «         | 	                    ¦   «                              d¦  «        }| j                              ¦   «         5 }|                     ¦   «         5 }|r|                     d|f¦  «         |                     d¦  «         |                     ¦   «          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 # | j                              ¦   «         5 }|                     ¦   «         5 }|r|                     d|f¦  «         |                     d¦  «         |                     ¦   «          ddd¦  «         n# 1 swxY w Y   ddd¦  «         w # 1 swxY w Y   w xY w)u:   Kiá»ƒm thá»­ REST API endpoints má»›i cho ca mÃ¡y vÃ  IPC.z4No projects found in database to run API routes testr   r   z/v1/erp/advanced/projects/z/ipcséÈ   Ni'  z
2026-08-01z
2026-08-20g    €„.Ag     jø@g     jè@g     ð)AÚdraft)Ú
ipc_numberÚbilling_period_startÚbilling_period_endÚgross_claimed_amount_vndÚadvance_recovery_amount_vndÚretention_withheld_amount_vndÚnet_certified_amount_vndr'   )ÚjsonéÉ   r'   r(   Úipc_idz*DELETE FROM erp_project_ipcs WHERE id = %sz4DELETE FROM erp_project_ipcs WHERE ipc_number = 9999)r   Úlist_projectsr3   r4   r   Úgetr6   Ústatus_codeÚassertIsInstancerT   ÚlistÚpostr/   r0   r1   Úcommit)	r   ÚprojectsÚ
project_idr>   rV   ÚpayloadÚ
res_creater:   r;   s	            r   Útest_api_routes_fuel_and_ipcsz=TestAdvancedOperationalFeatures.test_api_routes_fuel_and_ipcsY   s|  € ð ”9×*Ò*Ñ,Ô,ˆØð 	RØ�MŠMÐPÑQÔQÐQÝ˜ !œ TÔ*Ñ+Ô+ˆ
ð Œk�oŠoÐL¸:ÐLÐLÐLÑMÔMˆØ×Ò˜œ¨#Ñ.Ô.Ð.Ø×Ò˜cŸhšh™jœj­$Ñ/Ô/Ð/ð ˆð	à"Ø(4Ø&2Ø,5Ø/7Ø18Ø,4Ø!ð	ð 	ˆGð œ×)Ò)Ø>¨ZÐ>Ð>Ð>ÀWð *ñ ô ˆJð ×Ò˜ZÔ3°SÑ9Ô9Ð9Ø×Ò˜ZŸ_š_Ñ.Ô.¨xÔ8¸)ÑDÔDÐDØ—_’_Ñ&Ô&×*Ò*¨8Ñ4Ô4ˆFà”×)Ò)Ñ+Ô+ð ¨t°T·[²[±]´]ð ÀcØð YØ—K’KÐ LÈvÈiÑXÔXÐXØ—’ÐRÑSÔSÐSØ—’‘”�ð	ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð ø�”×)Ò)Ñ+Ô+ð ¨t°T·[²[±]´]ð ÀcØð YØ—K’KÐ LÈvÈiÑXÔXÐXØ—’ÐRÑSÔSÐSØ—’‘”�ð	ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð øøøs�   Â5BG2 Å)G%Å>AGÇG%ÇG	ÇG%ÇG	ÇG%Ç%G)Ç,G)Ç2JÈJÈ!AI0	É$JÉ0I4É4JÉ7I4É8JÉ;JÊJÊJÊJÊJN)Ú__name__Ú
__module__Ú__qualname__r   r   r@   rI   rb   r   r   r   r
   r
      sc   € € € € € ðDð Dð Dð+ð +ð +ð",ð ",ð ",ðH+ð +ð +ð,%ð %ð %ð %ð %r   r
   Ú__main__)Ú__doc__ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚfastapi.testclientr   Ú"app.modules.auth.presentation.authr   Ú)app.core.postgres.project_crud_repositoryr   Úapp.mainr   Ú9app.modules.dossier.application.dossier_generator_servicer   Ú?app.modules.operations.application.equipment_efficiency_servicer   ÚTestCaser
   rc   Úmainr   r   r   ú<module>rw      sö   ðØ YÐ Yà  € € € € € € € € € € € € €€€€à )Ð )Ð )Ð )Ð )Ð )à ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø KÐ KÐ KÐ KÐ KÐ KØ Ð Ð Ð Ð Ð Ø ]Ð ]Ð ]Ð ]Ð ]Ð ]Ø fÐ fÐ fÐ fÐ fÐ fðpð pð pð pð p hÔ&7ñ pô pð pðf ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   