U
    {h(?                     @   s  d dl mZ d dlmZ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 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mZ d dl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' edddgdddgdG dd de'e&Z(edddgdddgdG dd de'e&Z)edddgdddgdG dd de'e&Z*edddgdddgddG dd de'e&Z+edddgdddgdd G d!d" d"e'e&Z,d#S )$    )quote)Group
Permission)ContentType)Http404)RequestFactoryoverride_settings)reverse)gettext_lazy)hooks)ParentNotTranslatedError)SubmitTranslationForm)after_create_page)SubmitPageTranslationViewSubmitSnippetTranslationViewSubmitTranslationView)LocalePage)TestPage)TranslatableSnippet)FullFeaturedSnippet)TestCaseWagtailTestUtils)enZEnglish)frZFrench)deZGerman)	LANGUAGESWAGTAIL_CONTENT_LANGUAGESc                   @   s\   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d Z
dd Zdd ZdS )TestSubmitTranslationViewc                 C   sH   t j | _t jjdd| _t jjdd| _tjjdd| _	t
 | _d S Nr   Zlanguage_coder      depth)r   objectsfirst	en_localecreate	fr_locale	de_localer   geten_homepager   factoryself r/   {/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/contrib/simple_translation/tests/test_views.pysetUp&   s
    zTestSubmitTranslationView.setUpc                 C   s   |  tjd d S )Nz0simple_translation/admin/submit_translation.html)assertEqualr   Ztemplate_namer-   r/   r/   r0   test_template_name-   s    z,TestSubmitTranslationView.test_template_namec                 C   s.   |  t jtd |  t  td d S )NZ	Translate)r2   r   titler
   	get_titler-   r/   r/   r0   
test_title3   s    z$TestSubmitTranslationView.test_titlec                 C   s(   t  }| j|_| | t| j d S N)r   r+   objectr2   get_subtitlestrr.   viewr/   r/   r0   test_subtitle7   s    z'TestSubmitTranslationView.test_subtitlec                 C   s4   t  }| jd|_| j|_| }| |t d S )N/path/does/not/matter/)	r   r,   r*   requestr+   r8   Zget_formassertIsInstancer   )r.   r<   formr/   r/   r0   test_get_form<   s
    z'TestSubmitTranslationView.test_get_formc              	   C   s0   |  t t }| j|_|  W 5 Q R X d S r7   )assertRaisesNotImplementedErrorr   r+   r8   get_success_urlr;   r/   r/   r0   test_get_success_urlC   s    z.TestSubmitTranslationView.test_get_success_urlc                 K   sH   t  }| jd|_| j|_| }| d|  | 	|d t
 d S )Nr>   rA   )r   r,   r*   r?   r+   r8   Zget_context_dataassertInkeysr@   r   )r.   kwargsr<   contextr/   r/   r0   test_get_context_dataI   s    z/TestSubmitTranslationView.test_get_context_datac                 C   sD   t d| jjfd}| j|}| |jd | |jd|  d S )N*simple_translation:submit_page_translationargs.  z/admin/login/?next=)r	   r+   idclientr*   r2   status_codeurlr.   rS   responser/   r/   r0   test_dispatch_as_anonQ   s     z/TestSubmitTranslationView.test_dispatch_as_anonc                 C   sR   t d| jjfd}|  }tjjdd}|j| | j	|}| 
