o
    hW                     @   s  d dl Z d dlZd dl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 d dlmZ d dlmZmZ d dlmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZ d dlmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z'm(Z(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7 G dd deZ8G dd deZ9G dd deZ:G dd deZ;G dd deZ<G dd dZ=G dd  d eZ>G d!d" d"eZ?ed#d#g d$g d$d%G d&d' d'eZ@d(d) ZAed#d#g d$g d$d%G d*d+ d+eZBed,d,dd-d.G d/d0 d0eZCG d1d2 d2eZDG d3d4 d4eZEG d5d6 d6eZFG d7d8 d8eZGG d9d: d:eZHG d;d< d<eZIG d=d> d>eZJG d?d@ d@eZKdS )A    N)BytesIO)Path)settings)ContentType)ImproperlyConfiguredSuspiciousOperation)SimpleUploadedFile)SimpleTestCaseTestCaseoverride_settings)slugify)_trans)gettext_lazy)InvokeViaAttributeShortcutaccepts_kwargcamelcase_to_underscorecautious_slugifyfind_available_slugget_content_languagesget_content_type_labelget_dummy_request&get_supported_content_language_variantmultigetattrsafe_snake_casestring_to_ascii)PageSite)RemovedInWagtail70Warning)hash_filelike)template_is_overridden)deep_updateflatten_choices)get_main_versionc                   @      e Zd Zdd ZdS )TestCamelCaseToUnderscorec                 C   *   ddg}|D ]\}}|  t|| qd S )N)
HelloWorldhello_world)zlongValueWithVarious subStringsz#long_value_with_various sub_strings)assertEqualr   self
test_casesoriginalexpected_result r.   X/var/www/html/ndineBlogger/venv/lib/python3.10/site-packages/wagtail/tests/test_utils.pytest_camelcase_to_underscore*      z6TestCamelCaseToUnderscore.test_camelcase_to_underscoreN)__name__
__module____qualname__r0   r.   r.   r.   r/   r$   )       r$   c                   @   r#   )TestStringToAsciic                 C   *   g d}|D ]\}}|  t|| qd S )N)	)u   30 𝗄𝗆/𝗁z30 km/h)u   北亰BeiJing)u   ぁ あ ぃ い ぅ う ぇza a i i u u e)uA   Ա Բ Գ Դ Ե Զ Է Ը Թ Ժ Ի Լ Խ Ծ Կ Հ Ձ Ղ Ճ Մ Յ Նz2A B G D E Z E Y T' Zh I L Kh Ts K H Dz Gh Ch M Y N)   Спорт!zSport!)   StraßenbahnStrassenbahn)Hello worldr<   )u2   Ā ā Ă ă Ą ą Ć ć Ĉ ĉ Ċ ċ Č č Ď ď Đz!A a A a A a C c C c C c C c D d D)   〔山脈〕z	[ShanMai])r(   r   r)   r.   r.   r/   test_string_to_ascii5   s   z&TestStringToAscii.test_string_to_asciiN)r2   r3   r4   r>   r.   r.   r.   r/   r6   4   r5   r6   c                   @      e Zd Zdd Zdd ZdS )TestCautiousSlugifyc                 C   s:   g d}|D ]\}}|  t|| |  t|| qd S )N)
 rB   z???rB   )r<   hello-worldHello_worldr'   )   Hellö wörldrD   )Hello   worldrD   )   Hello world   rD   )Hello, world!rD   zHello*world
helloworld)u   Hello☃worldrL   )r(   r   r   r)   r.   r.   r/   ,test_behaves_same_as_slugify_for_latin_charsJ   s
   z@TestCautiousSlugify.test_behaves_same_as_slugify_for_latin_charsc                 C   r7   )N))r:   straxdfenbahn)r9   u0421u043fu043eu0440u0442)r=   
