U
    |®Žhī}  ć                   @   s¤   d dl mZ d dlmZmZmZmZ d dlmZ d dl	m
Z
mZ G dd deZG dd deZG d	d
 d
eZG dd deZG dd deZG dd deZdS )é    )ŚTestCase)ŚRemoveStreamChildrenOperationŚRemoveStructChildrenOperationŚRenameStreamChildrenOperationŚRenameStructChildrenOperation)Śapply_changes_to_raw_data)Ś	factoriesŚmodelsc                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚFieldStructStreamChildBlockTestzTests involving changes to children of a StreamBlock nested inside a StructBlock

    We use `nestedstruct.simplestream` blocks here.
    c                 C   s0   t jdddddddddddddjj}|| _d S )NśChar Block 1ŚnestedstructŚaśChar Block 2Śsimplestream)Ścontent__0__char1__valueŚ
content__1Ś)content__1__nestedstruct__list1__0__valueZ2content__1__nestedstruct__stream1__0__char1__valueZ2content__1__nestedstruct__stream1__1__char2__valueZ2content__1__nestedstruct__stream1__2__char1__valueŚ
content__2Ś)content__2__nestedstruct__list1__0__valueZ2content__2__nestedstruct__stream1__0__char1__valueŚ
content__3Ś)content__3__simplestream__0__char1__valueŚ)content__3__simplestream__1__char2__value©r   ZSampleModelFactoryŚcontentŚraw_data©Śselfr   © r   ś/var/www/dating/data/www/fatepal.com/env/lib/python3.8/site-packages/wagtail/tests/streamfield_migrations/test_nested_structures.pyŚsetUp   s    ō
z%FieldStructStreamChildBlockTest.setUpc                 C   s  t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” | jd d  ” D ]}|  ||d d ” qŌ| jd d  ” D ]}|  ||d
 d ” q |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” dS )įs  Test whether other blocks and data not passed to an operation are intact.

        We are checking whether the parts of the data which are not passed to an operation are
        intact. Since the recursion process depends just on the block path and block structure,
        this check is independent of the operation used. We will use a rename operation for now.
        śnestedstruct.stream1Śchar1Śrenamed1©Zold_nameŚnew_name©r   Zblock_path_strZ	operationZstreamfieldr   é   é   Śidé   ŚtypeŚvalueŚstruct1Ślist1N)	r   r   r   r	   ŚSampleModelr   ŚassertEqualŚkeysŚassertIn©r   Śaltered_raw_dataŚkeyr   r   r   Ś+test_blocks_and_data_not_operated_on_intact$   sV     ’ś	 ’ ’žž ’ ’zKFieldStructStreamChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   sō  t | jdtdddtjjd}|  |d d d d	 d
 d” |  |d d d d d
 d” |  |d d d d	 d
 d” |  |d d d d	 d | jd d d d	 d ” |  |d d d d d | jd d d d d ” |  |d d d d	 d | jd d d d	 d ” |  |d d d d	 d | jd d d d	 d ” |  |d d d d d | jd d d d d ” |  |d d d d	 d | jd d d d	 d ” |  |d d d d | jd d d d ” d S )Nr!   r"   r#   r$   r&   r(   r,   Śstream1r   r+   r*   r)   ©r   r   r   r	   r/   r   r0   ©r   r4   r   r   r   Śtest_renameW   sP     ’ś	   žžžžžžžz+FieldStructStreamChildBlockTest.test_renamec                 C   s   t | jdtddtjjd}|  t|d d d d” |  t|d d d d	” |  |d d d d	 | jd d d d ” d S )
Nr!   r"   ©Śnamer&   r(   r,   r7   r*   r   ©r   r   r   r	   r/   r   r0   Ślenr9   r   r   r   Śtest_remove   s    üžz+FieldStructStreamChildBlockTest.test_removeN©Ś__name__Ś
__module__Ś__qualname__Ś__doc__r   r6   r:   r?   r   r   r   r   r
      s
   3,r
   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚFieldStructStructChildBlockTestzTests involving changes to a children of a StructBlock nested inside a StructBlock

    We use `nestedstruct.simplestruct` blocks here
    c                 C   s$   t jdddddddjj}|| _d S )Nr   r   r   Śsimplestruct)r   r   r   r   r   r   r   r   r   r   r   r      s    ś