|jd d S )NrL   rM   Z
Moderators)name   )r	   r+   rP   loginr   r$   r*   groupsaddrQ   r2   rR   )r.   rS   usergrouprU   r/   r/   r0   test_dispatch_as_moderatorY   s     z4TestSubmitTranslationView.test_dispatch_as_moderatorc                 C   sR   t d| jjfd}|  }tjjdd}|j| | j	|}| 
|jd d S )NrL   rM   Zsubmit_translation)codenamerX   )r	   r+   rP   rY   r   r$   r*   Zuser_permissionsr[   rQ   r2   rR   )r.   rS   r\   Z
permissionrU   r/   r/   r0   test_dispatch_as_user_with_permc   s     z9TestSubmitTranslationView.test_dispatch_as_user_with_permN)__name__
__module____qualname__r1   r3   r6   r=   rB   rF   rK   rV   r^   r`   r/   r/   r/   r0   r      s   
r   c                   @   sD   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 )TestSubmitPageTranslationViewc                 C   s   t j | _t jjdd| _t jjdd| _tjjdd| _	| j	
| j| _| j	
| j| _tddd| _| j	j| jd	 td
dd| _| jj| jd	 d S )Nr   r    r   r!   r"   Blogblogr4   Zsluginstancez	Blog postz	blog-post)r   r$   r%   r&   r'   r(   r)   r   r*   r+   copy_for_translationfr_homepagede_homepager   en_blog_index	add_childen_blog_postr-   r/   r/   r0   r1   {   s    z#TestSubmitPageTranslationView.setUpc                 C   s   |  tjd d S )NzTranslate page)r2   r   r4   r-   r/   r/   r0   r6      s    z(TestSubmitPageTranslationView.test_titlec                 C   s"   t  }| j|_| | d d S )Nz!Welcome to your new Wagtail site!)r   r+   r8   r2   r9   r;   r/   r/   r0   test_get_subtitle   s    z/TestSubmitPageTranslationView.test_get_subtitlec                 C   s>   t d| jjfd}|   | j|}t|jd ts:t	d S )NrL   rM   rA   )
r	   rm   rP   rY   rQ   r*   
isinstancerJ   r   AssertionErrorrT   r/   r/   r0   *test_submit_page_translation_view_test_get   s     zHTestSubmitPageTranslationView.test_submit_page_translation_view_test_getc                 C   sT   t d| jjfd}|   | j|i }|jdks6t|jd j	ddgiksPtd S )NrL   rM   rX   rA   localesThis field is required.)
r	   rm   rP   rY   rQ   postrR   rr   rJ   errorsrT   r/   r/   r0   3test_submit_page_translation_view_test_post_invalid   s     
 zQTestSubmitPageTranslationView.test_submit_page_translation_view_test_post_invalidc                 C   s   t d| jjfd}tjjddj}|gdd}|   | jj||dd}| j	|}| 
|t d|jgd | d	d
d |jd D  d S )NrL   rM   r   r    Trt   Zinclude_subtreefollowzwagtailadmin_pages:editz2The page 'Blog' was successfully created in Germanc                 S   s   g | ]
}|j qS r/   message.0msgr/   r/   r0   
<listcomp>   s     zkTestSubmitPageTranslationView.test_submit_page_translation_view_test_post_single_locale.<locals>.<listcomp>messages)r	   rm   rP   r   r$   r*   rY   rQ   rv   get_translationassertRedirectspkrG   rJ   )r.   rS   r   datarU   Ztranslated_pager/   r/   r0   9test_submit_page_translation_view_test_post_single_locale   s"      zWTestSubmitPageTranslationView.test_submit_page_translation_view_test_post_single_localec              	   C   s  t ddd}| jj|d td| jjfd}tjjddj}tjjd	dj}||gd
d}|   | 	t
d | j|| W 5 Q R X td| jjfd}| j||}|jdkst|jd| j j dkst| j|j}dd |jd D dgkstd S )NzBlog post subzblog-post-subrg   rh   rL   rM   r   r    r   Try    rO   z/admin/pages//c                 S   s   g | ]
}|j qS r/   r|   r~   r/   r/   r0   r      s     znTestSubmitPageTranslationView.test_submit_page_translation_view_test_post_multiple_locales.<locals>.<listcomp>r   z5The page 'Blog' was successfully created in 2 locales)r   ro   rn   r	   rP   r   r$   r*   rY   ZassertRaisesMessager   rQ   rv   rm   rR   rr   rS   Z
get_parentrJ   )r.   Zen_blog_post_subrS   r   r   r   rU   r/   r/   r0   <test_submit_page_translation_view_test_post_multiple_locales   s.      zZTestSubmitPageTranslationView.test_submit_page_translation_view_test_post_multiple_localesN)
ra   rb   rc   r1   r6   rp   rs   rx   r   r   r/   r/   r/   r0   rd   n   s   rd   c                   @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS ) TestSubmitSnippetTranslationViewc                 C   s:   t j | _t jjdd| _td| jd| _| j  d S )Nr   r    Hello world)textlocale)	r   r$   r%   r&   r'   r(   r   
en_snippetsaver-   r/   r/   r0   r1      s    z&TestSubmitSnippetTranslationView.setUpc                 C   s"   t  }| j|_| | d d S )NzTranslate translatable snippet)r   r   r8   r2   r5   r;   r/   r/   r0   test_get_title   s    z/TestSubmitSnippetTranslationView.test_get_titlec              	   C   sx   t  }| j|_dddd|_| t |  W 5 Q R X tj	| j}|j
|jt| jjd|_| | | j d S )NZsome_appZ
some_model   	app_label
model_namer   )r   r   r8   rI   rC   r   Z
get_objectr   r$   Zget_for_modelr   modelr:   r   r2   )r.   r<   content_typer/   r/   r0   test_get_object   s    
z0TestSubmitSnippetTranslationView.test_get_objectc                 C   s0   t  }| j|_dddd|_| | d d S )Nsnippetsteststranslatablesnippetc   r   z:/admin/snippets/snippetstests/translatablesnippet/edit/99/)r   r   r8   rI   r2   rE   r;   r/   r/   r0   rF     s    z5TestSubmitSnippetTranslationView.test_get_success_urlc                 C   sB   t  }| j|_dddd|_| ||jtd|jjgd d S )Nr   r   r   r   z6wagtailsnippets_snippetstests_translatablesnippet:editrM   )r   r   r8   rI   r2   rE   r	   r   r;   r/   r/   r0   &test_get_success_url_for_single_locale  s    
zGTestSubmitSnippetTranslationView.test_get_success_url_for_single_localec                 C   s2   t  }| j|_| || jd| jj d d S )NzRSuccessfully created French for translatable snippet 'TranslatableSnippet object (z)')r   r   r8   r2   Zget_success_messager(   rP   r;   r/   r/   r0   test_get_success_message  s    
z9TestSubmitSnippetTranslationView.test_get_success_messageN)	ra   rb   rc   r1   r   r   rF   r   r   r/   r/   r/   r0   r      s   r   T)r   r   ZWAGTAIL_I18N_ENABLEDc                   @   sD   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 )*TestSubmitSnippetTranslationWithDraftStatec                 C   s   |    tj | _tjjdd| _tjjdd| _tjjd| jdd| _	| j	
   d| j	_| j	
  | j	  | j	j| _| jj| _| jj| _d S )Nr   r    r   r   F)r   r   liveIt's edited)rY   r   r$   r%   r&   r'   r(   r)   r   r   Zsave_revisionpublishr   Zrefresh_from_db_metaZ
model_optsr   r   r-   r/   r/   r0   r1   6  s       



z0TestSubmitSnippetTranslationWithDraftState.setUpc                 C   s   t d| j| jt| jjfdS )Nz-simple_translation:submit_snippet_translationrM   )r	   r   r   r   r   r   r-   r/   r/   r0   get_submit_urlH  s    z9TestSubmitSnippetTranslationWithDraftState.get_submit_urlc                 C   s   t |j|t|jfdS )NrM   )r	   Zsnippet_viewsetZget_url_namer   r   )r.   r<   Zsnippetr/   r/   r0   get_snippet_urlN  s    

z:TestSubmitSnippetTranslationWithDraftState.get_snippet_urlc                 C   s&   | j |  }| |jd t d S )NrA   )rQ   r*   r   r@   rJ   r   r.   rU   r/   r/   r0   -test_submit_snippet_translation_view_test_getT  s    zXTestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_getc                 C   s>   | j |  i }| |jd | |jd jddgi d S )NrX   rA   rt   ru   )rQ   rv   r   r2   rR   rJ   rw   r   r/   r/   r0   6test_submit_snippet_translation_view_test_post_invalidX  s    
zaTestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_post_invalidc                 C   s   | j jgdd}| jj|  |dd}| j| j j}| || d| | j	|ddd | j	|ddd | j	|d	| d| j d
dd | 
|d	| d| d
 | dd |jd D dg d S )NTry   rz   editr   r   )countz<h3 id="status-sidebar-german"z	<a href=""c                 S   s   g | ]
}|j qS r/   r|   r~   r/   r/   r0   r   t  s     z{TestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_post_single_locale.<locals>.<listcomp>r   zCSuccessfully created German for full-featured snippet 'It's edited')r)   rP   rQ   rv   r   r   r   r   r   ZassertContainsZassertNotContainsr2   rJ   )r.   r   rU   Ztranslated_snippetr/   r/   r0   <test_submit_snippet_translation_view_test_post_single_locale`  s&    zgTestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_post_single_localec                 C   s   |   }d| jj| jjgi}| j||}| |jd | |j| 	d| j
 | j|j}| dd |jd D dg d S )Nrt   rO   r   c                 S   s   g | ]
}|j qS r/   r|   r~   r/   r/   r0   r     s     z~TestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_post_multiple_locales.<locals>.<listcomp>r   zFSuccessfully created 2 locales for full-featured snippet 'It's edited')r   r)   rP   r(   rQ   rv   r2   rR   rS   r   r   r*   rJ   )r.   rS   r   rU   r/   r/   r0   ?test_submit_snippet_translation_view_test_post_multiple_localesx  s    zjTestSubmitSnippetTranslationWithDraftState.test_submit_snippet_translation_view_test_post_multiple_localesN)
ra   rb   rc   r1   r   r   r   r   r   r   r/   r/   r/   r0   r   (  s   r   )r   r   'WAGTAILSIMPLETRANSLATION_SYNC_PAGE_TREEc                   @   s6   e Zd Zdd Zdd Zdd Zeddd	d
 ZdS )TestPageTreeSyncc                 C   s`   t j | _t jjdd| _t jjdd| _tjjdd| _	| j	
| j| _| j	
| j| _d S r   )r   r$   r%   r&   r'   r(   r)   r   r*   r+   rj   rk   rl   r-   r/   r/   r0   r1     s    zTestPageTreeSync.setUpc                 C   s   t d}| t| d S )Nr   )r   Z	get_hooksrG   r   )r.   Zfnsr/   r/   r0   test_hook_function_registered  s    
z.TestPageTreeSync.test_hook_function_registeredc                 C   s`   t ddd}| jj|d td | || j}|| j}| |jj	| | |jj	| d S Nre   rf   rg   rh   )
r   r+   rn   r   r   r(   r)   r2   Zalias_ofZspecific)r.   rm   Zfr_blog_indexZde_blog_indexr/   r/   r0   #test_alias_created_after_page_saved  s    
z4TestPageTreeSync.test_alias_created_after_page_savedF)r   c                 C   sL   t ddd}| jj|d td | | || j | || j d S r   )r   r+   rn   r   ZassertFalseZhas_translationr(   r)   )r.   rm   r/   r/   r0   test_page_sync_disabled  s
    
z(TestPageTreeSync.test_page_sync_disabledN)ra   rb   rc   r1   r   r   r   r   r/   r/   r/   r0   r     s
   	r   N)-Zdjango.contrib.admin.utilsr   Zdjango.contrib.auth.modelsr   r   Z"django.contrib.contenttypes.modelsr   Zdjango.httpr   Zdjango.testr   r   Zdjango.urlsr	   Zdjango.utils.translationr
   Zwagtailr   Z$wagtail.actions.copy_for_translationr   Z(wagtail.contrib.simple_translation.formsr   Z)wagtail.contrib.simple_translation.modelsr   Z(wagtail.contrib.simple_translation.viewsr   r   r   Zwagtail.modelsr   r   Zwagtail.test.i18n.modelsr   Zwagtail.test.snippets.modelsr   Zwagtail.test.testapp.modelsr   Zwagtail.test.utilsr   r   r   rd   r   r   r   r/   r/   r/   r0   <module>   s   I\FS