u5c71u8108)r(   r   r)   r.   r.   r/   test_escapes_non_latin_chars\   s   z0TestCautiousSlugify.test_escapes_non_latin_charsN)r2   r3   r4   rM   rQ   r.   r.   r.   r/   r@   I   s    r@   c                   @   r?   )TestSafeSnakeCasec                 C   r7   )N)rA   rC   )zusing-Hyphenusing_hyphen)u   en–⁠dashendash)u     em—dash emdash)u   horizontal―BARhorizontalbar)r<   r'   rE   )rG   r'   )rH   r'   )rI   r'   )rJ   r'   rK   )z'Screenshot_2020-05-29 Screenshot(1).png$screenshot_2020_05_29_screenshot1pngr(   r   r)   r.   r.   r/   test_strings_with_latin_charsh   s   z/TestSafeSnakeCase.test_strings_with_latin_charsc                 C   r%   )N)u   Straßenbahn Straßenbahnstraxdfenbahn_straxdfenbahn)u   Сп орт!u0421u043f_u043eu0440u0442rX   r)   r.   r.   r/   "test_strings_with__non_latin_chars   r1   z4TestSafeSnakeCase.test_strings_with__non_latin_charsN)r2   r3   r4   rY   r\   r.   r.   r.   r/   rR   g   s    rR   c                   @   r#   )TestAcceptsKwargc                 C   sP   d	dd}d	dd}dd }|  t|d | t|d | t|d d S )
N*   c                 S      d S Nr.   )appleoranger.   r.   r/   func_without_banana      z@TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_without_bananac                 S   r_   r`   r.   )ra   bananar.   r.   r/   func_with_banana   rd   z=TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_with_bananac                 [   r_   r`   r.   )ra   kwargsr.   r.   r/   func_with_kwargs   rd   z=TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_with_kwargsre   )r^   )assertFalser   
assertTrue)r*   rc   rf   rh   r.   r.   r/   test_accepts_kwarg   s   

z#TestAcceptsKwarg.test_accepts_kwargN)r2   r3   r4   rk   r.   r.   r.   r/   r]      r5   r]   c                   @       e Zd ZdZdd Zdd ZdS )TestTargetClassz8
    Used in TestInvokeViaAttributeShortcut (below)
    c                 C   s
   g | _ d S r`   )target_method_called_withr*   r.   r.   r/   __init__      
zTestTargetClass.__init__c                 C   s   | j | d S r`   )rn   append)r*   argr.   r.   r/   target_method   s   zTestTargetClass.target_methodN)r2   r3   r4   __doc__rp   rt   r.   r.   r.   r/   rm          rm   c                   @   $   e Zd Zdd Zdd Zdd ZdS )TestInvokeViaAttributeShortcutc                 C   s   t  | _t| jd| _d S )Nrt   )rm   target_objectr   test_objectro   r.   r.   r/   setUp   s   
z$TestInvokeViaAttributeShortcut.setUpc                 C   s*   dD ]}t | j| | || jj qd S )N)foobarbaz)getattrrz   assertInry   rn   )r*   valuer.   r.   r/   
test_basic   s   z)TestInvokeViaAttributeShortcut.test_basicc              
   C   s   z	t | jd}W n ty } z	td| j|f d }~ww zt || _W n ty< } z	td| j|f d }~ww | jj| _|   d S )Nz2An error occurred when attempting to pickle %r: %sz4An error occurred when attempting to unpickle %r: %s)	pickledumpsrz   	ExceptionAssertionErrorloadsobjry   r   )r*   pickleder.   r.   r/   test_pickleability   s,   
