U
    |h                     @   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__ i/var/www/dating/data/www/fatepal.com/env/lib/python3.8/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   t jjdd}|  tdtjjddd}|j|d | jtddgd	}| 	|d
 | 	|d | j	|ddd | 	|d | j	|ddd | j
|ddd | 	|d d S )Nr    r   Foobar Titler   titleZsnippet_content_objectinstance"wagtailsnippets_tests_advert:usage1r9   !Welcome to the Wagtail test site!<td>Generic snippet page</td>ThtmlSnippet content object<th>Field</th> <th>If you confirm deletion</th>)r   r!   r"   saver   r
   	add_childr>   r   assertContainsassertNotContains)r&   pagegfk_pager@   r   r   r   
test_usageL   s(    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emailrY   wagtailadminaccess_adminZcontent_type__app_labelcodenamer[   rY   rG   rH   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_snippete   s&       zBTestSnippetUsageView.test_usage_without_edit_permission_on_snippetc                 C   s   t jjdd}|  | 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 )Nr    r   rW   rX   rY   rZ   r]   r^   r_   ZtestsZchange_advertra   rG   rH   r9      rI   z(Private page)<td>Page</td>TrK   rN   rO   z<li>Advert</li>)r   r!   r"   rP   rb   r   rc   rd   r5   r>   r   r#   re   rS   rR   )r&   rT   r6   rf   Zadvert_permissionr@   r   r   r   *test_usage_without_edit_permission_on_pagey   s>        z?TestSnippetUsageView.test_usage_without_edit_permission_on_pagec                 C   s   t jjdd}|  | jtddgdd }| |d | j|dd	d
 | j|dd	d
 | j|dd	d
 | |d | |d d S )Nr    r   rG   rH   r9   ?describe_on_delete=1rI   ri   TrK   rN   rO   r
   z+: the advert placement will also be deleted)r   r!   r"   rP   r>   r   rR   rS   r&   rT   r@   r   r   r   *test_usage_with_describe_on_delete_cascade   s    z?TestSnippetUsageView.test_usage_with_describe_on_delete_cascadec                 C   s   t j }|  | |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 )Nr   zwagtailimages:image_usager9   rk   z<td>Event page</td>TrK   rN   rO   z
Feed image: will unset the reference)r   r!   firstrP   r#   Z
feed_image	get_usager%   r>   r"   r   idrR   rD   rS   rl   r   r   r   +test_usage_with_describe_on_delete_set_null   s    
z@TestSnippetUsageView.test_usage_with_describe_on_delete_set_nullc                 C   s   t jjdd}td|d}tjjddj|d | 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 )Nr   r   rB   rC   rE   rG   rH   r9   rk   rI   rJ   TrK   rN   rO   rM   rn   )r
   r!   r"   r   r   rQ   r#   r	   r$   r%   r>   r   rS   rR   )r&   r'   rU   r@   r   r   r   &test_usage_with_describe_on_delete_gfk   s&    z;TestSnippetUsageView.test_usage_with_describe_on_delete_gfkN)r)   r*   r+   r,   r7   rA   rV   rg   rj   rm   rr   rs   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   