§
    ZnÞjU  ã                  ó„  — d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	 ddl
mZmZ ddlmZ ej                             dd	¦  «                             d
¦  «        Z ee¦  «                             ¦   «         j        d         ZdZdZg e¢e¢R Zdd„Z G d„ dej        ¦  «        Zedk    r ej        d¬¦  «         dS dS )z=Regression tests for the bilingual/no-JS production contract.é    )ÚannotationsN)ÚPath)Ú	HTTPError)ÚRequestÚurlopen)ÚBeautifulSoupÚCOSMOS_BASE_URLz https://www.cosmosluminosity.comú/é   )	Ú zmagic-cloud/zaudioboosts/z	gateways/zportal/zcosmos-cacao/z	lumoside/zprivacy/zcontact/)zwebinar/zterms/zrefund-policy/ÚpathÚstrÚreturnútuple[int, str]c                ó~  — t          t          › d| › �ddi¬¦  «        }	 t          |d¬¦  «        5 }|j        |                     ¦   «                              d¦  «        fcd d d ¦  «         S # 1 swxY w Y   d S # t          $ r:}|j        |                     ¦   «                              dd¬	¦  «        fcY d }~S d }~ww xY w)
Nr
   z
User-AgentzCosmosReleaseRegression/1.0)Úheadersé   )Útimeoutúutf-8Úreplace)Úerrors)r   ÚBASE_URLr   ÚstatusÚreadÚdecoder   Úcode)r   ÚrequestÚresponseÚerrors       ú^/home/spazio/cosmosluminosity-releases/20261026T081330Z/source/tests/test_bilingual_release.pyÚfetchr!      s/  € Ý�Ð*Ð* DÐ*Ð*°\ÐC`Ð4aÐbÑbÔb€GðJÝ�W bÐ)Ñ)Ô)ð 	D¨XØ”? H§M¢M¡O¤O×$:Ò$:¸7Ñ$CÔ$CÐCð	Dð 	Dð 	Dð 	Dñ 	Dô 	Dð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døøøð 	Dð 	Dð 	Dð 	Dð 	Dð 	Døåð Jð Jð JØŒz˜5Ÿ:š:™<œ<×.Ò.¨w¸yÐ.ÑIÔIÐIÐIÐIÐIÐIÐIÐIøøøøðJøøøs@   ŸA8 °.A+ÁA8 Á+A/Á/A8 Á2A/Á3A8 Á8
B<Â/B7Â1B<Â7B<c                  óF   — e Zd Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	d
S )ÚBilingualReleaseTestsr   ÚNonec                óŽ  — t           D �]»}|                      |pd¬¦  «        5  t          d|› �¦  «        \  }}|                      |d¦  «         t	          |d¦  «        }|                      |j                             d¦  «        d¦  «         |                      |                     d¦  «        d	         d
¦  «         |                     d¦  «        }|                      |¦  «         |                      |d         t          › d|› �¦  «         |  
                    |                     d¦  «        ¦  «         |  
                    |                     d¦  «        ¦  «         |                      t          j        d|                     d¦  «                             dd¬¦  «        ¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   �Œ½d S )Nr
   ©Úroutezen/éÈ   úhtml.parserÚlangÚenzmeta[property="og:locale"]ÚcontentÚen_USzlink[rel="canonical"]Úhrefú/en/z$link[rel="alternate"][hreflang="ru"]z$link[rel="alternate"][hreflang="en"]õ   [Ð�-Ð¯Ð°-Ñ�Ð�Ñ‘]Úh1Ú T©Ústrip)ÚROUTESÚsubTestr!   ÚassertEqualr   ÚhtmlÚgetÚ
select_oneÚassertIsNotNoner   Ú
assertTrueÚassertFalseÚreÚsearchÚget_text)Úselfr'   r   r8   ÚsoupÚ	canonicals         r    Ú9test_every_english_route_is_server_rendered_and_canonicalzOBilingualReleaseTests.test_every_english_route_is_server_rendered_and_canonical)   s÷  € Ýð 	rñ 	rˆEØ—’ E L¨S�Ñ1Ô1ð rð rÝ$ ]¨5 ] ]Ñ3Ô3‘�˜Ø× Ò  ¨Ñ-Ô-Ð-Ý$ T¨=Ñ9Ô9�Ø× Ò  ¤§¢¨vÑ!6Ô!6¸Ñ=Ô=Ð=Ø× Ò  §¢Ð1MÑ!NÔ!NÈyÔ!YÐ[bÑcÔcÐcØ ŸOšOÐ,CÑDÔD�	Ø×$Ò$ YÑ/Ô/Ð/Ø× Ò  ¨6Ô!2µxÐ4LÐ4LÀUÐ4LÐ4LÑMÔMÐMØ—’ §¢Ð0VÑ WÔ WÑXÔXÐXØ—’ §¢Ð0VÑ WÔ WÑXÔXÐXØ× Ò ¥¤Ð+>ÀÇÂÐPTÑ@UÔ@U×@^Ò@^Ð_bÐjnÐ@^Ñ@oÔ@oÑ!pÔ!pÑqÔqÐqðrð rð rñ rô rð rð rð rð rð rð røøøð rð rð rð rùð	rð 	rs   £F	F8Æ8F<	Æ?F<	c                óŒ  — t          d¦  «        \  }}|                      |d¦  «         t          |d¦  «        }|j                             dd¬¦  «        }|                     d¦  «        d         }|                      d	|¦  «         |                      d
|                     ¦   «         ¦  «         |                      |d¦  «         d S )Nzen/magic-cloud/r(   r)   r2   Tr3   zmeta[name="description"]r,   zMagic CloudÚsymbolicuX   Cosmos Luminosity â€” practices for thinking, state and body that support living choice.)	r!   r7   r   Útitler@   r:   ÚassertInÚlowerÚassertNotEqual)rA   r   r8   rB   rG   Údescriptions         r    Ú<test_english_product_metadata_is_specific_without_javascriptzRBilingualReleaseTests.test_english_product_metadata_is_specific_without_javascript8   sÍ   € ÝÐ.Ñ/Ô/‰ˆ�Ø×Ò˜ Ñ%Ô%Ð%Ý˜T =Ñ1Ô1ˆØ”
×#Ò# C¨tÐ#Ñ4Ô4ˆØ—o’oÐ&@ÑAÔAÀ)ÔLˆØ�Š�m UÑ+Ô+Ð+Ø�Š�j +×"3Ò"3Ñ"5Ô"5Ñ6Ô6Ð6Ø×Ò˜Kð  *Dñ  	Eô  	Eð  	Eð  	Eð  	Eó    c                óÆ   — t           dz                       d¬¦  «        }|                      |d¦  «         |                      |d¦  «         |                      |d¦  «         d S )Núdefault.hbsr   ©Úencodingz$<noscript>[\s\S]*class=\"no-js-nav\"z2<noscript>[\s\S]*\.menu-toggle\s*\{\s*display:nonez'<noscript>[\s\S]*href=\"/magic-cloud/\")ÚROOTÚ	read_textÚassertRegex)rA   Údefaults     r    Ú4test_source_defines_no_js_mobile_navigation_fallbackzJBilingualReleaseTests.test_source_defines_no_js_mobile_navigation_fallbackB   sh   € Ý˜-Ñ'×2Ò2¸GÐ2ÑDÔDˆØ×Ò˜Ð"IÑJÔJÐJØ×Ò˜Ð"WÑXÔXÐXØ×Ò˜Ð"LÑMÔMÐMÐMÐMrM   c                óB  — t           dz                       d¬¦  «        }t          D ]L}d|› d�}|                      |¬¦  «        5  |                      ||¦  «         d d d ¦  «         n# 1 swxY w Y   ŒM|                      |d¦  «         |                      |d¦  «         d S )	Nzroutes.yamlr   rP   r/   ú:r&   z%(?m)^  /en/:\n    template: index-en$z (?m)^collections:[\s\S]*^  /en/:)rR   rS   r5   r6   rH   rT   ÚassertNotRegex)rA   Úroutesr'   Úkeys       r    Ú-test_routes_config_defines_all_english_routeszCBilingualReleaseTests.test_routes_config_defines_all_english_routesH   së   € Ý˜Ñ&×1Ò1¸7Ð1ÑCÔCˆÝð 	+ð 	+ˆEØ!˜�/�/�/ˆCØ—’ C�Ñ(Ô(ð +ð +Ø—’˜c 6Ñ*Ô*Ð*ð+ð +ð +ñ +ô +ð +ð +ð +ð +ð +ð +øøøð +ð +ð +ð +øà×Ò˜Ð!IÑJÔJÐJØ×Ò˜FÐ$GÑHÔHÐHÐHÐHs   ÁA'Á'A+	Á.A+	c           
     óÆ  — dgd„ t           dd …         D ¦   «         ¢R D ]Â}|                      |¬¦  «        5  t          |z                       d¬¦  «        }dD ]3}|                      |                     d|› d	�¦  «        dd
|› �¦  «         Œ4d                     t          j        d|¦  «        ¦  «        }|  	                    |d¦  «         d d d ¦  «         n# 1 swxY w Y   ŒÃd S )Núindex-en.hbsc              3  óH   K  — | ]}d |                      d¦  «        › d�V — ŒdS )zpage-r
   z-en.hbsN)Úrstrip)Ú.0r'   s     r    ú	<genexpr>zdBilingualReleaseTests.test_generated_english_templates_have_one_metadata_contract.<locals>.<genexpr>R   s;   è è € Ð*fÐ*fÐRWÐ+M°5·<²<ÀÑ3DÔ3DÐ+MÐ+MÐ+MÐ*fÐ*fÐ*fÐ*fÐ*fÐ*frM   r   )Útemplater   rP   )Ú
page_titleÚpage_descriptionÚcanonical_urlÚru_urlÚen_urlzcontentFor "ú"z
duplicate r2   z3\{\{#contentFor "[^"]+"\}\}(.*?)\{\{/contentFor\}\}r0   )
r5   r6   rR   rS   r7   ÚcountÚjoinr>   ÚfindallrY   )rA   rc   ÚsourceÚblockÚmetadata_valuess        r    Ú;test_generated_english_templates_have_one_metadata_contractzQBilingualReleaseTests.test_generated_english_templates_have_one_metadata_contractQ   s_  € Ø'ÐgÐ*fÐ*fÕ[aÐbcÐbdÐbdÔ[eÐ*fÑ*fÔ*fÐgÐgð 	Jð 	JˆHØ—’ x�Ñ0Ô0ð Jð JÝ ™/×4Ò4¸gÐ4ÑFÔF�Ødð eð e�EØ×$Ò$ V§\¢\Ð2IÀÐ2IÐ2IÐ2IÑ%JÔ%JÈAÐOcÐ\aÐOcÐOcÑdÔdÐdÐdØ"%§(¢(­2¬:Ð6lÐntÑ+uÔ+uÑ"vÔ"v�Ø×#Ò# OÐ5HÑIÔIÐIðJð Jð Jñ Jô Jð Jð Jð Jð Jð Jð Jøøøð Jð Jð Jð Jøð	Jð 	Js   ¶BCÃC	ÃC	c                ó^  — t           dz                       d¬¦  «        }|                     dd¦  «        d                              dd¦  «        d         }|                      d|¦  «         |                      d	|¦  «         |                      |d
¦  «         |                      |d¦  «         d S )Núdefault-en.hbsr   rP   z
<noscript>r   z</noscript>r   zaria-label="Mobile navigation"zhref="/en/magic-cloud/"z)href="\{\{#block "ru_url"\}\}[^<]+>RU</a>z)href="\{\{#block "en_url"\}\}[^<]+>EN</a>)rR   rS   ÚsplitrH   rT   )rA   rU   Únoscripts      r    Ú4test_generated_english_no_js_navigation_is_localizedzJBilingualReleaseTests.test_generated_english_no_js_navigation_is_localizedZ   s©   € ÝÐ*Ñ*×5Ò5¸wÐ5ÑGÔGˆØ—=’= ¨qÑ1Ô1°!Ô4×:Ò:¸=È!ÑLÔLÈQÔOˆØ�ŠÐ6¸ÑAÔAÐAØ�ŠÐ/°Ñ:Ô:Ð:Ø×Ò˜Ð#OÑPÔPÐPØ×Ò˜Ð#OÑPÔPÐPÐPÐPrM   c           
     óÖ  — d}|D ]ã\  }}}t           |z                       d¬¦  «        }t           |z                       d¬¦  «        }t          j        dt          j        |¦  «        › d�|¦  «        }|                      ||¦  «         |D ]]}|                      ||¬¦  «        5  |                      |dt          j        |¦  «        › d�¦  «         d d d ¦  «         n# 1 swxY w Y   Œ^Œäd S )	N))rO   z	index.hbsr
   )rr   r^   r/   r   rP   zhref="z	#([^"]+)")ÚlayoutÚanchorz\bid="ri   )rR   rS   r>   rl   Úescaper<   r6   rT   )	rA   ÚpairsÚlayout_nameÚ
index_nameÚ	root_pathrw   ÚindexÚanchorsrx   s	            r    Ú<test_primary_home_navigation_anchors_exist_in_both_languageszRBilingualReleaseTests.test_primary_home_navigation_anchors_exist_in_both_languagesb   s\  € Ø_ˆØ27ð 	Lð 	LÑ.ˆK˜ YÝ˜[Ñ(×3Ò3¸WÐ3ÑEÔEˆFÝ˜JÑ&×1Ò1¸7Ð1ÑCÔCˆEÝ”jÐ!J­2¬9°YÑ+?Ô+?Ð!JÐ!JÐ!JÈFÑSÔSˆGØ�OŠO˜G [Ñ1Ô1Ð1Ø!ð Lð L�Ø—\’\¨¸V�\ÑDÔDð Lð LØ×$Ò$ UÐ,Jµb´iÀÑ6GÔ6GÐ,JÐ,JÐ,JÑKÔKÐKðLð Lð Lñ Lô Lð Lð Lð Lð Lð Lð Løøøð Lð Lð Lð LøðLð	Lð 	Ls   Â#-CÃC Ã#C N)r   r$   )
Ú__name__Ú
__module__Ú__qualname__rD   rL   rV   r\   rp   ru   r€   © rM   r    r#   r#   (   s¾   € € € € € ðrð rð rð rðEð Eð Eð EðNð Nð Nð NðIð Ið Ið IðJð Jð Jð JðQð Qð Qð Qð	Lð 	Lð 	Lð 	Lð 	Lð 	LrM   r#   Ú__main__é   )Ú	verbosity)r   r   r   r   )Ú__doc__Ú
__future__r   Úosr>   ÚunittestÚpathlibr   Úurllib.errorr   Úurllib.requestr   r   Úbs4r   Úenvironr9   r`   r   Ú__file__ÚresolveÚparentsrR   r5   Ú
NEW_ROUTESÚ
ALL_ROUTESr!   ÚTestCaser#   r�   Úmainr„   rM   r    ú<module>r˜      ss  ðà CÐ CØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +à Ð Ð Ð Ð Ð àŒ:�>Š>Ð+Ð-OÑPÔP×WÒWÐX[Ñ\Ô\€Ø€tˆH�~„~×ÒÑÔÔ'¨Ô*€ð

€ð 6€
Ø#ˆvÐ#˜
Ð#Ð#€
ðJð Jð Jð JðCLð CLð CLð CLð CL˜HÔ-ñ CLô CLð CLðL ˆzÒÐØ€H„M˜AÐÑÔÐÐÐð ÐrM   