a
    Dg!                     @   s   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 d dlmZmZmZmZ d d	lmZ G d
d de	ZG dd de	ZG dd dee	ZdS )    )StringIO)quote)
Permission)
management)TestCase)reverse)PageReferenceIndex)AdvertDraftStateModel	EventPageGenericSnippetPage)WagtailTestUtilsc                       s.   e Zd ZdgZe fddZdd Z  ZS )TestUsageCount	test.jsonc                    s"   t    t }tjd|d d S NZrebuild_references_index)stdoutsupersetUpTestDatar   r   Zcall_commandclsoutput	__class__ `/var/www/lab.imftr.de/x/nb_venv/lib/python3.9/site-packages/wagtail/snippets/tests/test_usage.pyr      s    
zTestUsageCount.setUpTestDatac                 C   s(   t jjdd}| t| d d S )N   pk   )r
   objectsgetassertEqualr	   get_grouped_references_tocount)selfadvertr   r   r   test_snippet_usage_count   s    z'TestUsageCount.test_snippet_usage_count)__name__
__module____qualname__fixturesclassmethodr   r(   __classcell__r   r   r   r   r      s   r   c                       s.   e Zd ZdgZe fddZdd Z  ZS )
TestUsedByr   c                    s"   t    t }tjd|d d S r   r   r   r   r   r   r   $   s    
zTestUsedBy.setUpTestDatac                 C   sl   t jjdd}t|}| |d t | |d d t | |d d t | |d d d t d S )Nr   r   r   )	r
   r!   r"   r	   r$   ZassertIsInstancetupler   list)r&   r'   usager   r   r   test_snippet_used_by*   s    
zTestUsedBy.test_snippet_used_by)r)   r*   r+   r,   r-   r   r3   r.   r   r   r   r   r/   !   s   r/   c                   @   sR   e Zd Zdg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 )TestSnippetUsageViewr   c                 C   s   |   | _d S )N)loginuser)r&   r   r   r   setUp7   s    zTestSnippetUsageView.setUpc                 C   sr   t jjdd}|   d|_|  | jtdt	|j
gd}| |j}|d}| |jddd d S )	NzDraft-enabled Foo, Published)textzDraft-enabled Bar, In Draftz+wagtailsnippets_tests_draftstatemodel:usageargsz.w-breadcrumbs__sublabelT)strip)r   r!   createZsave_revisionpublishr8   clientr"   r   r   r   Zget_soupcontentZ
select_oner#   Zget_text)r&   ZsnippetresponseZsoupZsublabelr   r   r   test_use_latest_draft_as_title:   s    

z3TestSnippetUsageView.test_use_latest_draft_as_titlec                 C   s   | j ddH tjjdd}|  tdtjjddd}|j|d W d    n1 sZ0    Y  | jt	d	d
gd}| 
|d | 
|d | j
|ddd | 
|d | j
|ddd | j|ddd | 
|d | 
|t	d|jgdd  d S )NTexecuter    r   Foobar Titler   titleZsnippet_content_objectinstance"wagtailsnippets_tests_advert:usage1r9   !Welcome to the Wagtail test site!<td>Generic snippet page</td>htmlSnippet content object<th>Field</th> <th>If you confirm deletion</th>zwagtailadmin_pages:editz&#:w:contentpath=snippet_content_object)captureOnCommitCallbacksr   r!   r"   saver   r
   	add_childr>   r   assertContainsassertNotContainsid)r&   pagegfk_pager@   r   r   r   
test_usageL   s6    *zTestSnippetUsageView.test_usagec                 C   sr   | j dddd}tjjddd}|j| | jddd | jtd	d
gd}| 	|j
d | |td d S )N
basicadminbasicadmin@example.compasswordusernameemailr]   wagtailadminaccess_adminZcontent_type__app_labelcodenamer_   r]   rI   rJ   r9   i.  Zwagtailadmin_home)create_userr   r!   r"   user_permissionsaddr5   r>   r   r#   status_codeZassertRedirects)r&   r6   admin_permissionr@   r   r   r   -test_usage_without_edit_permission_on_snippetk   s     zBTestSnippetUsageView.test_usage_without_edit_permission_on_snippetc                 C   s  | j dd& tjjdd}|  W d    n1 s80    Y  | jdddd}tjjd	d
d}tjjddd}|j| |j| | j	ddd | j
tddgd}| |jd | |d | |d | j|ddd | j|ddd | j|ddd | j|ddd d S )NTrB   r    r   r[   r\   r]   r^   ra   rb   rc   testsZchange_advertre   rI   rJ   r9      rK   z(Private page)<td>Page</td>rM   rP   rQ   z<li>Advert</li>)rR   r   r!   r"   rS   rf   r   rg   rh   r5   r>   r   r#   ri   rV   rU   )r&   rX   r6   rj   Zadvert_permissionr@   r   r   r   *test_usage_without_edit_permission_on_page   s8    &z?TestSnippetUsageView.test_usage_without_edit_permission_on_pagec                 C   s   | j dd& tjjdd}|  W d    n1 s80    Y  | jtddgdd }| |d	 | j|d
dd | j|ddd | j|ddd | |d | |d d S )NTrB   r    r   rI   rJ   r9   ?describe_on_delete=1rK   rn   rM   rP   rQ   r
   z+: the advert placement will also be deleted)	rR   r   r!   r"   rS   r>   r   rU   rV   r&   rX   r@   r   r   r   *test_usage_with_describe_on_delete_cascade   s    &z?TestSnippetUsageView.test_usage_with_describe_on_delete_cascadec                 C   s   | j dd" tj }|  W d    n1 s40    Y  | |j  d | j	
td|jjgdd }| ||j | j|ddd | j|d	dd | j|d
dd | |d | |d d S )NTrB   r   zwagtailimages:image_usager9   rp   z<td>Event page</td>rM   rP   rQ   z
Feed image: will unset the reference)rR   r   r!   firstrS   r#   Z
feed_image	get_usager%   r>   r"   r   rW   rU   rF   rV   rq   r   r   r   +test_usage_with_describe_on_delete_set_null   s    
&z@TestSnippetUsageView.test_usage_with_describe_on_delete_set_nullc                 C   s   | j dd@ tjjdd}td|d}tjjddj|d W d    n1 sR0    Y  | t	|
 d | jtdd	gd
d }| |d | |d | j|ddd | j|ddd | j|ddd | |d | |d d S )NTrB   r   r   rD   rE   rG   rI   rJ   r9   rp   rK   rL   rM   rP   rQ   rO   rs   )rR   r
   r!   r"   r   r   rT   r#   r	   r$   r%   r>   r   rV   rU   )r&   r'   rY   r@   r   r   r   &test_usage_with_describe_on_delete_gfk   s(    4z;TestSnippetUsageView.test_usage_with_describe_on_delete_gfkN)r)   r*   r+   r,   r7   rA   rZ   rk   ro   rr   rv   rw   r   r   r   r   r4   4   s   "r4   N)ior   Zdjango.contrib.admin.utilsr   Zdjango.contrib.auth.modelsr   Zdjango.corer   Zdjango.testr   Zdjango.urlsr   Zwagtail.modelsr   r	   Zwagtail.test.testapp.modelsr
   r   r   r   Zwagtail.test.utilsr   r   r/   r4   r   r   r   r   <module>   s   