z1TestInvokeViaAttributeShortcut.test_pickleabilityN)r2   r3   r4   r{   r   r   r.   r.   r.   r/   rx      s    rx   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestFindAvailableSlugc                 C   s<   t jjdd| _t jjdd| _| jjt dddd| _d S )N   )depth   zSecond homepagehome-1)titleslug)instance)r   objectsget	root_page	home_page	add_childsecond_home_pagero   r.   r.   r/   r{      s
   
zTestFindAvailableSlug.setUpc                 C   sF   |  d t| jd}W d    n1 sw   Y  | |d d S )Nr   zunique-slugassertNumQueriesr   r   r(   r*   r   r.   r.   r/   test_find_available_slug   s   z.TestFindAvailableSlug.test_find_available_slugc                 C   sF   |  d t| jd}W d    n1 sw   Y  | |d d S )Nr   homezhome-2r   r   r.   r.   r/   %test_find_available_slug_already_used   s   z;TestFindAvailableSlug.test_find_available_slug_already_usedc                 C   sN   |  d t| jd| jjd}W d    n1 sw   Y  | |d d S )Nr   r   )ignore_page_idr   )r   r   r   r   idr(   r   r.   r.   r/   'test_find_available_slug_ignore_page_id   s   z=TestFindAvailableSlug.test_find_available_slug_ignore_page_idN)r2   r3   r4   r{   r   r   r   r.   r.   r.   r/   r      s
    r   T)enEnglishdeGerman)de-atAustrian German)pt-brPortuguese (Brazil))USE_I18NWAGTAIL_I18N_ENABLED	LANGUAGESWAGTAIL_CONTENT_LANGUAGESc                   @   sf   e Zd Zdd Zeddgddd Zeded	fd
edfgddd Zeg dddd ZdS )TestGetContentLanguagesc                 C   s   |  t ddddd d S )Nr   r   r   r   )r   r   r   r   r(   r   ro   r.   r.   r/   test_get_content_languages   s   z2TestGetContentLanguages.test_get_content_languagesr   r   r   c                 C      |  t ddd d S Nr   r   )r   r   r   ro   r.   r.   r/   )test_can_be_different_to_django_languages     zATestGetContentLanguages.test_can_be_different_to_django_languagesr   r   r   r   c                 C   r   r   r   ro   r.   r.   r/   test_can_be_a_translation_proxy  r   z7TestGetContentLanguages.test_can_be_a_translation_proxy)r   r   )zhChinesec                 C   sD   |  t}t  W d    n1 sw   Y  | |jjd d S )N)zThe language zh is specified in WAGTAIL_CONTENT_LANGUAGES but not LANGUAGES. WAGTAIL_CONTENT_LANGUAGES must be a subset of LANGUAGES.)assertRaisesr   r   r(   	exceptionargs)r*   r   r.   r.   r/   'test_must_be_subset_of_django_languages%  s   z?TestGetContentLanguages.test_must_be_subset_of_django_languagesN)	r2   r3   r4   r   r   r   _r   r   r.   r.   r.   r/   r      s$    
	


	r   c                 C   s   dd }dd }dd }d S )Nc                 S   s   |  td d d S )NzUnknown content type)r(   r   ro   r.   r.   r/   	test_none9  s   z*TestGetContentTypeLabel.<locals>.test_nonec                 S   s    t jt}| t|d d S )Nr   )r   r   get_for_modelr   r(   r   )r*   page_content_typer.   r.   r/   test_valid_content_type<  s   z8TestGetContentTypeLabel.<locals>.test_valid_content_typec                 S   s$   t jjddd}| t|d d S )Nfake_appzdeleted model)	app_labelmodelzDeleted model)r   r   creater(   r   )r*   stale_content_typer.   r.   r/   test_stale_content_type@  s   z8TestGetContentTypeLabel.<locals>.test_stale_content_typer.   )r
   r   r   r   r.   r.   r/   TestGetContentTypeLabel8  s   r   c                   @   s*   e Zd Zdd Zeddgddd ZdS )	&TestGetSupportedContentLanguageVariantc                 C   sZ  t }| |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | t |dd	d
 W d    n1 sXw   Y  | t |dd	d
 W d    n1 ssw   Y  | t |d W d    n1 sw   Y  | t |d W d    d S 1 sw   Y  d S )Nr   en-gbr   r   de-chr   ptpt-ptT)strictxyzxy-zzr   r(   r   LookupErrorr*   gr.   r.   r/   +test_get_supported_content_language_variantY  s*   

"zRTestGetSupportedContentLanguageVariant.test_get_supported_content_language_variantr   r   r   c                 C   sT  t }| |dd | |dd | |dd | |dd | |dd | t |d W d    n1 s>w   Y  | t |d W d    n1 sWw   Y  | t |d W d    n1 spw   Y  | t |d	 W d    n1 sw   Y  | t |d
 W d    d S 1 sw   Y  d S )Nr   r   r   r   r   r   r   r   r   r   r   r   r.   r.   r/   #test_uses_wagtail_content_languagesl  s*   




