§
     ’j]1  ã                   ó€  — 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
  G d„ d¦  «        Z G d„ de¦  «        Z G d„ d	¦  «        Z G d
„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ d¦  «        Z G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )é    N©ÚSimpleNamespace)ÚCompanyOperationalStateServicec                   ó"   — e Zd Zdd„Zd„ Zd„ ZdS )ÚStubPostgresClientNTc                 ó*   — |�|ng | _         || _        d S ©N)Ú	_sessionsÚ_enabled)ÚselfÚsessionsÚenableds      úBC:\Projects\DSCons\tests\test_company_operational_state_service.pyÚ__init__zStubPostgresClient.__init__
   s   € Ø%-Ð%9˜˜¸rˆŒØˆŒˆˆó    c                 ó   — | j         S r	   )r   ©r   s    r   Ú
is_enabledzStubPostgresClient.is_enabled   s
   € ØŒ}Ðr   c                 ó*   — t          | j        ¦  «        S r	   )Úlistr
   r   s    r   Úfetch_dossier_review_sessionsz0StubPostgresClient.fetch_dossier_review_sessions   s   € Ý�D”NÑ#Ô#Ð#r   )NT)Ú__name__Ú
__module__Ú__qualname__r   r   r   © r   r   r   r   	   sF   € € € € € ð ð  ð  ð  ðð ð ð$ð $ð $ð $ð $r   r   c                   ó   — e Zd Zd„ ZdS )Ú"FailingDossierReviewPostgresClientc                 ó    — t          d¦  «        ‚)Núdossier-reviews-unavailable©ÚRuntimeErrorr   s    r   r   z@FailingDossierReviewPostgresClient.fetch_dossier_review_sessions   s   € ÝÐ8Ñ9Ô9Ð9r   N)r   r   r   r   r   r   r   r   r      s#   € € € € € ð:ð :ð :ð :ð :r   r   c                   ó   — e Zd Zd„ ZdS )ÚStubProjectManagementServicec                 ó¼   — t          ddddd¬¦  «        }t          ddd	dd d
¬¦  «        }t          ddddddddd|g|gg g g g ¬¦  «        }t          |gddd ¬¦  «        S )Nu   Thiáº¿u há»“ sÆ¡ phÃ¡p lÃ½ÚhighÚopenÚlegalu&   Bá»• sung quyáº¿t Ä‘á»‹nh phÃª duyá»‡t)ÚtitleÚseverityÚstatusÚownerÚ
mitigationu    Theo dÃµi tiáº¿n Ä‘á»™ bá»• sungÚNV001Úpendingu   Cáº§n theo dÃµi hÃ ng ngÃ y)r(   Úassigneer*   ÚpriorityÚdue_dateÚnoteúPRJ-001úDinh SonzClient Az	Kien MinhÚPM001ÚactiveÚimplementationé7   Úon_track)Úproject_codeÚproject_nameÚclient_nameÚlocationÚproject_managerr*   Úcurrent_phaseÚoverall_progress_percentÚbudget_statusÚrisksÚupcoming_tasksÚ
milestonesÚphase_progressÚtimelineÚsummary_cardsÚpostgresF©ÚitemsÚsourceÚused_fallbackÚmessager   )r   ÚriskÚtaskÚprojects       r   Úget_project_management_dataz8StubProjectManagementService.get_project_management_data   s»   € ÝØ.ØØØØ?ð
ñ 
ô 
ˆõ Ø4ØØØØØ.ð
ñ 
ô 
ˆõ "Ø"Ø#Ø"Ø Ø#ØØ*Ø%'Ø$Ø�&Ø ˜6ØØØØð
ñ 
ô 
ˆõ" Ø�)ØØØð	
ñ 
ô 
ð 	
r   N©r   r   r   rQ   r   r   r   r#   r#      s#   € € € € € ð&
ð &
ð &
ð &
ð &
r   r#   c                   ó   — e Zd Zd„ ZdS )ÚStubEmployeeLogsServicec                 óJ   — t          d¬¦  «        }t          |gddd ¬¦  «        S )NÚin_progress)r*   rH   FrI   r   )r   Úitems     r   Úget_employee_logsz)StubEmployeeLogsService.get_employee_logsE   s7   € Ý mÐ4Ñ4Ô4ˆÝØ�&ØØØð	
ñ 
ô 
ð 	
r   N)r   r   r   rX   r   r   r   rT   rT   D   s#   € € € € € ð
ð 
ð 
ð 
ð 
r   rT   c                   ó    — e Zd Zd„ Zd„ Zd„ ZdS )Ú&FailingOperationsCaseManagementServicec                 ó    — t          d¦  «        ‚)Núcases-unavailabler    r   s    r   Ú
list_casesz1FailingOperationsCaseManagementService.list_casesP   s   € ÝÐ.Ñ/Ô/Ð/r   c                 ó    — t          d¦  «        ‚)Núactions-unavailabler    r   s    r   Úlist_actionsz3FailingOperationsCaseManagementService.list_actionsS   s   € ÝÐ0Ñ1Ô1Ð1r   c                 ó    — t          d¦  «        ‚)Núblockers-unavailabler    r   s    r   Úlist_blockersz4FailingOperationsCaseManagementService.list_blockersV   ó   € ÝÐ1Ñ2Ô2Ð2r   N)r   r   r   r]   r`   rc   r   r   r   rZ   rZ   O   sA   € € € € € ð0ð 0ð 0ð2ð 2ð 2ð3ð 3ð 3ð 3ð 3r   rZ   c                   ó   — e Zd Zd„ ZdS )Ú!FailingRemediationPlanningServicec                 ó    — t          d¦  «        ‚)Núremediation-unavailabler    r   s    r   Ú
list_plansz,FailingRemediationPlanningService.list_plans[   s   € ÝÐ4Ñ5Ô5Ð5r   N©r   r   r   ri   r   r   r   rf   rf   Z   s#   € € € € € ð6ð 6ð 6ð 6ð 6r   rf   c                   ó   — e Zd Zd„ ZdS )ÚFailingProjectManagementServicec                 ó    — t          d¦  «        ‚)Núprojects-unavailabler    r   s    r   rQ   z;FailingProjectManagementService.get_project_management_data`   rd   r   NrR   r   r   r   rl   rl   _   s#   € € € € € ð3ð 3ð 3ð 3ð 3r   rl   c                   ó$   — e Zd Zddœdeddfd„ZdS )ÚStubRemediationPlanz
F-PLAN-001)Úfinding_coderq   ÚreturnNc                óø   — d| _         d| _        d| _        || _        d| _        d| _        d| _        d| _        d| _        t          dd	g¬
¦  «        | _
        d| _        d| _        d| _        d| _        d | _        d S )Nr3   ú