z%FieldStructStructChildBlockTest.setUpc                 C   s  t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” | jd d  ” D ]}|  ||d d ” qŌ| jd d  ” D ]}|  ||d
 d ” q |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” |  |d d d | jd d d ” |  |d
 d d | jd
 d d ” dS )r    śnestedstruct.struct1r"   r#   r$   r&   r   r'   r(   r+   r*   r)   r,   r7   r.   N)	r   r   r   r	   r/   r   r0   r1   r2   r3   r   r   r   r6   „   sV     ’ś	 ’ ’žž ’ ’zKFieldStructStructChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   s²   t | jdtdddtjjd}|  d|d d d ” |  d|d	 d d ” |  d|d	 d d ” |  d|d	 d d ” |  d
|d d d ” |  d
|d	 d d ” d S )NrG   r"   r#   r$   r&   r(   r,   r-   r*   Śchar2)r   r   r   r	   r/   r   ŚassertNotInr2   r9   r   r   r   r:   Ų   s     ’ś	z+FieldStructStructChildBlockTest.test_renamec                 C   sø   t | jdtddtjjd}|  t|d d d d” |  t|d d d d” |  d|d d d ” |  d|d d d ” |  	d	|d d d ” |  	d	|d d d ” d S )
NrG   r"   r;   r&   r(   r,   r-   r*   rH   )
r   r   r   r	   r/   r   r0   r>   rI   r2   r9   r   r   r   r?   ź   s    üz+FieldStructStructChildBlockTest.test_removeNr@   r   r   r   r   rE      s
   3rE   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚFieldStreamStreamChildBlockTestzTests involving changes to children of a StreamBlock nested inside a StreamBlock.

    We use `nestedstream.stream1` blocks here.
    c                 C   s4   t jdddddddddddddddjj}|| _d S )Nr   Śnestedstreamr7   r   r   )r   r   Z)content__1__nestedstream__0__char1__valueŚcontent__1__nestedstream__1Z5content__1__nestedstream__1__stream1__0__char1__valueZ5content__1__nestedstream__1__stream1__1__char2__valueZ5content__1__nestedstream__1__stream1__2__char1__valueŚcontent__1__nestedstream__2Z5content__1__nestedstream__2__stream1__0__char1__valuer   Ścontent__2__nestedstream__0Z5content__2__nestedstream__0__stream1__0__char1__valuer   r   r   r   r   r   r   r     s"    ņ
z%FieldStreamStreamChildBlockTest.setUpc                 C   s   t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” |  |d d d | jd d d ” |  |d d d d	 | jd d d d	 ” |  |d d d
 d	 | jd d d
 d	 ” |  |d
 d d d	 | jd
 d d d	 ” |  |d d d d | jd d d d ” |  |d d d
 d | jd d d
 d ” |  |d
 d d d | jd
 d d d ” dS )r    śnestedstream.stream1r"   r#   r$   r&   r   r'   r(   r+   r*   r)   r,   Nr8   r9   r   r   r   r6     sP     ’ś	&žžžžžžzKFieldStreamStreamChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   są  t | jdtdddtjjd}|  |d d d d d d	 d” |  |d d d d d
 d	 d” |  |d d d
 d d d	 d” |  |d
 d d d d d	 d” |  |d d d d d d | jd d d d d d ” |  |d d d d d
 d | jd d d d d
 d ” |  |d d d
 d d d | jd d d
 d d d ” |  |d
 d d d d d | jd
 d d d d d ” |  |d d d d d | jd d d d d ” d S )NrO   r"   r#   r$   r&   r(   r,   r   r+   r*   r)   r8   r9   r   r   r   r:   I  sZ     ’ś	 ’ ’ ’ ’žžžžžz+FieldStreamStreamChildBlockTest.test_renamec                 C   s¶   t | jdtddtjjd}|  t|d d d d d” |  t|d d d d d” |  t|d d d d d” |  |d d d d d | jd d d d d ” d S )	NrO   r"   r;   r&   r(   r,   r*   r   r=   r9   r   r   r   r?   u  s    ü   žz+FieldStreamStreamChildBlockTest.test_removeNr@   r   r   r   r   rJ   ü   s
   4,rJ   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚFieldStreamStructChildBlockTestzTests involving changes to children of a StructBlock nested inside a StreamBlock.

    We use `nestedstream.simplestruct` blocks here.
    c                 C   s*   t jdddddddddd	jj}|| _d S )Nr   rK   r-   r   )	r   r   Z"content__1__nestedstream__0__char1rL   rM   r   rN   r   r   r   r   r   r   r   r     s    ÷