"zJTestGetSupportedContentLanguageVariant.test_uses_wagtail_content_languagesN)r2   r3   r4   r   r   r   r.   r.   r.   r/   r   G  s    r   Fen-us)r   r   r   LANGUAGE_CODEc                   @   s6   e Zd Zdd Zdd Zdd Zeddd	d
 ZdS )3TestGetSupportedContentLanguageVariantWithI18nFalsec                 C      t j  d S r`   r   __dict__clearro   r.   r.   r/   r{     s   z9TestGetSupportedContentLanguageVariantWithI18nFalse.setUpc                 C   r   r`   r   ro   r.   r.   r/   tearDown  s   z<TestGetSupportedContentLanguageVariantWithI18nFalse.tearDownc                 C   s   |  tdd d S )Nr   r   r(   r   ro   r.   r.   r/   $test_lookup_language_with_i18n_false  s   zXTestGetSupportedContentLanguageVariantWithI18nFalse.test_lookup_language_with_i18n_falsezz)r   c                 C   s$   |  tdd |  tdd d S )Nr   zzz-gbr   ro   r.   r.   r/   #test_language_code_not_in_languages  s   zWTestGetSupportedContentLanguageVariantWithI18nFalse.test_language_code_not_in_languagesN)r2   r3   r4   r{   r   r   r   r   r.   r.   r.   r/   r     s    r   c                   @   r?   )TestMultigetattrc                 C   s   G dd d}| | _ d S )Nc                   @   s@   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zde_	dS )z%TestMultigetattr.setUp.<locals>.Thinggreenr      )armslegsc                 S   
   d| _ d S )NF)poke_was_calledro   r.   r.   r/   rp     rq   z.TestMultigetattr.setUp.<locals>.Thing.__init__c                 S      dS )Nraaarghr.   ro   r.   r.   r/   speak  rd   z+TestMultigetattr.setUp.<locals>.Thing.speakc                 S   r   )Ngobbler.   )r*   foodr.   r.   r/   feed  rd   z*TestMultigetattr.setUp.<locals>.Thing.feedc                 S   s   d| _ td)NTzdon't do that)r   r   ro   r.   r.   r/   poke  s   z*TestMultigetattr.setUp.<locals>.Thing.pokeTN)
r2   r3   r4   colourlimbsrp   r   r   r   alters_datar.   r.   r.   r/   Thing  s    

r   )thing)r*   r   r.   r.   r/   r{     s   zTestMultigetattr.setUpc                 C   s  |  t| jdd |  t| dd |  t| jdd |  t| jdd |  t| dd	 | t t| jd
 W d    n1 sFw   Y  | t t| jd W d    n1 saw   Y  | t t| jd W d    n1 s|w   Y  | t t| jd W d    n1 sw   Y  | t t| jd W d    n1 sw   Y  | | jj d S )Nr   r   zthing.colourz
limbs.armsr   r   r   zthing.speak.0rnamezlimbs.antennaez	speak.999r   r   )	r(   r   r   r   AttributeError	TypeErrorr   ri   r   ro   r.   r.   r/   test_multigetattr  s*   z"TestMultigetattr.test_multigetattrN)r2   r3   r4   r{   r   r.   r.   r.   r/   r     s    r   c                   @   rw   )TestGetDummyRequestc                 C   s<   t j }d|_d|_|  t|d}| | d d S )Nother.example.comP   site	r   r   firsthostnameportsaver   r(   get_hostr*   r  requestr.   r.   r/   test_standard_port     

z&TestGetDummyRequest.test_standard_portc                 C   s<   t j }d|_d|_|  t|d}| | d d S )Nr   i"  r  zother.example.com:8888r  r
  r.   r.   r/   test_non_standard_port  r  z*TestGetDummyRequest.test_non_standard_portc                 C   sL   | j ddgd t }| | d W d    d S 1 sw   Y  d S )N*