review-001úfinding-001Údecisionr'   r%   zEMP-001Úblockedzmissing-input)r*   Úblocking_reasonsz/tmp/outzdecision.docxÚderivedF)r:   Úreview_session_idÚ
finding_idrq   Údocument_typeÚdossier_stager0   Úowner_department_codeÚowner_employee_coder   Úreadiness_summaryÚdestination_folderÚoutput_filenamerK   rL   rM   )r   rq   s     r   r   zStubRemediationPlan.__init__e   s“   € Ø%ˆÔØ!-ˆÔØ'ˆŒØ(ˆÔØ'ˆÔØ$ˆÔØˆŒØ%,ˆÔ"Ø#,ˆÔ Ý!0Ø°Ð/@ð"
ñ "
ô "
ˆÔð #-ˆÔØ.ˆÔØˆŒØ"ˆÔØˆŒˆˆr   )r   r   r   Úobjectr   r   r   r   rp   rp   d   sC   € € € € € Ø1=ð ð ð ¨ð À$ð ð ð ð ð ð r   rp   c                   ó   — e Zd Zd„ ZdS )ÚStubRemediationPlanningServicec                 óB   — t          t          ¦   «         gddd ¬¦  «        S )NrH   FrI   )r   rp   r   s    r   ri   z)StubRemediationPlanningService.list_plansz   s.   € ÝÝ&Ñ(Ô(Ð)ØØØð	
ñ 
ô 
ð 	
r   Nrj   r   r   r   r…   r…   y   s#   € € € € € ð
ð 
ð 
ð 
ð 
r   r…   c                   ó>   — e Zd Z	 	 dd„Z	 	 dd„Z	 	 dd„Z	 	 dd„ZdS )Ú#CompanyOperationalStateServiceTestsrr   Nc                 ó.  — t          t          ddddddddd	d
ddddddddddgidœgdœg¬¦  «        t          ¦   «         t          ¦   «         t	          ¦   «         t          ¦   «         ¬¦  «        }|                     ¦   «         }|                      |j        ¦  «         |  	                    |j
        j        d¦  «         |  	                    |j
        j        d¦  «         |  	                    |j
        j        d¦  «         |  	                    t          |j        ¦  «        d¦  «         |  	                    t          |j        ¦  «        d¦  «         |  	                    t          |j        ¦  «        d¦  «         |                      |j
        j        d¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d„ |j        D ¦   «         }|  	                    |d          j        d!¦  «         |                      |d          j        ¦  «         |                      |d          j        ¦  «         |  	                    |d"         j        d!¦  «         |                      |d"         j        ¦  «         |                      |d"         j        ¦  «         |  	                    |d#         j        d!¦  «         |                      |d#         j        ¦  «         |                      |d#         j        ¦  «         |  	                    |d$         j        d!¦  «         |                      |d$         j        ¦  «         |                      |d$         j        ¦  «         d S )%Nrt   zRVW-001r3   r4   Úproject_dossierÚsystemÚassignedru   zF-001u   Thiáº¿u quyáº¿t Ä‘á»‹nhÚ