z%FieldStreamStructChildBlockTest.setUpc                 C   s   t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” |  |d d d | jd d d ” |  |d d d d	 | jd d d d	 ” |  |d d d
 d	 | jd d d
 d	 ” |  |d
 d d d	 | jd
 d d d	 ” |  |d d d d | jd d d d ” |  |d d d
 d | jd d d
 d ” |  |d
 d d d | jd
 d d d ” dS )r    śnestedstream.struct1r"   r#   r$   r&   r   r'   r(   r+   r*   r)   r,   N©r   r   r   r	   r/   r   r0   r9   r   r   r   r6     sP     ’ś	&žžžžžžzKFieldStreamStructChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   sb  t | jdtdddtjjd}|  d|d d d d ” |  d|d d d d ” |  d|d d d	 d ” |  d|d d d d ” |  d|d d d d ” |  d|d d d	 d ” |  |d d d d d | jd d d d d ” |  |d d d d d | jd d d d d ” |  |d d d	 d d | jd d d	 d d ” |  d
|d d d d ” |  d
|d d d d ” |  d
|d d d	 d ” |  |d d d d d
 | jd d d d d
 ” |  |d d d d d
 | jd d d d d
 ” |  |d d d	 d d
 | jd d d	 d d
 ” d S )NrQ   r"   r#   r$   r&   r(   r,   r*   r   rH   ©	r   r   r   r	   r/   r   rI   r2   r0   r9   r   r   r   r:   Ļ  sT     ’ś	žžžžžžz+FieldStreamStructChildBlockTest.test_renamec                 C   sv  t | jdtddtjjd}|  t|d d d d d” |  t|d d d d d” |  t|d d d d d” |  d	|d d d d ” |  d	|d d d d ” |  d	|d d d d ” |  |d d d d d	 | jd d d d d	 ” |  |d d d d d	 | jd d d d d	 ” |  |d d d d d	 | jd d d d d	 ” d S )
NrQ   r"   r;   r&   r(   r,   r*   r   rH   )	r   r   r   r	   r/   r   r0   r>   r2   r9   r   r   r   r?   ž  s0    ü   žžžz+FieldStreamStructChildBlockTest.test_removeNr@   r   r   r   r   rP     s
   4/rP   c                   @   s0   e Zd ZdZdd Zdd Zdd Zdd	 Zd
S )ŚFieldListStreamChildBlockTestzTests involving changes to children of a StreamBlock nested inside a ListBlock.

    We use `nestedlist_stream.item` blocks here.
    c                 C   s.   t jddddddddddddjj}|| _d S )Nr   Znestedlist_streamr   r   )r   r   Z1content__1__nestedlist_stream__0__0__char1__valueZ1content__1__nestedlist_stream__0__1__char2__valueZ1content__1__nestedlist_stream__0__2__char1__valueZ1content__1__nestedlist_stream__1__0__char1__valuer   Z1content__2__nestedlist_stream__0__0__char1__valuer   r   r   r   r   r   r   r   r   "  s    õ