testserver)ALLOWED_HOSTSzexample.com)r   r   r(   r	  )r*   r  r.   r.   r/   +test_server_name_for_wildcard_allowed_hosts  s   "z?TestGetDummyRequest.test_server_name_for_wildcard_allowed_hostsN)r2   r3   r4   r  r  r  r.   r.   r.   r/   r     s    		r   c                   @   r#   )TestDeepUpdatec                 C   sF   ddddd}t |dddd	d
 | |dddddd	d d S )Npicardcoffeehot)typetemperature)captainbeverageteaz	earl grey)r  variant
enterprise)r  starship)r  r  r  )r  r  r  )r    r(   )r*   valr.   r.   r/   test_deep_update  s.   zTestDeepUpdate.test_deep_updateN)r2   r3   r4   r   r.   r.   r.   r/   r    r5   r  c                   @   sT   e Zd Ze d Zdd Zdd Zdd Zdd	 Z	e
jeed
dddd ZdS )HashFileLikeTestCaseLICENSEc                 C   s   |  ttdd d S )N   test(a94a8fe5ccb19ba61c4c0873d391e987982fbbd3)r(   r   r   ro   r.   r.   r/   test_hashes_io  s   z#HashFileLikeTestCase.test_hashes_ioc                 C   D   | j jdd}| t|d W d    d S 1 sw   Y  d S Nrb)mode(9e58400061ca660ef7b5c94338a5205627c77eda	test_fileopenr(   r   r*   fr.   r.   r/   test_hashes_file  
   "z%HashFileLikeTestCase.test_hashes_filec                 C   r&  r'  r+  r.  r.   r.   r/   test_hashes_file_bytes!  r1  z+HashFileLikeTestCase.test_hashes_file_bytesc                 C   s   |  ttddd dS )z
        Check Django's file shims can be hashed as-is.
        `SimpleUploadedFile` inherits the base `UploadedFile`, but is easiest to test against
        zexample.txtr#  r$  N)r(   r   r   ro   r.   r.   r/    test_hashes_django_uploaded_file'  s   z5HashFileLikeTestCase.test_hashes_django_uploaded_filefile_digestz,`file_digest` doesn't support this interface)reasonc                 C   s$   G dd d}|  t| d d S )Nc                   @   rl   )zBHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFilezJ
            A class that pretends to be a huge file (~1.3GB)
            c                 S   r   )Ni  
iterationsro   r.   r.   r/   rp   ;  rq   zKHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFile.__init__c                 S   s    |  j d8  _ | j sdS d| S )Nr          Ar6  )r*   bytesr.   r.   r/   read>  s   zGHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFile.readN)r2   r3   r4   ru   rp   r;  r.   r.   r.   r/   FakeLargeFile6  rv   r<  (bd36f0c5a02cd6e9e34202ea3ff8db07b533e025)r(   r   )r*   r<  r.   r.   r/   test_hashes_large_file1  s
   z+HashFileLikeTestCase.test_hashes_large_fileN)r2   r3   r4   r   cwdr,  r%  r0  r2  r3  unittestskipIfhasattrhashlibr>  r.   r.   r.   r/   r!    s    