complianceÚmissing_documentr%   r&   r.   z2026-04-03T09:00:00Zr'   rx   u&   ChÆ°a cÃ³ quyáº¿t Ä‘á»‹nh phÃª duyá»‡t)r{   rq   r(   Úfinding_groupÚfinding_typer)   Úimpact_levelr*   Úsupplement_statusÚdetected_atÚresponsible_department_codeÚmetadata)Ú	review_idÚreview_coder:   r;   Údossier_scopeÚtrigger_sourcer*   Úfindings)r   )Úpostgres_clientÚproject_management_serviceÚemployee_logs_serviceÚ"operations_case_management_serviceÚremediation_planning_serviceé   r   é   r\   r_   rb   rh   c                 ó   — i | ]
}|j         |“ŒS r   ©Úsource_name©Ú.0rW   s     r   ú
<dictcomp>zˆCompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallbacks_when_optional_services_fail.<locals>.<dictcomp>¾   ó*   € ð !
ð !
ð !
Ø'+ˆDÔ˜dð!
ð !
ð !
r   Úoperations_casesÚunavailableÚoperations_actionsÚoperations_blockersÚremediation_plans)r   r   r#   rT   rZ   rf   Úget_company_operational_stateÚ
assertTruerL   ÚassertEqualÚsummaryÚtotal_projectsÚopen_cases_countÚopen_actions_countÚlenÚprojectsrB   Úblocked_itemsÚassertGreaterEqualÚblocked_items_countÚassertInrM   Úsource_statusrK   ÚassertFalseÚ	available©r   ÚserviceÚresponseÚsource_status_by_names       r   ÚPtest_get_company_operational_state_returns_fallbacks_when_optional_services_failztCompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallbacks_when_optional_services_fail„   sÈ  € õ 1Ý.ð &2Ø'0Ø(1Ø(2Ø):Ø*2Ø",ð /<Ø07Ø)BØ1=Ø0BØ,2Ø06Ø*0Ø5>Ø/EØ?Fà$6Ø(Pð9&ð-"ðð ð%ðð ðð ñ  ô  õB (DÑ'EÔ'EÝ"9Ñ";Ô";Ý/UÑ/WÔ/WÝ)JÑ)LÔ)LðK&
ñ &
ô &
ˆðP ×8Ò8Ñ:Ô:ˆà�Š˜Ô.Ñ/Ô/Ð/Ø×Ò˜Ô)Ô8¸!Ñ<Ô<Ð<Ø×Ò˜Ô)Ô:¸AÑ>Ô>Ð>Ø×Ò˜Ô)Ô<¸aÑ@Ô@Ð@Ø×Ò�˜XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜Xœ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×Ò�˜XÔ3Ñ4Ô4°aÑ8Ô8Ð8Ø×Ò Ô 0Ô DÀaÑHÔHÐHØ�ŠÐ)¨8Ô+;Ñ<Ô<Ð<Ø�ŠÐ+¨XÔ-=Ñ>Ô>Ð>Ø�ŠÐ,¨hÔ.>Ñ?Ô?Ð?Ø�ŠÐ/°Ô1AÑBÔBÐBð!
ð !
Ø/7Ô/Eð!
ñ !
ô !
Ðð 	×ÒØ!Ð"4Ô5Ô<¸mñ	
ô 	
ð 	
ð 	�ŠÐ-Ð.@ÔAÔOÑPÔPÐPØ×ÒÐ.Ð/AÔBÔLÑMÔMÐMà×ÒØ!Ð"6Ô7Ô>Àñ	
ô 	
ð 	
ð 	�ŠÐ-Ð.BÔCÔQÑRÔRÐRØ×ÒÐ.Ð/CÔDÔNÑOÔOÐOà×ÒØ!Ð"7Ô8Ô?Àñ	
ô 	
ð 	
ð 	�ŠÐ-Ð.CÔDÔRÑSÔSÐSØ×ÒÐ.Ð/DÔEÔOÑPÔPÐPà×ÒØ!Ð"5Ô6Ô=¸}ñ	
ô 	
ð 	
ð 	�ŠÐ-Ð.AÔBÔPÑQÔQÐQØ×ÒÐ.Ð/BÔCÔMÑNÔNÐNÐNÐNr   c                 ój  — t          t          g ¦  «        t          ¦   «         t          ¦   «         ¬¦  «        }|                     ¦   «         }|                      |j        ¦  «         |                      |j        j	        d¦  «         |                      t          |j        ¦  «        d¦  «         |                      t          |j        ¦  «        d¦  «         |                      t          |j        ¦  «        d¦  «         |                      t          |j        ¦  «        d¦  «         |                      d|j        ¦  «         d„ |j        D ¦   «         }|                      |d         j        d¦  «         |                      |d         j        ¦  «         |                      |d         j        ¦  «         d S )N©r›   rœ   r�   r   rn   c                 ó   — i | ]
}|j         |“ŒS r   r£   r¥   s     r   r§   z’CompanyOperationalStateServiceTests.test_get_company_operational_state_returns_safe_fallback_when_primary_project_source_fails.<locals>.<dictcomp>í   r¨   r   r¶   rª   )r   r   rl   rT   r®   r¯   rL   r°   r±   r²   rµ   r¶   rB   r·   Úbacklogrº   rM   r»   rK   r¼   r½   r¾   s       r   ÚZtest_get_company_operational_state_returns_safe_fallback_when_primary_project_source_failsz~CompanyOperationalStateServiceTests.test_get_company_operational_state_returns_safe_fallback_when_primary_project_source_failsÚ   s•  € õ 1Ý.¨rÑ2Ô2Ý'FÑ'HÔ'HÝ"9Ñ";Ô";ð
ñ 
ô 
ˆð ×8Ò8Ñ:Ô:ˆà�Š˜Ô.Ñ/Ô/Ð/Ø×Ò˜Ô)Ô8¸!Ñ<Ô<Ð<Ø×Ò�˜XÔ.Ñ/Ô/°Ñ3Ô3Ð3Ø×Ò�˜Xœ^Ñ,Ô,¨aÑ0Ô0Ð0Ø×Ò�˜XÔ3Ñ4Ô4°aÑ8Ô8Ð8Ø×Ò�˜XÔ-Ñ.Ô.°Ñ2Ô2Ð2Ø�ŠÐ,¨hÔ.>Ñ?Ô?Ð?ð!
ð !
Ø/7Ô/Eð!
ñ !
ô !
Ðð 	×ÒÐ.¨zÔ:ÔAÀ=ÑQÔQÐQØ�ŠÐ-¨jÔ9ÔGÑHÔHÐHØ×ÒÐ.¨zÔ:ÔDÑEÔEÐEÐEÐEr   c                 ó*  — t          t          ¦   «         t          ¦   «         t          ¦   «         ¬¦  «        }|                     ¦   «         }|                      |j        ¦  «         |                      d|j        ¦  «         d„ |j	        D ¦   «         }|  
                    |d         j        d¦  «         |                      |d         j        ¦  «         |                      |d         j        ¦  «         |  
                    |d         j        d¦  «         d S )NrÄ   r   c                 ó   — i | ]
}|j         |“ŒS r   r£   r¥   s     r   r§   z“CompanyOperationalStateServiceTests.test_get_company_operational_state_marks_dossier_review_source_unavailable_when_fetch_fails.<locals>.<dictcomp>  r¨   r   Údossier_reviewsrª   r   )r   r   r#   rT   r®   r¯   rL   rº   rM   r»   r°   rK   r¼   r½   Úrecord_countr¾   s       r   Ú[test_get_company_operational_state_marks_dossier_review_source_unavailable_when_fetch_failszCompanyOperationalStateServiceTests.test_get_company_operational_state_marks_dossier_review_source_unavailable_when_fetch_failsô   s  € õ 1Ý>Ñ@Ô@Ý'CÑ'EÔ'EÝ"9Ñ";Ô";ð
ñ 
ô 
ˆð ×8Ò8Ñ:Ô:ˆà�Š˜Ô.Ñ/Ô/Ð/Ø�ŠÐ3°XÔ5EÑFÔFÐFð!
ð !
Ø/7Ô/Eð!
ñ !
ô !
Ðð 	×ÒÐ.Ð/@ÔAÔHÈ-ÑXÔXÐXØ�ŠÐ-Ð.?Ô@ÔNÑOÔOÐOØ×ÒÐ.Ð/@ÔAÔKÑLÔLÐLØ×ÒÐ.Ð/@ÔAÔNÐPQÑRÔRÐRÐRÐRr   c                 ó6  — t          t          g ¦  «        t          ¦   «         t          ¦   «         t	          ¦   «         ¬¦  «        }|j        }|j        }|j        }d„ }d„ }d„ }||_        ||_        ||_        	 |                     ¦   «         }||_        ||_        ||_        n# ||_        ||_        ||_        w xY w|  	                    |j
        ¦  «         |                      |j        j        d¦  «         |                      |j        i ¦  «         |                      |j        g ¦  «         |                      |j        g ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         |                      d|j        ¦  «         d S )	N)r›   rœ   r�   rŸ   c                 ó    — t          d¦  «        ‚)Núpolicy-overview-unavailabler    )rÊ   s    r   Úfailing_build_policy_overviewzªCompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallback_optional_payload_when_summary_builders_fail.<locals>.failing_build_policy_overview  ó   € ÝÐ<Ñ=Ô=Ð=r   c                  ó    — t          d¦  «        ‚)Nústate-summaries-unavailabler    )Úkwargss    r   Úfailing_build_state_summarieszªCompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallback_optional_payload_when_summary_builders_fail.<locals>.failing_build_state_summaries  rÑ   r   c                 ó    — t          d¦  «        ‚)Nú$remediation-plan-summary-unavailabler    )rW   s    r   Ú&failing_build_remediation_plan_summaryz³CompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallback_optional_payload_when_summary_builders_fail.<locals>.failing_build_remediation_plan_summary   s   € ÝÐEÑFÔFÐFr   r    rÏ   rÓ   r×   )r   r   r#   rT   r…   Ú_build_policy_overviewÚ_build_state_summariesÚ_build_remediation_plan_summaryr®   r¯   rL   r°   r±   r²   Úpolicy_overviewÚremediation_summaryr­   rº   rM   )	r   r¿   Úoriginal_build_policy_overviewÚoriginal_build_state_summariesÚ'original_build_remediation_plan_summaryrÐ   rÕ   rØ   rÀ   s	            r   Ú_test_get_company_operational_state_returns_fallback_optional_payload_when_summary_builders_failzƒCompanyOperationalStateServiceTests.test_get_company_operational_state_returns_fallback_optional_payload_when_summary_builders_fail
  sÛ  € õ 1Ý.¨rÑ2Ô2Ý'CÑ'EÔ'EÝ"9Ñ";Ô";Ý)GÑ)IÔ)Ið	