z#FieldListStreamChildBlockTest.setUpc                 C   sŚ  t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” |  |d d d d	 | jd d d d	 ” |  |d d d d	 | jd d d d	 ” |  |d
 d d d	 | jd
 d d d	 ” |  |d d d d | jd d d d ” |  |d d d d | jd d d d ” |  |d
 d d d | jd
 d d d ” dS )r    śnestedlist_stream.itemr"   r#   r$   r&   r   r'   r(   r+   r*   r)   r,   Nr8   r9   r   r   r   r6   2  sN     ’ś	žžž ’ ’ ’zIFieldListStreamChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   sŲ  t | jdtdddtjjd}|  |d d d d d d	 d” |  |d d d d d
 d	 d” |  |d d d d d d	 d” |  |d
 d d d d d	 d” |  |d d d d d d | jd d d d d d ” |  |d d d d d
 d | jd d d d d
 d ” |  |d d d d d d | jd d d d d d ” |  |d
 d d d d d | jd
 d d d d d ” |  |d d d d d d | jd d d d d d ” |  |d d d d d
 d | jd d d d d
 d ” |  |d d d d d d | jd d d d d d ” |  |d
 d d d d d | jd
 d d d d d ” |  |d d d d d | jd d d d d ” d S )NrU   r"   r#   r$   r&   r(   r,   r   r+   r*   r)   r8   r9   r   r   r   r:   a  sz     ’ś	 ’ ’ ’ ’žžžžžžžžžz)FieldListStreamChildBlockTest.test_renamec                 C   s¶   t | jdtddtjjd}|  t|d d d d d” |  t|d d d d d” |  t|d d d d d” |  |d d d d d | jd d d d d ” d S )	NrU   r"   r;   r&   r(   r,   r   r*   r=   r9   r   r   r   r?     s    ü   žz)FieldListStreamChildBlockTest.test_removeNr@   r   r   r   r   rT     s
   />rT   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	ŚFieldListStructChildBlockTestzTests involving changes to children of a StructBlock nested inside a ListBlock.

    We use `nestedlist_struct.item` blocks here.
    c                 C   s"   t jddddddjj}|| _d S )Nr   zNested List Struct 1zNested List Struct 2zNested List Struct 3rF   )r   Z'content__1__nestedlist_struct__0__char1Z'content__1__nestedlist_struct__1__char1Z'content__2__nestedlist_struct__0__char1r   r   r   r   r   r   r   ·  s    ū
z#FieldListStructChildBlockTest.setUpc                 C   sP  t | jdtdddtjjd}|  |d | jd ” |  |d | jd ” |  |d d	 | jd d	 ” |  |d
 d	 | jd
 d	 ” |  |d d | jd d ” |  |d
 d | jd
 d ” |  |d d d d | jd d d d ” |  |d d d d | jd d d d ” |  |d
 d d d | jd
 d d d ” dS )r    śnestedlist_struct.itemr"   r#   r$   r&   r   r'   r(   r+   r*   r)   r,   NrR   r9   r   r   r   r6   Į  s6     ’ś	 ’ ’ ’zIFieldListStructChildBlockTest.test_blocks_and_data_not_operated_on_intactc                 C   sb  t | jdtdddtjjd}|  d|d d d d ” |  d|d d d d ” |  d|d	 d d d ” |  d|d d d d ” |  d|d d d d ” |  d|d	 d d d ” |  |d d d d d | jd d d d d ” |  |d d d d d | jd d d d d ” |  |d	 d d d d | jd	 d d d d ” |  d
|d d d d ” |  d
|d d d d ” |  d
|d	 d d d ” |  |d d d d d
 | jd d d d d
 ” |  |d d d d d
 | jd d d d d
 ” |  |d	 d d d d
 | jd	 d d d d
 ” d S )NrW   r"   r#   r$   r&   r(   r,   r   r*   rH   rS   r9   r   r   r   r:   ä  sT     ’ś	žžžžžžz)FieldListStructChildBlockTest.test_renameN)rA   rB   rC   rD   r   r6   r:   r   r   r   r   rV   ±  s   
#rV   N)Zdjango.testr   Z$wagtail.blocks.migrations.operationsr   r   r   r   Zwagtail.blocks.migrations.utilsr   Z#wagtail.test.streamfield_migrationsr   r	   r
   rE   rJ   rP   rT   rV   r   r   r   r   Ś<module>   s    h   