U
    |hO                     @   sj  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
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*m+Z+m,Z, d dl-m.Z. G dd deZ/G dd deZ0G dd deZ1G dd deZ2G dd deZ3G dd dZ4G dd deZ5G dd deZ6ed d d!d"d#d$gd!d"d#d$gd%G d&d' d'eZ7d(d) Z8ed d d!d"d#d$gd!d"d#d$gd%G d*d+ d+eZ9ed,d,dd-d.G d/d0 d0eZ:G d1d2 d2eZ;G d3d4 d4eZ<G d5d6 d6eZ=G d7d8 d8eZ>G d9d: d:eZ?G d;d< d<eZ@dS )=    N)BytesIO)Path)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)hash_filelike)deep_updateflatten_choices)get_main_versionc                   @   s   e Zd Zdd ZdS )TestCamelCaseToUnderscorec                 C   s*   ddg}|D ]\}}|  t|| qd S )N)Z
HelloWorldhello_world)zlongValueWithVarious subStringsz#long_value_with_various sub_strings)assertEqualr   selfZ
test_casesoriginalZexpected_result r&   `/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/test_utils.pytest_camelcase_to_underscore$   s
    z6TestCamelCaseToUnderscore.test_camelcase_to_underscoreN)__name__
__module____qualname__r(   r&   r&   r&   r'   r    #   s   r    c                   @   s   e Zd Zdd ZdS )TestStringToAsciic              	   C   s8   ddddddddd	g	}|D ]\}}|  t|| qd S )
N)u   30 𝗄𝗆/𝗁z30 km/h)u   北亰Z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ßenbahnZ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_ascii/   s    z&TestStringToAscii.test_string_to_asciiN)r)   r*   r+   r1   r&   r&   r&   r'   r,   .   s   r,   c                   @   s   e Zd Zdd Zdd ZdS )TestCautiousSlugifyc              
   C   sJ   ddddddddd	d
g
}|D ](\}}|  t|| |  t|| qd S )N r4   z???r4   )r/   hello-worldZHello_worldr!   )   Hellö wörldr6   )Hello   worldr6   )   Hello world   r6   )Hello, world!r6   zHello*world
helloworld)u   Hello☃worldr=   )r"   r   r   r#   r&   r&   r'   ,test_behaves_same_as_slugify_for_latin_charsD   s    z@TestCautiousSlugify.test_behaves_same_as_slugify_for_latin_charsc                 C   s,   dddg}|D ]\}}|  t|| qd S )N)r.   Zstraxdfenbahn)r-   Zu0421u043fu043eu0440u0442)r0   Z
u5c71u8108)r"   r   r#   r&   r&   r'   test_escapes_non_latin_charsV   s    z0TestCautiousSlugify.test_escapes_non_latin_charsN)r)   r*   r+   r>   r?   r&   r&   r&   r'   r2   C   s   r2   c                   @   s   e Zd Zdd Zdd ZdS )TestSafeSnakeCasec                 C   sB   ddddddddd	d
ddddg}|D ]\}}|  t|| q$d S )Nr3   r5   )zusing-HyphenZusing_hyphen)u   en–⁠dashZendash)u     em—dash Zemdash)u   horizontal―BARZhorizontalbar)r/   r!   r7   )r8   r!   )r9   r!   )r:   r!   )r;   r!   r<   )z'Screenshot_2020-05-29 Screenshot(1).pngZ$screenshot_2020_05_29_screenshot1pngr"   r   r#   r&   r&   r'   test_strings_with_latin_charsb   s"    z/TestSafeSnakeCase.test_strings_with_latin_charsc                 C   s*   ddg}|D ]\}}|  t|| qd S )N)u   Straßenbahn StraßenbahnZstraxdfenbahn_straxdfenbahn)u   Сп орт!Zu0421u043f_u043eu0440u0442rA   r#   r&   r&   r'   "test_strings_with__non_latin_chars}   s
    z4TestSafeSnakeCase.test_strings_with__non_latin_charsN)r)   r*   r+   rB   rC   r&   r&   r&   r'   r@   a   s   r@   c                   @   s   e Zd Zdd ZdS )TestAcceptsKwargc                 C   sP   d	dd}d
dd}dd }|  t|d | t|d | t|d d S )N*   c                 S   s   d S Nr&   )appleZoranger&   r&   r'   func_without_banana   s    z@TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_without_bananac                 S   s   d S rF   r&   )rG   bananar&   r&   r'   func_with_banana   s    z=TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_with_bananac                 [   s   d S rF   r&   )rG   kwargsr&   r&   r'   func_with_kwargs   s    z=TestAcceptsKwarg.test_accepts_kwarg.<locals>.func_with_kwargsrI   )rE   )rE   )assertFalser   Z
assertTrue)r$   rH   rJ   rL   r&   r&   r'   test_accepts_kwarg   s    

z#TestAcceptsKwarg.test_accepts_kwargN)r)   r*   r+   rN   r&   r&   r&   r'   rD      s   rD   c                   @   s    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 rF   )target_method_called_withr$   r&   r&   r'   __init__   s    zTestTargetClass.__init__c                 C   s   | j | d S rF   )rP   append)r$   argr&   r&   r'   target_method   s    zTestTargetClass.target_methodN)r)   r*   r+   __doc__rR   rU   r&   r&   r&   r'   rO      s   rO   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestInvokeViaAttributeShortcutc                 C   s   t  | _t| jd| _d S )NrU   )rO   target_objectr   test_objectrQ   r&   r&   r'   setUp   s
     z$TestInvokeViaAttributeShortcut.setUpc                 C   s*   dD ] }t | j| | || jj qd S )N)ZfoobarZbaz)getattrrY   ZassertInrX   rP   )r$   valuer&   r&   r'   
test_basic   s    z)TestInvokeViaAttributeShortcut.test_basicc              
   C   s   zt | jd}W n4 tk
rF } ztd| j|f W 5 d }~X Y nX zt || _W n4 tk
r } ztd| j|f W 5 d }~X Y nX | jj| _|   d S )Nz2An error occurred when attempting to pickle %r: %sz4An error occurred when attempting to unpickle %r: %s)	pickledumpsrY   	ExceptionAssertionErrorloadsobjrX   r^   )r$   Zpickleder&   r&   r'   test_pickleability   s$    
z1TestInvokeViaAttributeShortcut.test_pickleabilityN)r)   r*   r+   rZ   r^   rg   r&   r&   r&   r'   rW      s   rW   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_pageZ	home_pageZ	add_childsecond_home_pagerQ   r&   r&   r'   rZ      s
    
zTestFindAvailableSlug.setUpc              	   C   s2   |  d t| jd}W 5 Q R X | |d d S )Nri   zunique-slugassertNumQueriesr   rr   r"   r$   rn   r&   r&   r'   test_find_available_slug   s    z.TestFindAvailableSlug.test_find_available_slugc              	   C   s2   |  d t| jd}W 5 Q R X | |d d S )Nri   homezhome-2rt   rv   r&   r&   r'   %test_find_available_slug_already_used   s    z;TestFindAvailableSlug.test_find_available_slug_already_usedc              	   C   s:   |  d t| jd| jjd}W 5 Q R X | |d d S )Nri   rx   )Zignore_page_idrl   )ru   r   rr   rs   idr"   rv   r&   r&   r'   'test_find_available_slug_ignore_page_id   s      z=TestFindAvailableSlug.test_find_available_slug_ignore_page_idN)r)   r*   r+   rZ   rw   ry   r{   r&   r&   r&   r'   rh      s   rh   TenEnglishdeGerman)de-atAustrian German)pt-brPortuguese (Brazil))USE_I18NWAGTAIL_I18N_ENABLEDZ	LANGUAGESWAGTAIL_CONTENT_LANGUAGESc                   @   sh   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dddg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   rQ   r&   r&   r'   test_get_content_languages   s    z2TestGetContentLanguages.test_get_content_languagesr|   r   r   c                 C   s   |  t ddd d S Nr   r~   )r   r}   r   rQ   r&   r&   r'   )test_can_be_different_to_django_languages  s    zATestGetContentLanguages.test_can_be_different_to_django_languagesr}   r~   r   r   c                 C   s   |  t ddd d S r   r   rQ   r&   r&   r'   test_can_be_a_translation_proxy  s    z7TestGetContentLanguages.test_can_be_a_translation_proxy)zhZChinesec              	   C   s0   |  t}t  W 5 Q R X | |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$   rf   r&   r&   r'   'test_must_be_subset_of_django_languages  s    z?TestGetContentLanguages.test_must_be_subset_of_django_languagesN)	r)   r*   r+   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   rQ   r&   r&   r'   	test_none3  s    z*TestGetContentTypeLabel.<locals>.test_nonec                 S   s    t jt}| t|d d S )Nr   )r   rp   Zget_for_modelr   r"   r   )r$   Zpage_content_typer&   r&   r'   test_valid_content_type6  s    z8TestGetContentTypeLabel.<locals>.test_valid_content_typec                 S   s$   t jjddd}| t|d d S )NZfake_appzdeleted model)Z	app_labelmodelzDeleted model)r   rp   creater"   r   )r$   Zstale_content_typer&   r&   r'   test_stale_content_type:  s
     z8TestGetContentTypeLabel.<locals>.test_stale_content_typer&   )r	   r   r   r   r&   r&   r'   TestGetContentTypeLabel2  s    r   c                   @   s*   e Zd Zdd Zeddgddd ZdS )	&TestGetSupportedContentLanguageVariantc              	   C   s  t }| |dd | |dd | |dd | |dd | |dd | |dd | |dd | |dd | t |dd	d
 W 5 Q R X | t |dd	d
 W 5 Q R X | t |d W 5 Q R X | t |d W 5 Q R X 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_variantS  s"    zRTestGetSupportedContentLanguageVariant.test_get_supported_content_language_variantr|   r   r   c              	   C   s   t }| |dd | |dd | |dd | |dd | |dd | t |d W 5 Q R X | t |d W 5 Q R X | t |d W 5 Q R X | t |d	 W 5 Q R X | t |d
 W 5 Q R X d S )Nr}   r   r   r   r   r   r   r   r   r   r   r   r&   r&   r'   #test_uses_wagtail_content_languagesf  s     zJTestGetSupportedContentLanguageVariant.test_uses_wagtail_content_languagesN)r)   r*   r+   r   r
   r   r&   r&   r&   r'   r   A  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   s   t j  d S rF   r   __dict__clearrQ   r&   r&   r'   rZ     s    z9TestGetSupportedContentLanguageVariantWithI18nFalse.setUpc                 C   s   t j  d S rF   r   rQ   r&   r&   r'   tearDown  s    z<TestGetSupportedContentLanguageVariantWithI18nFalse.tearDownc                 C   s   |  tdd d S )Nr   r}   r"   r   rQ   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   rQ   r&   r&   r'   #test_language_code_not_in_languages  s    zWTestGetSupportedContentLanguageVariantWithI18nFalse.test_language_code_not_in_languagesN)r)   r*   r+   rZ   r   r   r
   r   r&   r&   r&   r'   r     s
   r   c                   @   s   e Zd Zdd Zdd ZdS )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greenrk      )ZarmsZlegsc                 S   s
   d| _ d S )NF)poke_was_calledrQ   r&   r&   r'   rR     s    z.TestMultigetattr.setUp.<locals>.Thing.__init__c                 S   s   dS )Nraaarghr&   rQ   r&   r&   r'   speak  s    z+TestMultigetattr.setUp.<locals>.Thing.speakc                 S   s   dS )Ngobbler&   )r$   Zfoodr&   r&   r'   feed  s    z*TestMultigetattr.setUp.<locals>.Thing.feedc                 S   s   d| _ tdd S )NTzdon't do that)r   rb   rQ   r&   r&   r'   poke  s    z*TestMultigetattr.setUp.<locals>.Thing.pokeTN)
r)   r*   r+   colourZlimbsrR   r   r   r   Zalters_datar&   r&   r&   r'   Thing  s   
r   )thing)r$   r   r&   r&   r'   rZ     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 5 Q R X | t t| jd W 5 Q R X | t t| jd W 5 Q R X | t t| jd W 5 Q R X | t t| jd W 5 Q R X | | jj d S )Nr   r   zthing.colourz
limbs.armsrk   r   r   zthing.speak.0rnamezlimbs.antennaez	speak.999r   r   )	r"   r   r   r   AttributeError	TypeErrorr   rM   r   rQ   r&   r&   r'   test_multigetattr  s     z"TestMultigetattr.test_multigetattrN)r)   r*   r+   rZ   r   r&   r&   r&   r'   r     s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestGetDummyRequestc                 C   s<   t j }d|_d|_|  t|d}| | d d S )Nother.example.comP   site	r   rp   firsthostnameportsaver   r"   get_hostr$   r   requestr&   r&   r'   test_standard_port  s    

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  s    

z*TestGetDummyRequest.test_non_standard_portc              	   C   s6   | j ddgd t }| | d W 5 Q R X d S )N*Z
testserver)ZALLOWED_HOSTSzexample.com)settingsr   r"   r   )r$   r   r&   r&   r'   +test_server_name_for_wildcard_allowed_hosts  s    z?TestGetDummyRequest.test_server_name_for_wildcard_allowed_hostsN)r)   r*   r+   r   r   r   r&   r&   r&   r'   r     s   		r   c                   @   s   e Zd Zdd ZdS )TestDeepUpdatec                 C   sF   ddddd}t |dddd	d
 | |dddddd	d d S )NZpicardcoffeeZhot)typetemperature)captainbeverageteaz	earl grey)r   variantZ
enterprise)r   starship)r   r   r   )r   r   r   )r   r"   )r$   valr&   r&   r'   test_deep_update  s.    zTestDeepUpdate.test_deep_updateN)r)   r*   r+   r   r&   r&   r&   r'   r     s   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   rQ   r&   r&   r'   test_hashes_io  s    
 z#HashFileLikeTestCase.test_hashes_ioc              	   C   s.   | j jdd}| t|d W 5 Q R X d S Nrb)modeZ(9e58400061ca660ef7b5c94338a5205627c77eda	test_fileopenr"   r   r$   fr&   r&   r'   test_hashes_file  s
     z%HashFileLikeTestCase.test_hashes_filec              	   C   s.   | j jdd}| t|d W 5 Q R X d S r   r   r   r&   r&   r'   test_hashes_file_bytes  s
     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   rQ   r&   r&   r'    test_hashes_django_uploaded_file!  s    z5HashFileLikeTestCase.test_hashes_django_uploaded_fileZfile_digestz,`file_digest` doesn't support this interface)reasonc                 C   s$   G dd d}|  t| d d S )Nc                   @   s    e Zd ZdZdd Zdd ZdS )zBHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFilezJ
            A class that pretends to be a huge file (~1.3GB)
            c                 S   s
   d| _ d S )Ni  Z
iterationsrQ   r&   r&   r'   rR   5  s    zKHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFile.__init__c                 S   s    |  j d8  _ | j sdS d| S )Nri          Ar   )r$   bytesr&   r&   r'   read8  s    zGHashFileLikeTestCase.test_hashes_large_file.<locals>.FakeLargeFile.readN)r)   r*   r+   rV   rR   r   r&   r&   r&   r'   FakeLargeFile0  s   r   Z(bd36f0c5a02cd6e9e34202ea3ff8db07b533e025)r"   r   )r$   r   r&   r&   r'   test_hashes_large_file+  s
    z+HashFileLikeTestCase.test_hashes_large_fileN)r)   r*   r+   r   cwdr   r   r   r   r   unittestZskipIfhasattrhashlibr   r&   r&   r&   r'   r     s   
r   c                   @   s   e Zd Zdd ZdS )TestVersionc              
   C   sL   ddddg}|D ]6\}}}| j ||d | t||| W 5 Q R X qd S )N)   rk   r   finalr   F6.2)r  rk   ri   r  r   Fr  )r   Tr  )r  Tz6.2.1)versioninclude_patch)ZsubTestr"   r   )r$   Zcasesr  r  expectedr&   r&   r'   test_get_main_versionF  s    z!TestVersion.test_get_main_versionN)r)   r*   r+   r  r&   r&   r&   r'   r   E  s   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestFlattenChoicesc                 C   s"   ddg}|  t|ddd d S )Nri   1strk   2ndr  r  12r"   r   r$   choicesr&   r&   r'   test_tuple_choicesS  s    z%TestFlattenChoices.test_tuple_choicesc                 C   s(   dddgfg}|  t|ddd d S )NGroupr
  r  r  r  r  r  r  r&   r&   r'   test_grouped_tuple_choicesW  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 )
NZJudoZKarate)judokarateZ	BadmintonZTennis)	badmintontennisUnknown)zMartial ArtsRacketunknown)r  r  r  r  r  r  r  r&   r&   r'   test_dictionary_choices[  s    z*TestFlattenChoices.test_dictionary_choicesN)r)   r*   r+   r  r  r  r&   r&   r&   r'   r	  R  s   r	  )Ar   r`   r   ior   pathlibr   Z"django.contrib.contenttypes.modelsr   Zdjango.core.exceptionsr   r   Zdjango.core.files.uploadedfiler   Zdjango.testr   r	   r
   Zdjango.utils.textr   Zdjango.utils.translationr   r   r   Zwagtail.coreutilsr   r   r   r   r   r   r   r   r   r   r   r   Zwagtail.modelsr   r   Zwagtail.utils.filer   Zwagtail.utils.utilsr   r   Zwagtail.utils.versionr   r    r,   r2   r@   rD   rO   rW   rh   r   r   r   r   r   r   r   r   r   r	  r&   r&   r&   r'   <module>   s   8&#=//#8