§
    DÔÀjÑ  ã                   ó&  — d Z ddlZddlZddlmZ  ee¦  «                             ¦   «         j        d         Zej	         
                    d ee¦  «        ¦  «         ddlmZmZmZ  G d„ dej        ¦  «        Zedk    r ej        ¦   «          dS dS )	z˜
Unit test suite for FreeExile Marketing Infrastructure.
Ensures document existence, hygiene standards, 9-language parity,
and CLI dashboard integrity.
é    N)ÚPathé   )ÚMarketingHubManagerÚREQUIRED_LANGUAGESÚCORE_MARKETING_FILESc                   óB   — e Zd ZdZd
d„Zd
d„Zd
d„Zd
d„Zd
d„Zd
d	„Z	dS )ÚTestMarketingPipelinez8Test suite for validating the entire marketing pipeline.ÚreturnNc                 ó8   — t          t          ¦  «        | _        d S )N)r   ÚROOT_DIRÚmanager)Úselfs    ú@C:\Projects\FreeExile\marketing\tools\test_marketing_pipeline.pyÚsetUpzTestMarketingPipeline.setUp   s   € Ý*­8Ñ4Ô4ˆŒˆˆó    c                 óÈ   — | j                              ¦   «         }|                      |d         d|d         › �¦  «         |                      |d         |d         d¦  «         dS )zGEvery core document defined in CORE_MARKETING_FILES must exist on disk.Ú
all_passedzDocuments failed audit: ÚdetailsÚpassed_itemsÚtotal_itemsz-Not all marketing documents passed the audit.N)r   Úaudit_documentsÚ
assertTrueÚassertEqual)r   Ú	audit_ress     r   Ú"test_all_marketing_documents_existz8TestMarketingPipeline.test_all_marketing_documents_exist   sz   € à”L×0Ò0Ñ2Ô2ˆ	Ø�ŠØ�lÔ#Ø= y°Ô';Ð=Ð=ñ	
ô 	
ð 	
ð 	×ÒØ�nÔ%Ø�mÔ$Ø;ñ	
ô 	
ð 	
ð 	
ð 	
r   c           
      óH  — t           D ]™}t          |j        z  }|                      |                     ¦   «         d|j        › �¦  «         t          |                     d¬¦  «                             ¦   «         ¦  «        }|                      |dd|j        › d|› d�¦  «         ŒšdS )	z2Markdown files must respect the 500-line hard cap.zFile missing: úutf-8©Úencodingiô  zFile z  exceeds hard cap of 500 lines (z lines).N)	r   r   Útarget_pathr   ÚexistsÚlenÚ	read_textÚ
splitlinesÚassertLessEqual)r   ÚitemÚ	file_pathÚ
line_counts       r   Útest_markdown_hygiene_line_capsz5TestMarketingPipeline.test_markdown_hygiene_line_caps+   sº   € å(ð 	ð 	ˆDÝ  4Ô#3Ñ3ˆIØ�OŠO˜I×,Ò,Ñ.Ô.Ð0SÀÔAQÐ0SÐ0SÑTÔTÐTÝ˜Y×0Ò0¸'Ð0ÑBÔB×MÒMÑOÔOÑPÔPˆJØ× Ò ØØØ^˜Ô(Ð^Ð^È*Ð^Ð^Ð^ñô ð ð ð		ð 	r   c                 óú   — | j                              ¦   «         }|                      |d         d|                     d¦  «        › �¦  «         |                      |d         t          t          ¦  «        d¦  «         dS )z2Store pitches must feature all 9 target languages.Úsuccessz$Missing languages in store pitches: Úmissing_languagesÚlanguages_foundz2Expected exactly 9 languages in the store pitches.N)r   Úverify_localization_parityr   Úgetr   r"   r   )r   Úloc_ress     r   Útest_9_language_parityz,TestMarketingPipeline.test_9_language_parity7   s‡   € à”,×9Ò9Ñ;Ô;ˆØ�ŠØ�IÔØU°7·;²;Ð?RÑ3SÔ3SÐUÐUñ	
ô 	
ð 	
ð 	×ÒØÐ%Ô&ÝÕ"Ñ#Ô#Ø@ñ	
ô 	
ð 	
ð 	
ð 	
r   c                 óŽ   — t           dz  }|                     d¬¦  «        }g d¢}|D ]}|                      ||d|› d�¦  «         ŒdS )z4Roster must define all 6 dedicated marketing agents.zmarketing/ROSTER.mdr   r   )Úmarketing_leadÚviral_content_creatorÚarpg_outreach_scoutÚcommunity_builderÚstorefront_optimizerÚglobal_localization_przAgent z! not found in marketing/ROSTER.mdN)r   r#   ÚassertIn)r   Úroster_pathÚcontentÚexpected_agentsÚagent_ids        r   Útest_roster_contains_all_agentsz5TestMarketingPipeline.test_roster_contains_all_agentsD   s~   € åÐ!6Ñ6ˆØ×'Ò'°Ð'Ñ9Ô9ˆð
ð 
ð 
ˆð (ð 	ð 	ˆHØ�MŠMØØØD˜ÐDÐDÐDñô ð ð ð	ð 	r   c                 óf   — | j                              ¦   «         }|                      |dd¦  «         dS )z7MarketingHubManager must run cleanly and return code 0.r   z-Dashboard execution returned non-zero status.N)r   Úprint_dashboardr   )r   Úcodes     r   Útest_hub_manager_executionz0TestMarketingPipeline.test_hub_manager_executionW   s4   € àŒ|×+Ò+Ñ-Ô-ˆØ×Ò˜˜qÐ"QÑRÔRÐRÐRÐRr   )r
   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r)   r1   r>   rB   © r   r   r	   r	      s˜   € € € € € ØBÐBð5ð 5ð 5ð 5ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ð
ð 
ð 
ð 
ðð ð ð ð&Sð Sð Sð Sð Sð Sr   r	   Ú__main__)rF   ÚsysÚunittestÚpathlibr   Ú__file__ÚresolveÚparentsr   ÚpathÚinsertÚstrÚ%marketing.tools.marketing_hub_managerr   r   r   ÚTestCaser	   rC   ÚmainrG   r   r   ú<module>rU      s  ððð ð €
€
€
Ø €€€Ø Ð Ð Ð Ð Ð ð ˆ4�‰>Œ>×!Ò!Ñ#Ô#Ô+¨AÔ.€Ø „‡‚��3�3�x‘=”=Ñ !Ô !Ð !ðð ð ð ð ð ð ð ð ð ðBSð BSð BSð BSð BS˜HÔ-ñ BSô BSð BSðJ ˆzÒÐØ€H„M�O„O€O€O€Oð Ðr   