ñ 
ô 
ˆð *1Ô)GÐ&Ø)0Ô)GÐ&àÔ3ð 	0ð	>ð 	>ð 	>ð	>ð 	>ð 	>ð	Gð 	Gð 	Gð *GˆÔ&Ø)FˆÔ&Ø2XˆÔ/ð	Ø×<Ò<Ñ>Ô>ˆHà-KˆGÔ*Ø-KˆGÔ*à7ð Ô3Ð3øð .LˆGÔ*Ø-KˆGÔ*à7ð Ô3ð ð ð ð ð 	�Š˜Ô.Ñ/Ô/Ð/Ø×Ò˜Ô)Ô8¸!Ñ<Ô<Ð<Ø×Ò˜Ô1°2Ñ6Ô6Ð6Ø×Ò˜Ô5°rÑ:Ô:Ð:Ø×Ò˜Ô3°RÑ8Ô8Ð8Ø�ŠÐ3°XÔ5EÑFÔFÐFØ�ŠÐ3°XÔ5EÑFÔFÐFØ�ŠÐ<¸hÔ>NÑOÔOÐOÐOÐOs   Á9B# Â#B:)rr   N)r   r   r   rÂ   rÇ   rÌ   rá   r   r   r   rˆ   rˆ   ƒ   s    € € € € € ðTOà	ðTOð TOð TOð TOðlFà	ðFð Fð Fð Fð4Sà	ðSð Sð Sð Sð,-Pà	ð-Pð -Pð -Pð -Pð -Pð -Pr   rˆ   Ú__main__)ÚbuiltinsÚ@py_builtinsÚ_pytest.assertion.rewriteÚ	assertionÚrewriteÚ
@pytest_arÚunittestÚtypesr   ÚDapp.modules.operations.application.company_operational_state_servicer   r   r   r#   rT   rZ   rf   rl   rp   r…   ÚTestCaserˆ   r   Úmainr   r   r   ú<module>rî      s(  ðØ  € € € € € € € € € € € € €€€€Ø !Ð !Ð !Ð !Ð !Ð !ðð ð ð ð ð ð
	$ð 	$ð 	$ð 	$ð 	$ñ 	$ô 	$ð 	$ð:ð :ð :ð :ð :Ð);ñ :ô :ð :ð
'
ð '
ð '
ð '
ð '
ñ '
ô '
ð '
ðT
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ð3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð6ð 6ð 6ð 6ð 6ñ 6ô 6ð 6ð
3ð 3ð 3ð 3ð 3ñ 3ô 3ð 3ð
ð ð ð ð ñ ô ð ð*
ð 
ð 
ð 
ð 
ñ 
ô 
ð 
ðtPð tPð tPð tPð tP¨(Ô*;ñ tPô tPð tPðn ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   