r!  c                   @   rw   )TestTemplateIsOverriddenc                 C   s   t   d S r`   )r   cache_clearro   r.   r.   r/   r{   L  s   zTestTemplateIsOverridden.setUpc                 C   s   |  tddd d S )N%wagtailcore/shared/block_preview.html	templatesF)assertIsr   ro   r.   r.   r/   !test_template_is_overridden_falseO  s   z:TestTemplateIsOverridden.test_template_is_overridden_falsec              	   C   s   t  l}tj|d}tj|dd ttj|dd}|d W d    n1 s-w   Y  | ji tj	d |gdd	gtj	d
 | 
tddd W d    n1 s[w   Y  W d    d S W d    d S 1 ssw   Y  d S )Nzwagtailcore/sharedT)exist_okzblock_preview.htmlwzCustom filer   tmp)DIRSNAME)	TEMPLATESrF  rG  )tempfileTemporaryDirectoryospathjoinmakedirsr-  writer   rO  rH  r   )r*   temp_dirrS  r/  r.   r.   r/    test_template_is_overridden_trueX  s.   
"z9TestTemplateIsOverridden.test_template_is_overridden_trueN)r2   r3   r4   r{   rI  rX  r.   r.   r.   r/   rD  K  s    	rD  c                   @   r#   )TestVersionc              	   C   s\   g d}|D ]%\}}}| j ||d | t||| W d    n1 s&w   Y  qd S )N))   r   r   finalr   F6.2)r[  r   r   r\  r   Fr]  )rZ  Tr]  )r^  Tz6.2.1)versioninclude_patch)subTestr(   r"   )r*   casesr_  r`  expectedr.   r.   r/   test_get_main_versiono  s   z!TestVersion.test_get_main_versionN)r2   r3   r4   rd  r.   r.   r.   r/   rY  n  r5   rY  c                   @   rw   )TestFlattenChoicesc                 C   s"   ddg}|  t|ddd d S )Nr   1str   2ndrg  ri  12r(   r!   r*   choicesr.   r.   r/   test_tuple_choices|  s   z%TestFlattenChoices.test_tuple_choicesc                 C   s(   dddgfg}|  t|ddd d S )NGrouprf  rh  rg  ri  rj  rm  rn  r.   r.   r/   test_grouped_tuple_choices  s   z-TestFlattenChoices.test_grouped_tuple_choicesc              	   C   s8   dddddddd}|  t|dddddd	 d S )
NJudoKarate)judokarate	BadmintonTennis)	badmintontennisUnknown)zMartial ArtsRacketunknown)ru  rv  ry  rz  r}  rm  rn  r.   r.   r/   test_dictionary_choices  s   z*TestFlattenChoices.test_dictionary_choicesN)r2   r3   r4   rp  rr  r~  r.   r.   r.   r/   re  {  s    re  c                   @   r#   )TestWidgetWithScriptc              	   C   s   d}t jjdtjd,}| t| ddlm} G dd d|}W d    n1 s+w   Y  W d    n1 s:w   Y  |j	|tdd	 d S )
NzQThe usage of `WidgetWithScript` hook is deprecated. Use external scripts instead.zwarnings.warn)wrapsr   )WidgetWithScriptc                   @   s   e Zd ZdS )z7TestWidgetWithScript.test_deprecation.<locals>.MyWidgetN)r2   r3   r4   r.   r.   r.   r/   MyWidget  s    r  r   )category
stacklevel)
r@  mockpatchwarningswarnassertWarnsMessager   wagtail.utils.widgetsr  assert_called_with)r*   message	warn_mockr  r  r.   r.   r/   test_deprecation  s   	
z%TestWidgetWithScript.test_deprecationN)r2   r3   r4   r  r.   r.   r.   r/   r    r5   r  )LrC  rR  r   rP  r@  r  ior   pathlibr   django.confr   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   r   django.core.files.uploadedfiler   django.testr	   r
   r   django.utils.textr   django.utils.translationr   r   r   wagtail.coreutilsr   r   r   r   r   r   r   r   r   r   r   r   wagtail.modelsr   r   wagtail.utils.deprecationr   wagtail.utils.filer   wagtail.utils.templatesr   wagtail.utils.utilsr    r!   wagtail.utils.versionr"   r$   r6   r@   rR   r]   rm   rx   r   r   r   r   r   r   r   r  r!  rD  rY  re  r  r.   r.   r.   r/   <module>   sz    8&#=//#8#