
    Ahˠ                    n   d Z ddlZddl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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 Z ddl!m"Z" ddl#m$Z$ ddl%m&Z&m'Z'm(Z(m)Z)m*Z* ddl+m,Z, ddl-m.Z. ddl/m0Z1  e1        dddiiddidddiidddiiddidddiigddddiigdddd iidd!iddd"iigdgZ2g d#Z3 e jh                  d$e.jj                  e.jl                  z   %      d&        Z7 e jh                  d$e.jj                  e.jl                  z   %      d'        Z8 e jh                  d$e.jj                  %      d(        Z9 e jh                  d$e.jt                  %      d)        Z; e jh                  d$e.jx                  %      d*        Z= e jh                  d$e.j|                  %      d+        Z? e jh                  d$e.j                  %      d,        ZA e jh                  d$e.j                  %      d-        ZC e jh                  d$e.j                  g%      d.        ZE e jh                  d$e.j                  g%      d/        ZG e jh                  d$e.j                  g%      d0        ZI e jh                  d$e.j                  g%      d1        ZK e jh                  d$e.j                  g%      d2        ZMd3 ZN G d4 d5      ZOe j                  j                   G d6 d7eO             ZR G d8 d9eO      ZSe j                  j                   G d: d;eS             ZTe j                  j                   G d< d=eS             ZUe j                  j                   G d> d?eS             ZVe j                  j                   G d@ dAeS             ZWe j                  j                   G dB dCeO             ZXe j                  j                   G dD dEeS             ZYe j                  j                   G dF dGeO             ZZe j                  j                   G dH dIeS             Z[e j                  j                   G dJ dKeS             Z\e j                  j                   G dL dMeS             Z]e j                  j                   G dN dOeS             Z^e j                  j                   G dP dQeO             Z_e j                  j                   G dR dSeO             Z`e j                  j                   G dT dUeO             Zae j                  j                   G dV dWeO             Zbe j                  j                   G dX dYeO             Zce j                  j                   G dZ d[eO             Zde j                  j                   G d\ d]eO             Zee j                  j                   G d^ d_eO             Zfe j                  j                   G d` daeO             Zge j                  j                   G db dceO             Zhe j                  j                   G dd deeS             Zie j                  j                   G df dgeS             Zje j                  j                   G dh die_             Zke j                  j                   G dj dkeS             Zle j                  j                   G dl dmeS             Zme j                  j                   G dn doeS             Zne j                  j                   G dp dqeS             Zoe j                  j                   G dr dsep             Zqe j                  j                   G dt dueO             Zry)vzUnit/Functional tests    N)	AdminSite)
ChangeList)UserAnonymousUser)FallbackStorage)Q)	post_save)receiver)TemplateContext)TestCase)RequestFactory)static)TO_FIELD_VAR)VERSION)numconv)admin_factory)InvalidPositionInvalidMoveToDescendantPathOverflowMissingNodeOrderByNodeAlreadySaved)movenodeform_factory)models)register_alldatadesc12212223231r   children243441
r      r   r   r,      r       r   r!   r0   r   r"   r0   r,   r#      r   r&   r0   r   r'   r,   r   r(   r,   r,   r)   r0   r   functionscopeparamsc                 X    | j                   j                  t               | j                   S Nparam	load_bulk	BASE_DATArequests    N/home/dcms/DCMS/lib/python3.12/site-packages/treebeard/tests/test_treebeard.pymodelrF   M       MMI&==    c                     | j                   S r>   r@   rC   s    rE   model_without_datarK   S       ==rH   c                 X    | j                   j                  t               | j                   S r>   r?   rC   s    rE   model_without_proxyrN   X   rG   rH   c                     | j                   S r>   rJ   rC   s    rE   model_with_unicoderP   ^   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   sorted_modelrR   c   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   related_modelrT   h   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   inherited_modelrV   m   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpshort_modelrX   r   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpshortnotsorted_modelrZ   w   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpalphabet_modelr\   |   rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpsortedautonow_modelr^      rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpsmallstep_modelr`      rL   rH   c                     | j                   S r>   rJ   rC   s    rE   mpm2muser_modelrb      rL   rH   c                  P    t        |       }t        dkD  r|j                  d       |S )N)r.    )listDJANGO_VERSIONappend)argsnew_argss     rE   get_changelist_argsrj      s$    DzHOrH   c                       e Zd Zd ZddZy)TestTreeBasec           	      8   |t         j                  t         j                  fv ri }|j                  j	                  ddd      D ])  \  }}}|j                  |g       j                  ||g       + |j                         D ]O  \  }}t        |      t        |      k(  sJ t        t        dt        |      dz               }t        |      |k(  rOJ  |j                         D cg c]-  }|j                  |j                         |j!                         f/ c}S c c}w )Ntree_idlftrgtr,   )r   NS_TestNodeNS_TestNode_Proxyobjectsvalues_list
setdefaultextenditemslenmaxre   rangesortedget_treer   	get_depthget_children_count)	selfrF   drn   ro   rp   	got_edges
good_edgesos	            rE   gotzTestTreeBase.got   s   V'')A)ABB A%*]]%>%>y%QV%W =!cWb)00#s<=&'ggi 7"9~Y777!%3y>A+=">?
i(J6667 FK^^EU
@AQVVQ[[]A$8$8$:;
 	
 
s   "2DNc           	          |j                  |      }|D cg c]'  }|d   j                  |d   d   |d   d   |d   d   f) }}||k(  sJ t        |D cg c]  }t        |d         |k(   c}      sJ y c c}w c c}w )Nr   r,   opencloselevel)get_annotated_listr   alltype)r   rF   expectedparentresultsobjr   s          rE   _assert_get_annotated_listz'TestTreeBase._assert_get_annotated_list   s    **62 
 V[[#a&.#a&/3q6'?K
 
 3W=cDQLE)=>>>

 >s   ,A6A;r>   )__name__
__module____qualname__r   r    rH   rE   rl   rl      s    
 ?rH   rl   c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestEmptyTreec                 :   |j                  t              }|j                  j                  |      D cg c]  }|j                   }}t
        D cg c]  }|d   	 }}t        |      t        |      k(  sJ | j                  |      t
        k(  sJ y c c}w c c}w )Npk__inr   )rA   rB   rs   filterr   	UNCHANGEDr{   r   )r   rK   idsr   	got_descsxexpected_descss          rE   test_load_bulk_emptyz"TestEmptyTree.test_load_bulk_empty   s     **95);)C)C)J)JRU)J)VW#SXXW	W(121!A$22i F>$::::xx*+y888 X2s   BBc                 .    |j                         g k(  sJ y r>   )	dump_bulk)r   rK   s     rE   test_dump_bulk_emptyz"TestEmptyTree.test_dump_bulk_empty   s    !++-333rH   c                 Z    |j                  d       dg}| j                  |      |k(  sJ y )Nr   r   r+   add_rootr   r   rK   r   s      rE   test_add_root_emptyz!TestEmptyTree.test_add_root_empty   s2    ###-=xx*+x777rH   c                 p    |j                         }g }|D cg c]  }|j                   c}|k(  sJ y c c}w r>   get_root_nodesr   )r   rK   r   r   nodes        rE   test_get_root_nodes_emptyz'TestEmptyTree.test_get_root_nodes_empty   s5     //1&)*d		*h666*s   3c                 ,    |j                         }|J y r>   )get_first_root_noder   rK   r   s      rE   test_get_first_root_node_emptyz,TestEmptyTree.test_get_first_root_node_empty   s     446{{rH   c                 ,    |j                         }|J y r>   )get_last_root_noder   s      rE   test_get_last_root_node_emptyz+TestEmptyTree.test_get_last_root_node_empty   s     335{{rH   c                 D    t        |j                               }|g k(  sJ y r>   )re   r|   r   s      rE   test_get_treezTestEmptyTree.test_get_tree   s"    %..01byyrH   c                 ,    g }| j                  ||       y r>   r   r   s      rE   test_get_annotated_listz%TestEmptyTree.test_get_annotated_list   s    ''(:HErH   c                     |j                  d       |j                  d       |j                  d       |j                  d       g d}| j                  |      |k(  sJ y )Nr   r   r   r'   r(   )r+   )r   r,   r   r6   )r(   r,   r   r   r   s      rE   0test_add_multiple_root_nodes_adds_sibling_leavesz>TestEmptyTree.test_add_multiple_root_nodes_adds_sibling_leaves   sc    ###-###-###-###-Gxx*+x777rH   N)r   r   r   r   r   r   r   r   r   r   r   r   r   rH   rE   r   r      s0    948
7
F8rH   r   c                       e Zd Zy)TestNonEmptyTreeN)r   r   r   r   rH   rE   r   r      s    rH   r   c                   r    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestClassMethodsc                 F   |j                   j                  d      }|j                  t        |      }g d}g d}|j                   j	                  |      D cg c]  }|j
                   }}t        |      t        |      k(  sJ | j                  |      |k(  sJ y c c}w )Nr#   r   )r+   r-   r/   r1   r2   r#   r4   r.   r   r.   r   r   r.   r.   r       r   r!   r   r   r"   r   r,   r#      r   r&   r   r   r'   r.   r   r(   r.   r,   r)   r   r   r5   r6   r7   r8   )
r   r   r    r!   r"   r#   r&   r'   r(   r)   r   )rs   getrA   rB   r   r   r{   r   )r   rF   r   r   r   r   r   r   s           rE   test_load_bulk_existingz(TestClassMethods.test_load_bulk_existing   s    }}  e ,ooi.
, S).)=)=S)=)IJ#SXXJ	Ji F>$::::xx(*** Ks   Bc                    |j                         }|D cg c]-  }|j                  |j                         |j                         f/ }}|t        k(  sJ t        |D cg c]  }t        |      |k(   c}      sJ y c c}w c c}w r>   )r|   r   r}   r~   r   r   r   )r   rF   nodesr   r   s        rE   test_get_tree_allz"TestClassMethods.test_get_tree_all  st     HMN1q';';'=>NNie4DGu$4555 O4s   2A<Bc                 :    |j                  d      t        k(  sJ y )NFkeep_ids)r   rB   r   rF   s     rE   test_dump_bulk_allz#TestClassMethods.test_dump_bulk_all  s    .);;;rH   c                    |j                   j                  d      }|j                  t        |       |j                   j                  |j                        }|j                  |      }|D cg c]-  }|j                  |j                         |j                         f/ }}g d}||k(  sJ t        |D cg c]  }t        |      |k(   c}      sJ y c c}w c c}w )Nr#   r   pk)r   r   r   r   r   r   r   r   r   r   r   )rs   r   rA   rB   r   r|   r   r}   r~   r   r   r   rF   r   r   r   r   r   s          rE   test_get_tree_nodez#TestClassMethods.test_get_tree_node  s    }}  e ,	4( }}  DGG ,t$HMN1q';';'=>NN
 he4DGu$4555 O 5s   .2C6Cc                 n   |j                   j                  d      }d|j                         k(  sJ |j                  |      }|D cg c]-  }|j                  |j                         |j                         f/ }}dg}||k(  sJ t        |D cg c]  }t        |      |k(   c}      sJ y c c}w c c}w )Nr   r   r   r+   )rs   r   r~   r|   r   r}   r   r   r   s          rE   test_get_tree_leafz#TestClassMethods.test_get_tree_leaf*  s    }}  c *D++----t$HMN1q';';'=>NN=he4DGu$4555 O 5s   2B-B2c                     ddg dfddg dfddg dfddg dfd	dg dfd
ddgdfdddgdfddg dfddg dfddddgdfg
}| j                  ||       y )Nr   Tr   r   Fr    r,   r!   r"   r#   r0   r&   r'   r(   r)   r   r   rF   r   s      rE   test_get_annotated_list_allz,TestClassMethods.test_get_annotated_list_all4  s    $A%Q4Q5"a 5"a D1#q!51#q!%Q%Q4!Q#
 	''x8rH   c           	          |j                   j                  d      }ddg dfddg dfddg dfd	dg dfd
ddgdfddddgdfg}| j                  |||       y )Nr   r   Tr   r    r,   r!   Fr"   r#   r0   r&   rs   r   r   r   rF   r   r   s       rE   test_get_annotated_list_nodez-TestClassMethods.test_get_annotated_list_nodeC  s    }}  c *$A4Q5"a 5"a D1#q!51a&!$
 	''x>rH   c                 r    |j                   j                  d      }dddgdfg}| j                  |||       y )Nr   r   Tr   r   r   s       rE   test_get_annotated_list_leafz-TestClassMethods.test_get_annotated_list_leafO  s>    }}  c *$Q'(''x>rH   c                     |j                   j                  d      }|j                  t        |       |j                   j                  |j                        }|j                  |d      }ddit        dg}||k(  sJ y )Nr#   r   r   Fr   r$   )rs   r   rA   rB   r   r   )r   rF   r   r   r   s        rE   test_dump_bulk_nodez$TestClassMethods.test_dump_bulk_nodeT  sq    }}  e ,	4( }}  DGG ,oodE*$e_)DEhrH   c                 |   |j                  d      }|j                  j                         j                          |j	                  |d d       |j                  d      }||k(  sJ |j                         D cg c]-  }|j                  |j                         |j                         f/ }}|t        k(  sJ y c c}w )NTr   )
r   rs   r   deleterA   r|   r   r}   r~   r   )r   rF   expr   r   s        rE   #test_load_and_dump_bulk_keeping_idsz4TestClassMethods.test_load_and_dump_bulk_keeping_ids_  s    ooto,""$T4(ooto,czz FK^^EU
@AQVVQ[[]A$8$8$:;
 
 i
s   92B9c           	      f   |j                   j                         j                          t        j                  j                   j                  d|j                  z        \  }}dd|j                  did|j                  ddd|j                  didd|j                  did	|j                  ddd
|j                  digddd|j                  digddd|j                  did|j                  ddd|j                  digdg}|j                  |       |j                  d      }||k(  sJ y )NzTest %sr   r   r   )r   relatedr   r    r!   r"   r#   r$   r&   r'   r(   r)   Fr   )
rs   r   r   r   RelatedModelget_or_creater   r   rA   r   )r   rT   r   createdrelated_datar   s         rE   test_load_and_dump_bulk_with_fkz0TestClassMethods.test_load_and_dump_bulk_with_fkk  sI   !!#**,!..66DD]333 E 

 cgjj9:!$<dwzzBCdwzzBC)-'** E#e

%KL% dwzzBC
 cgjj9:!$<dwzzBC#
0 	-%%u%5l"""rH   c                     |j                         }g d}|D cg c]  }|j                   c}|k(  sJ t        |D cg c]  }t        |      |k(   c}      sJ y c c}w c c}w )Nr   r   r'   r(   )r   r   r   r   )r   rF   r   r   r   s        rE   test_get_root_nodesz$TestClassMethods.test_get_root_nodes  s\    ""$'&)*d		*h666C8DDJ%'8999 +8s
   AA!c                 f    |j                         }|j                  dk(  sJ t        |      |k(  sJ y Nr   )r   r   r   r   rF   r   s      rE   test_get_first_root_nodez)TestClassMethods.test_get_first_root_node  s2    '')xx3CyE!!!rH   c                 f    |j                         }|j                  dk(  sJ t        |      |k(  sJ y )Nr(   )r   r   r   r   s      rE   test_get_last_root_nodez(TestClassMethods.test_get_last_root_node  s2    &&(xx3CyE!!!rH   c                     |j                  d      }|j                         dk(  sJ |j                         }|j                  dk(  sJ t	        |      |k(  sJ y )N5r   r,   )r   r}   r   r   r   )r   rF   r   r   s       rE   test_add_rootzTestClassMethods.test_add_root  sV    nn#n&}}!###&&(xx3CyE!!!rH   c                      |d      }|j                  |      }||k(  sJ |j                         }|j                  dk(  sJ t        |      |k(  sJ y )Nr   r   instance)r   r   r   r   )r   rF   r   resultr   s        rE   "test_add_root_with_passed_instancez3TestClassMethods.test_add_root_with_passed_instance  sW    o-}}&&(xx3CyE!!!rH   c                     |j                   j                  d      }t        j                  t              5  |j                  |       d d d        y # 1 sw Y   y xY w)Nr(   r   r  )rs   r   pytestraisesr   r   )r   rF   r   s      rE   )test_add_root_with_already_saved_instancez:TestClassMethods.test_add_root_with_already_saved_instance  sI    mmS)]]+, 	)NNCN(	) 	) 	)   AAN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r
  r   rH   rE   r   r      sX    +>6<6269
??
	
 !#F:"
"
"")rH   r   c                   ~    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zy)TestSimpleNodeMethodsc                     g d}|D ]6  \  }}|j                   j                  |      j                         }||k(  r6J  y )N))r   T)r   T)r(   T)r    F)r&   F)r!   F)r#   Fr   rs   r   is_rootr   rF   r   r   r   r   s         rE   test_is_rootz"TestSimpleNodeMethods.test_is_root  sJ    
 # 	#ND(--###.668C(?"?	#rH   c                     g d}|D ]6  \  }}|j                   j                  |      j                         }||k(  r6J  y )N))r   F)r"   F)r#   Tr   rs   r   is_leafr  s         rE   test_is_leafz"TestSimpleNodeMethods.test_is_leaf  sJ    

 # 	#ND(--###.668C(?"?	#rH   c                     g d}|D ]P  \  }}|j                   j                  |      j                         }|j                  |k(  sJ t	        |      |k(  rPJ  y )N)r   r   r   r   r(   r(   r    r   r&   r   r!   r   )r#   r   r   )rs   r   get_rootr   r   r   rF   r   r   r   r   s         rE   test_get_rootz#TestSimpleNodeMethods.test_get_root  sb    
 # 	'ND(==$$$$/88:D99(((:&&&	'rH   c                    g d}t        |      }i }|j                         D ]d  \  }}|j                  j                  |      }|j	                         }|r!|j
                  |k(  sJ t        |      |k(  sJ |J |||<   d|_        f |j                         D ]C  \  }}||   }|j	                  d      }|r"|j
                  |k(  sJ t        |      |k(  r>J |CJ  y )N))r   Nr   Nr(   Nr  r  r  )r#   r"   r   zCORRUPTED!!!T)dictrw   rs   r   
get_parentr   r   _parent_obj)r   rF   r   objsr   r   r   r   s           rE   test_get_parentz%TestSimpleNodeMethods.test_get_parent  s    
 Dz"jjl 
	.ND(==$$$$/D__&F{{h...F|u,,,~%~DJ-D
	. #jjl 		&ND(:D __T*F{{h...F|u,,,~%~		&rH   c           	      (   dg dfddgfdg fg}|D ]u  \  }}|j                   j                  |      j                         }|D cg c]  }|j                   c}|k(  sJ t	        |D cg c]  }t        |      |k(   c}      ruJ  y c c}w c c}w )Nr   r    r!   r"   r&   r"   r#   r   )rs   r   get_childrenr   r   r   )r   rF   r   r   r   r%   r   s          rE   test_get_childrenz'TestSimpleNodeMethods.test_get_children  s    *+E7OBK

 # 	CND(}}((d(3@@BH*23$DII3x???AT
e+ABBB	C3A   B
)B
c                     g d}|D ]6  \  }}|j                   j                  |      j                         }||k(  r6J  y )N))r   r.   r"   r,   r#   r   r   rs   r   r~   r  s         rE   test_get_children_countz-TestSimpleNodeMethods.test_get_children_count
  sJ    

 # 	#ND(--###.AACC(?"?	#rH   c           	      ,   dg dfdg dfddgfg}|D ]u  \  }}|j                   j                  |      j                         }|D cg c]  }|j                   c}|k(  sJ t	        |D cg c]  }t        |      |k(   c}      ruJ  y c c}w c c}w )Nr   r   r    r*  r#   r   )rs   r   get_siblingsr   r   r   )r   rF   r   r   r   siblingsr   s          rE   test_get_siblingsz'TestSimpleNodeMethods.test_get_siblings  s    &'+,UG

 # 	CND(}}((d(3@@BH*23$DII3x???AT
e+ABBB	C3As   B+B
c                     g d}|D ]P  \  }}|j                   j                  |      j                         }|j                  |k(  sJ t	        |      |k(  rPJ  y )N)r   r   r  )r(   r   )r    r    )r&   r    r!   r    r#   r#   r   )rs   r   get_first_siblingr   r   r  s         rE   test_get_first_siblingz,TestSimpleNodeMethods.test_get_first_sibling  sb    
 # 	'ND(==$$$$/AACD99(((:&&&	'rH   c                     g d}|D ]W  \  }}|j                   j                  |      j                         }||5J |j                  |k(  sJ t	        |      |k(  rWJ  y )N)r8  r"  )r(   r'   r    N)r&   r"   r9  r#   Nr   )rs   r   get_prev_siblingr   r   r  s         rE   test_get_prev_siblingz+TestSimpleNodeMethods.test_get_prev_sibling.  r    
 # 	+ND(==$$$$/@@BD|#|yyH,,,DzU***	+rH   c                     g d}|D ]W  \  }}|j                   j                  |      j                         }||5J |j                  |k(  sJ t	        |      |k(  rWJ  y )N)r   r'   )r   r   r#  )r    r!   )r&   N)r!   r"   r?  r   )rs   r   get_next_siblingr   r   r  s         rE   test_get_next_siblingz+TestSimpleNodeMethods.test_get_next_sibling@  rB  rH   c                     g d}|D ]P  \  }}|j                   j                  |      j                         }|j                  |k(  sJ t	        |      |k(  rPJ  y )N))r   r(   )r   r(   r  )r    r&   )r&   r&   )r!   r&   r:  r   )rs   r   get_last_siblingr   r   r  s         rE   test_get_last_siblingz+TestSimpleNodeMethods.test_get_last_siblingR  sb    
 # 	'ND(==$$$$/@@BD99(((:&&&	'rH   c                     g d}|D ]W  \  }}|j                   j                  |      j                         }||5J |j                  |k(  sJ t	        |      |k(  rWJ  y )N))r   r    r>  r"   r#   r?  r   )rs   r   get_first_childr   r   r  s         rE   test_get_first_childz*TestSimpleNodeMethods.test_get_first_childa  sr    
 # 	+ND(==$$$$/??AD|#|yyH,,,DzU***	+rH   c                     g d}|D ]W  \  }}|j                   j                  |      j                         }||5J |j                  |k(  sJ t	        |      |k(  rWJ  y )N))r   r&   r>  rK  r?  r   )rs   r   get_last_childr   r   r  s         rE   test_get_last_childz)TestSimpleNodeMethods.test_get_last_childp  sr    
 # 	+ND(==$$$$/>>@D|#|yyH,,,DzU***	+rH   c           	      (   dg fddgfdddgfg}|D ]u  \  }}|j                   j                  |      j                         }|D cg c]  }|j                   c}|k(  sJ t	        |D cg c]  }t        |      |k(   c}      ruJ  y c c}w c c}w )Nr   r    r#   r"   r   )rs   r   get_ancestorsr   r   r   r   rF   r   r   r   r   r   s          rE   test_get_ancestorsz(TestSimpleNodeMethods.test_get_ancestors  s    "IC5MS$K 

 # 	@ND(MM%%4%0>>@E*/0$DII0H<<<>T
e+>???	@0>r-  c           	      6   dg dfddgfdg fdg fddgfg}|D ]u  \  }}|j                   j                  |      j                         }|D cg c]  }|j                   c}|k(  sJ t	        |D cg c]  }t        |      |k(   c}      ruJ  y c c}w c c}w )	Nr   )r    r!   r"   r#   r&   r"   r#   r   r(   r)   r   )rs   r   get_descendantsr   r   r   rS  s          rE   test_get_descendantsz*TestSimpleNodeMethods.test_get_descendants  s    12E7OBK"I4&M
 # 	@ND(MM%%4%0@@BE*/0$DII0H<<<>T
e+>???	@0>s   B0B
c                     g d}|D ]6  \  }}|j                   j                  |      j                         }||k(  r6J  y )N))r   r   r/  r0  r   r   r(   r,   r   rs   r   get_descendant_countr  s         rE   test_get_descendant_countz/TestSimpleNodeMethods.test_get_descendant_count  sJ    
 # 	#ND(--###.CCEC(?"?	#rH   c                     g d}|D ]T  \  }}}|j                   j                  |      }|j                   j                  |      }|j                  |      |k(  rTJ  y )N))r   r   T)r   r   T)r    r   Fr#   r   F)r!   r"   T)r#   r"   F)r#   r#   Tr   )rs   r   is_sibling_ofr   rF   r   desc1desc2r   node1node2s           rE   test_is_sibling_ofz(TestSimpleNodeMethods.test_is_sibling_of  sh    
 '+ 	:"E5(MM%%5%1EMM%%5%1E&&u-999	:rH   c                     g d}|D ]T  \  }}}|j                   j                  |      }|j                   j                  |      }|j                  |      |k(  rTJ  y )N)r   r   Fr   r   Fr    r   Tr_  r#   r"   Tr#   r#   Fr   )rs   r   is_child_ofra  s           rE   test_is_child_ofz&TestSimpleNodeMethods.test_is_child_of  sh    
 '+ 	8"E5(MM%%5%1EMM%%5%1E$$U+x777	8rH   c                     g d}|D ]T  \  }}}|j                   j                  |      }|j                   j                  |      }|j                  |      |k(  rTJ  y )N)rh  ri  rj  )r#   r   Trk  rl  r   )rs   r   is_descendant_ofra  s           rE   test_is_descendant_ofz+TestSimpleNodeMethods.test_is_descendant_of  sh    
 '+ 	="E5(MM%%5%1EMM%%5%1E))%0H<<<	=rH   N)r   r   r   r  r  r   r(  r,  r2  r6  r<  rA  rF  rI  rM  rP  rT  rW  r]  rf  rn  rq  r   rH   rE   r  r    sf    ##'!&F	C#	C'+$+$'++	@@
#:8=rH   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestAddChildc                     |j                   j                  d      j                  d       g d}| j                  |      |k(  sJ y )Nr#   r   2311r+   r-   r/   r1   r2   )r#   r4   r,   )ru  r.   r   r5   r6   r7   r8   rs   r   	add_childr   r   s      rE   test_add_child_to_leafz#TestAddChild.test_add_child_to_leaf  sD    u%//V/<
 xx(***rH   c                     |j                   j                  d      j                  d       g d}| j                  |      |k(  sJ y )Nr   r   25)r+   r   r,   r   r/   r1   r2   r3   r5   )r{  r0   r   r6   r7   r8   rw  r   s      rE   test_add_child_to_nodez#TestAddChild.test_add_child_to_node  sD    s#--4-8
 xx(***rH   c                      |d      }|j                   j                  d      j                  |      }||k(  sJ g d}| j                  |      |k(  sJ y )Nru  r   r#   r  rv  rw  )r   rF   childr  r   s        rE   #test_add_child_with_passed_instancez0TestAddChild.test_add_child_with_passed_instance  s\    6"""".88%8H
 xx(***rH   c                     |j                   j                  d      }t        j                  t              5  |j                   j                  d      j                  |       d d d        y # 1 sw Y   y xY w)Nr    r   r   r  )rs   r   r  r	  r   rx  )r   rF   r  s      rE   *test_add_child_with_already_saved_instancez7TestAddChild.test_add_child_with_already_saved_instance  sb    !!t!,]]+, 	BMM3'1151A	B 	B 	Bs   -A,,A5c                 ~     |dd      }|j                   j                  d      j                  |      }||k(  sJ y
        If the model is using a natural primary key then it will be
        already set when the instance is inserted.
        ?B znatural key)r   r   r   r   r  Nrs   r   rx  r   rF   r  r  s       rE   test_add_child_with_pk_setz'TestAddChild.test_add_child_with_pk_set  A    
 m4""",666FrH   c                    	 t        t        d      d        }|j                  j                  d      }|j	                         sJ |j                  d       t        j                  d       y # t        j                  d       w xY w)Ntest_add_child_post_save)dispatch_uidc                 n    | j                         }|j                          |j                         dk(  sJ y Nr,   )r%  refresh_from_dbr\  )r  kwargsr   s      rE   on_post_savez;TestAddChild.test_add_child_post_save.<locals>.on_post_save  s3    !,,.&&(224999rH   r#   r   ru  )r
   r	   rs   r   r  rx  
disconnect)r   rF   r  r   s       rE   r  z%TestAddChild.test_add_child_post_save  s|    	Ji.HI: J: ]]&&E&2F>>###&)  .HII  .HIs   AA0 0BN)	r   r   r   ry  r}  r  r  r  r  r   rH   rE   rs  rs    s"    +"+"+&B
JrH   rs  c                   r    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zy)TestAddSiblingc                     t        j                  t              5  |j                  j	                  d      j                  d       d d d        y # 1 sw Y   y xY wNr#   r   invalid_pos)r  r	  r   rs   r   add_siblingr   s     rE   test_add_sibling_invalid_posz+TestAddSibling.test_add_sibling_invalid_pos(  sG    ]]?+ 	EMM5)55mD	E 	E 	Es   ,AAc                     |j                   j                  d      }t        j                  t              5  |j                  dd       d d d        y # 1 sw Y   y xY w)Nr   r   sorted-siblingaaa)rs   r   r  r	  r   r  )r   rF   node_wchildrens      rE   $test_add_sibling_missing_nodeorderbyz3TestAddSibling.test_add_sibling_missing_nodeorderby,  sS    ***4]]-. 	E&&'7e&D	E 	E 	Es   AAc                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ |j	                         j
                  dk(  sJ y )Nr   r   last-siblingr   r,   rs   r   r  r}   rH  r   )r   rF   r  r   s       rE   test_add_sibling_last_rootz)TestAddSibling.test_add_sibling_last_root1  s_    ***4((c(B}}!###..055<<<rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ |j	                         j
                  dk(  sJ y )Nr#   r   r  232r4   r  )r   rF   r   r   s       rE   test_add_sibling_lastz$TestAddSibling.test_add_sibling_last7  s_    }}  e ,~E:}}!###$$&++u444rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr   r   first-siblingnewr,   r  r,   r   r+   r-   r/   r1   r2   r3   r5   r6   r7   r8   rs   r   r  r}   r   r   rF   r  r   r   s        rE   test_add_sibling_first_rootz*TestAddSibling.test_add_sibling_first_root=  sa    ***4((u(E}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr"   r   r  r  r0   )r+   r|  r  r0   r   r/   r1   r2   r3   r5   r6   r7   r8   r  r  s        rE   test_add_sibling_firstz%TestAddSibling.test_add_sibling_firstP  sa    ***5((u(E}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr   r   leftr  r,   )r+   r  r-   r/   r1   r2   r3   r5   r6   r7   r8   r  r  s        rE   test_add_sibling_left_rootz)TestAddSibling.test_add_sibling_left_rootc  sa    ***4((e(<}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr"   r   r  r  r0   )r+   r|  r/   r1   r  r2   r3   r5   r6   r7   r8   r  r  s        rE   test_add_sibling_leftz$TestAddSibling.test_add_sibling_leftv  sa    ***5((e(<}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr   r   r  r  r,   r  r  r   rF   r   r   r   s        rE   !test_add_sibling_left_noleft_rootz0TestAddSibling.test_add_sibling_left_noleft_root  sa    }}  c *vE2}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr#   r   r  r  r4   )r+   r-   r/   r1   r"   r0   r0   r  r4   r   r3   r5   r6   r7   r8   r  r  s        rE   test_add_sibling_left_noleftz+TestAddSibling.test_add_sibling_left_noleft  sa    }}  e ,vE2}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr   r   rightr  r,   )r+   r-   r/   r1   r2   r3   r5   r  r6   r7   r8   r  r  s        rE   test_add_sibling_right_rootz*TestAddSibling.test_add_sibling_right_root  sa    ***4((u(=}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr"   r   r  r  r0   )r+   r|  r/   r1   r2   r3   r  r5   r6   r7   r8   r  r  s        rE   test_add_sibling_rightz%TestAddSibling.test_add_sibling_right  sa    ***5((u(=}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr(   r   r  r  r,   )r+   r-   r/   r1   r2   r3   r5   r6   r7   r8   r  r  r  s        rE   #test_add_sibling_right_noright_rootz2TestAddSibling.test_add_sibling_right_noright_root  sa    }}  c *wU3}}!###
 xx(***rH   c                     |j                   j                  d      }|j                  dd      }|j                         dk(  sJ g d}| j	                  |      |k(  sJ y )Nr#   r   r  r  r4   )r+   r-   r/   r1   r  r3   r  r5   r6   r7   r8   r  r  s        rE   test_add_sibling_right_norightz-TestAddSibling.test_add_sibling_right_noright  sa    }}  e ,wU3}}!###
 xx(***rH   c                     |j                   j                  d      } |d      }|j                  d|      }||k(  sJ |j                         dk(  sJ |j	                         j
                  dk(  sJ y )Nr   r   r   r  r  r,   r  )r   rF   r  r   r  s        rE   %test_add_sibling_with_passed_instancez4TestAddSibling.test_add_sibling_with_passed_instance  st    ***4o++NS+I}}}}!###..055<<<rH   c                     |j                   j                  d      }|j                   j                  d      }t        j                  t              5  |j                  d|       d d d        y # 1 sw Y   y xY w)Nr   r   r(   r  r  )rs   r   r  r	  r   r  )r   rF   r  existing_nodes       rE   'test_add_sibling_already_saved_instancez6TestAddSibling.test_add_sibling_already_saved_instance  si    ***4))s)3]]+, 	O&&~&N	O 	O 	Os   A//A8c                 ~     |dd      }|j                   j                  d      j                  |      }||k(  sJ yr  r  r  s       rE   r  z)TestAddSibling.test_add_child_with_pk_set	  r  rH   N)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   rH   rE   r  r  &  sZ    EE
=5+&+&+&+&+&+&+&+&+&+&=OrH   r  c                       e Zd Ze ej
                  d eej                  ej                        d       d               Z
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zy)
TestDeleter9   c                 F    d| d   j                    d| d   j                    S )Nbase=r   z dep=r,   r   fvs    rE   <lambda>zTestDelete.<lambda>  s%    r!u~~.eBqENN3CD rH   r;   r<   r   c                     | j                   \  }}|j                  t               |j                  j	                         D ]  } ||      j                           ||fS )N)r   )r@   rA   rB   rs   r   save)rD   
base_model	dep_modelr   s       rE   delete_dep_model_pairz TestDelete.delete_dep_model_pair  sZ     !(
IY'&&**, 	(D4 %%'	(9$$rH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )Nr#   r   )	r+   r-   r/   r1   r"   r0   r   r5   r6   r7   r8   r0   r,   rs   r   r   r   _metalabelr   r  delete_modelr  r  r   s         rE   test_delete_leafzTestDelete.test_delete_leaf"  s    "7i%%))u)5<<>

 xx%111!l00669??;P;PRSTUUUUrH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )Nr"   r   )r+   )r   r,   r4   r/   r1   r5   r6   r7   r8   r.   r0   r  r  s         rE   test_delete_nodezTestDelete.test_delete_node3  s    "7i%%))t)4;;=	
 xx%111!l00669??;P;PRSTUUUUrH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )Nr   r   r+   r6   r7   r8      r   r  r  s         rE   test_delete_rootzTestDelete.test_delete_rootC  s}    "7i%%))s)3::<Hxx%111"|1177IOO<Q<QSTUVVVVrH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )NrD  desc__in)r+   r7   r8         rs   r   r   r   r  r  r  s         rE   test_delete_filter_root_nodesz(TestDelete.test_delete_filter_root_nodesJ  s}    "7i%%,,j,AHHJ;xx%111"|1177IOO<Q<QSTUVVVVrH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )N)r   r"   r#   r  r  r  r   r  r  s         rE   test_delete_filter_childrenz&TestDelete.test_delete_filter_childrenQ  s~    "7i%%,,6H,IPPRHxx%111"|1177IOO<Q<QSTUVVVVrH   c                     |\  }}|j                   j                  d      j                         }| j                  |      t        k(  sJ |di fk(  sJ y )N)ZZZXXXr  r   )rs   r   r   r   r   r   r  r  r  r  s        rE   test_delete_nonexistant_nodesz(TestDelete.test_delete_nonexistant_nodesX  sW    "7i%%,,n,ELLNxx%222!R   rH   c                     |\  }}|j                   j                  d      j                         }g d}| j                  |      |k(  sJ |d|j                  j
                  d|j                  j
                  difk(  sJ y )Nr  r  r  r  r   r  r  s         rE   test_delete_same_node_twicez&TestDelete.test_delete_same_node_twice^  s}    "7i%%,,j,AHHJHxx%111"|1177IOO<Q<QSTUVVVVrH   c                     |\  }}|j                         j                         }|d|j                  j                  d|j                  j                  difk(  sJ |j                  j                         dk(  sJ y N   
   r   )r   r   r  r  rs   countr  s        rE   test_delete_all_root_nodesz%TestDelete.test_delete_all_root_nodese  ss    "7i,,.557"|1177Y__=R=RTVWXXXX##))+q000rH   c                    |\  }}|j                   j                         j                         }|d|j                  j                  d|j                  j                  difk(  sJ |j                   j                         dk(  sJ y r  )rs   r   r   r  r  r  r  s        rE   test_delete_all_nodesz TestDelete.test_delete_all_nodesk  sy    "7i%%))+224"|1177Y__=R=RTVWXXXX##))+q000rH   N)r   r   r   staticmethodr  fixturezipr   BASE_MODELS
DEP_MODELSr  r  r  r  r  r  r  r  r  r   r   rH   rE   r  r    sv    V^^6%%v'8'89D
% %V"V WWW!W11rH   r  c                       e Zd Zd Zd Zd Zy)TestMoveErrorsc                     |j                   j                  d      }t        j                  t              5  |j                  |d       d d d        y # 1 sw Y   y xY wr  )rs   r   r  r	  r   mover   rF   r   s      rE   test_move_invalid_posz$TestMoveErrors.test_move_invalid_post  sH    }}  e ,]]?+ 	+IIdM*	+ 	+ 	+r  c                     |j                   j                  d      }|j                   j                  d      }t        j                  t              5  |j                  |d       d d d        y # 1 sw Y   y xY w)Nr   r   r#   r  )rs   r   r  r	  r   r	  )r   rF   r   targets       rE   test_move_to_descendantz&TestMoveErrors.test_move_to_descendanty  s`    }}  c *""".]]23 	/IIfo.	/ 	/ 	/s   A..A7c                 <   |j                   j                  d      }t        j                  t              5  |j                  |d       d d d        t        j                  t              5  |j                  |d       d d d        y # 1 sw Y   >xY w# 1 sw Y   y xY w)Nr#   r   sorted-childr  )rs   r   r  r	  r   r	  r
  s      rE   test_move_missing_nodeorderbyz,TestMoveErrors.test_move_missing_nodeorderby  s    }}  e ,]]-. 	,IIdN+	,]]-. 	.IId,-	. 	.	, 	,	. 	.s   B*BBBN)r   r   r   r  r  r  r   rH   rE   r  r  r  s    +
/.rH   r  c                       e Zd Zd Zy)TestMoveSortedErrorsc                     |j                  ddd      }t        j                  t              5  |j	                  |d       d d d        y # 1 sw Y   y xY w)Nr4   zxyval1val2r   r  )r   r  r	  r   r	  )r   rR   r   s      rE   test_nonsorted_move_in_sortedz2TestMoveSortedErrors.test_nonsorted_move_in_sorted  sH    $$!!%$@]]?+ 	$IIdF#	$ 	$ 	$s   A

AN)r   r   r   r  r   rH   rE   r  r    s    $rH   r  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestMoveLeafRootc                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   r  )
r+   r-   r/   r1   r  r5   r6   r7   r8   r#   r,   r   rs   r   r	  r   r   rF   r  r   s       rE    test_move_leaf_last_sibling_rootz1TestMoveLeafRoot.test_move_leaf_last_sibling_root  sZ    """,u%**6>B
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   r  )
r  r+   r-   r/   r1   r  r5   r6   r7   r8   r  r  s       rE   !test_move_leaf_first_sibling_rootz2TestMoveLeafRoot.test_move_leaf_first_sibling_root  sZ    """,u%**6?C
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   r  
r+   r  r-   r/   r1   r  r5   r6   r7   r8   r  r  s       rE    test_move_leaf_left_sibling_rootz1TestMoveLeafRoot.test_move_leaf_left_sibling_root  sZ    """,u%**66:
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   r  )
r+   r-   r/   r1   r  r5   r  r6   r7   r8   r  r  s       rE   !test_move_leaf_right_sibling_rootz2TestMoveLeafRoot.test_move_leaf_right_sibling_root  sZ    """,u%**67;
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   
last-child
r+   r|  r/   r1   r  r5   r#   r0   r   r6   r7   r8   r  r  s       rE   test_move_leaf_last_child_rootz/TestMoveLeafRoot.test_move_leaf_last_child_root  sZ    """,u%**6<@
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r#   first-child
r+   r|  r+  r/   r1   r  r5   r6   r7   r8   r  r  s       rE   test_move_leaf_first_child_rootz0TestMoveLeafRoot.test_move_leaf_first_child_root  sZ    """,u%**6=A
 xx(***rH   N)	r   r   r   r   r"  r%  r'  r,  r0  r   rH   rE   r  r    s     +"+"+"+"+"+rH   r  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestMoveLeafc                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r  r*  r  r  s       rE   test_move_leaf_last_siblingz(TestMoveLeaf.test_move_leaf_last_sibling  sZ    """-u%**6>B
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r  r/  r  r  s       rE   test_move_leaf_first_siblingz)TestMoveLeaf.test_move_leaf_first_sibling  sZ    """-u%**6?C
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r  )
r+   r|  r/   r+  r1   r  r5   r6   r7   r8   r  r  s       rE   test_move_leaf_left_siblingz(TestMoveLeaf.test_move_leaf_left_sibling  sZ    """-u%**66:
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r  )
r+   r|  r/   r1   r+  r  r5   r6   r7   r8   r  r  s       rE   test_move_leaf_right_siblingz)TestMoveLeaf.test_move_leaf_right_sibling-  sZ    """-u%**67;
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       | j                  |      t        k(  sJ y )Nr#   r   r  rs   r   r	  r   r   r   rF   r  s      rE   "test_move_leaf_left_sibling_itselfz/TestMoveLeaf.test_move_leaf_left_sibling_itself>  sQ    """.u%**66:xx)+++rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r)  
r+   r-   r/   )r!   r0   r,   r3   r  r5   r6   r7   r8   r  r  s       rE   test_move_leaf_last_childz&TestMoveLeaf.test_move_leaf_last_childC  sZ    """-u%**6<@
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr!   r   r#   r.  r@  r  r  s       rE   test_move_leaf_first_childz'TestMoveLeaf.test_move_leaf_first_childT  sZ    """-u%**6=A
 xx(***rH   N)
r   r   r   r4  r6  r8  r:  r>  rA  rC  r   rH   rE   r2  r2    s%    +"+"+"+",
+"+rH   r2  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestMoveBranchRootc                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r  
r7   r8   r+   r-   r/   r1   r2   r3   r5   r6   r  r  s       rE   #test_move_branch_first_sibling_rootz6TestMoveBranchRoot.test_move_branch_first_sibling_rooth  sZ    """,s#((A
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r  r*   r  r  s       rE   "test_move_branch_last_sibling_rootz5TestMoveBranchRoot.test_move_branch_last_sibling_rooty  sZ    """,s#((@
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r  )
r+   r7   r8   r-   r/   r1   r2   r3   r5   r6   r  r  s       rE   "test_move_branch_left_sibling_rootz5TestMoveBranchRoot.test_move_branch_left_sibling_root  sZ    """,s#((8
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r  )
r+   r-   r/   r1   r2   r3   r5   r7   r8   r6   r  r  s       rE   #test_move_branch_right_sibling_rootz6TestMoveBranchRoot.test_move_branch_right_sibling_root  sZ    """,s#((9
 xx(***rH   c                     |j                   j                  d      j                         }|j                   j                  d      j                  |d       g d}| j	                  |      |k(  sJ y )Nr   r   r(   r  rG  rs   r   r;  r	  r   r  s       rE   )test_move_branch_left_noleft_sibling_rootz<TestMoveBranchRoot.test_move_branch_left_noleft_sibling_root  sc    """,>>@s#((8
 xx(***rH   c                     |j                   j                  d      j                         }|j                   j                  d      j                  |d       g d}| j	                  |      |k(  sJ y )Nr   r   r(   r  r*   rs   r   rH  r	  r   r  s       rE   +test_move_branch_right_noright_sibling_rootz>TestMoveBranchRoot.test_move_branch_right_noright_sibling_root  sc    """,==?s#((9
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r.  
r+   r|  r(   r0   r,   r)   r4   r   r/   r1   r2   r3   r5   r6   r  r  s       rE   !test_move_branch_first_child_rootz4TestMoveBranchRoot.test_move_branch_first_child_root  sZ    """,s#((?
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr   r   r(   r)  
r+   r|  r/   r1   r2   r3   r5   rW  rX  r6   r  r  s       rE    test_move_branch_last_child_rootz3TestMoveBranchRoot.test_move_branch_last_child_root  sZ    """,s#((>
 xx(***rH   N)r   r   r   rH  rJ  rL  rN  rQ  rT  rY  r\  r   rH   rE   rE  rE  f  s*    +"+"+"+"+"+"+"+rH   rE  c                   B    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
d	 Zy
)TestMoveBranchc                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r  rV  r  r  s       rE   test_move_branch_first_siblingz-TestMoveBranch.test_move_branch_first_sibling  sZ    """-s#((A
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r  r[  r  r  s       rE   test_move_branch_last_siblingz,TestMoveBranch.test_move_branch_last_sibling  sZ    """-s#((@
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r  )
r+   r|  r/   r1   rW  rX  r2   r3   r5   r6   r  r  s       rE   test_move_branch_left_siblingz,TestMoveBranch.test_move_branch_left_sibling  sZ    """-s#((8
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r  )
r+   r|  r/   r1   r2   r3   rW  rX  r5   r6   r  r  s       rE   test_move_branch_right_siblingz-TestMoveBranch.test_move_branch_right_sibling&  sZ    """-s#((9
 xx(***rH   c                     |j                   j                  d      j                         }|j                   j                  d      j                  |d       g d}| j	                  |      |k(  sJ y )Nr"   r   r(   r  rV  rP  r  s       rE   $test_move_branch_left_noleft_siblingz3TestMoveBranch.test_move_branch_left_noleft_sibling7  sc    """-??As#((8
 xx(***rH   c                     |j                   j                  d      j                         }|j                   j                  d      j                  |d       g d}| j	                  |      |k(  sJ y )Nr"   r   r(   r  r[  rS  r  s       rE   &test_move_branch_right_noright_siblingz5TestMoveBranch.test_move_branch_right_noright_siblingH  sc    """->>@s#((9
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       | j                  |      t        k(  sJ y )Nr(   r   r  r<  r=  s      rE   $test_move_branch_left_itself_siblingz3TestMoveBranch.test_move_branch_left_itself_siblingY  sQ    """,s#((8xx)+++rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r.  )
r+   r-   r/   r1   r  r(   r4   r,   r)   r.   r   r3   r5   r6   r  r  s       rE   test_move_branch_first_childz+TestMoveBranch.test_move_branch_first_child^  sZ    """-s#((?
 xx(***rH   c                     |j                   j                  d      }|j                   j                  d      j                  |d       g d}| j                  |      |k(  sJ y )Nr"   r   r(   r)  )
r+   r-   r/   r1   r  r3   rn  ro  r5   r6   r  r  s       rE   test_move_branch_last_childz*TestMoveBranch.test_move_branch_last_childo  sZ    """-s#((>
 xx(***rH   N)r   r   r   r`  rb  rd  rf  rh  rj  rl  rp  rr  r   rH   rE   r^  r^    s/    +"+"+"+"+"+",
+"+rH   r^  c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestTreeSortedc           	          |j                         D cg c]C  }|j                  |j                  |j                  |j	                         |j                         fE c}S c c}w r>   )r|   r  r  r   r}   r~   )r   rR   r   s      rE   r   zTestTreeSorted.got  sS     "**,
 VVQVVQVVQ[[]A4H4H4JK
 	
 
s   AAc                 x   |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd
       |j                  ddd	       |j                  ddd       |j                  ddd       g d}| j                  |      |k(  sJ y )Nr4   r  r  r,   r.   bcdr0   r   abcfghqwevcx)r,   r.   rw  r,   r   )r0   r0   rz  r,   r   )r0   r   r  r,   r   )r4   r0   r{  r,   r   r4   r4   rx  r,   r   r}  )r4   r4   r  r,   r   )r.   r,   ry  r,   r   r   )r   rR   r   s      rE   test_add_root_sortedz#TestTreeSorted.test_add_root_sorted  s    11591159115911591159115911591159	
 xx%111rH   c                    |j                  ddd      }|j                  ddd       |j                  ddd       |j                  d	d
d       |j                  ddd       |j                  ddd       |j                  ddd       |j                  d	d	d       |j                  dd	d       g d}| j                  |      |k(  sJ y )Nr   r  r  r4   r  r,   r.   rw  r0   r   rx  ry  rz  r{  )	)r   r   r  r,      )r,   r.   rw  r0   r   r0   r0   rz  r0   r   r0   r   r  r0   r   r4   r0   r{  r0   r   r4   r4   rx  r0   r   r  r4   r4   r  r0   r   r.   r,   ry  r0   r   )r   rx  r   )r   rR   rootr   s       rE   test_add_child_root_sortedz)TestTreeSorted.test_add_child_root_sorted  s    $$!!%$@AAE2AAE2AAE2AAE2AAE2AAE2AAE2AAE2

 xx%111rH   c                    fd}j                  ddd      j                  } ||      j                  ddd      j                  } ||      j                  ddd        ||      j                  ddd        ||      j                  ddd        ||      j                  ddd	        ||      j                  ddd
       g d}| j                        |k(  sJ y )Nc                 <    j                   j                  |       S )Nr   )rs   r   )node_idrR   s    rE   r  z>TestTreeSorted.test_add_child_nonroot_sorted.<locals>.<lambda>  s    <#7#7#;#;w#;#G rH   r   ar  acaaavacaaccacb))r   r   r  r,   r4   )r   r   r  r0   r   )r   r   r  r0   r4   )r   r   r  r4   r   )r   r   r  r4   r   )r   r   r  r4   r   )r   r   r  r0   r   )r   r   rx  r   )r   rR   get_noderoot_idr  r   s    `    rE   test_add_child_nonroot_sortedz,TestTreeSorted.test_add_child_nonroot_sorted  s    G''QQS'ADD7#--114-HKK###>###>###?###?###?
 xx%111rH   c                 r   |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd
       |j                  ddd	       |j                  ddd       |j                  ddd       |j                         }|d   }|dd  D ]`  }|j                  j                  |j                        }|j                  j                  |j                        }|j                  |d       b g d}| j                  |      |k(  sJ y )Nr4   r  r  r,   r.   rw  r0   r   rx  ry  rz  r{  r   r   r  ))r,   r.   rw  r,   r  r  r  r  r  r  r  r  )r   r   rs   r   r   r	  r   r   rR   
root_nodesr  r   r   s         rE   test_move_sortedzTestTreeSorted.test_move_sorted  s>   11591159115911591159115911591159!002
AqrN 	.D''++tww+7D!))---;FIIfn-		.
	
 xx%111rH   c                    |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd
       |j                  ddd	       |j                  ddd       |j                  ddd       |j                         }|d   }|dd  D ]  }|j                  j                  |j                        }|j                  j                  |j                        }|xj
                  dz  c_        |j                          |j                  |d        g d}| j                  |      |k(  sJ y )Nr4   r  r  r,   r.   rw  r0   r   rx  ry  rz  r{  r   r   r  ))r   r0   rz  r,   r   )r   r   r  r,   r   )r,   r0   r{  r,   r   r,   r4   rx  r,   r   r  )r,   r4   r  r,   r   r|  )r0   r,   ry  r,   r   )	r   r   rs   r   r   r  r  r	  r   r  s         rE   test_move_sortedsiblingz&TestTreeSorted.test_move_sortedsibling  sU   11591159115911591159115911591159!002
AqrN 	0D''++tww+7D!))---;FIINIIIKIIf./	0	
 xx%111rH   N)	r   r   r   r   r~  r  r  r  r  r   rH   rE   rt  rt    s     
2*2.2,282rH   rt  c                      e Zd Ze ej
                  d eej                  ej                        d       d               Z
d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z y)TestInheritedModelsr9   c                 F    d| d   j                    d| d   j                    S )Nr  r   z inherited=r,   r  r  s    rE   r  zTestInheritedModels.<lambda>  s%    r!u~~.k"Q%..9IJ rH   r  c                    | j                   \  }}|j                  d       |j                  d        |d      }|j                  j                  d      j	                  |       |j                  j                  d      j	                  d       |j                  j                  d      j	                  d       |j                  j                  d      j	                  d        |d	      }|j                  |       |S )
Nr   r   r   r    r  211212r!   r'   )r@   r   rs   r   rx  )rD   r  rV   node21node3s        rE   rV   z#TestInheritedModels.inherited_model	  s     '.mm#
O%% d+C(22F2CD)333?D)333?C(222=S)U+rH   c                     |j                         D cg c]-  }|j                  |j                         |j                         f/ }}g d}||k(  sJ y c c}w )N)r+   )r   r,   r0   r    r0   r0   r  r4   r   r  r4   r   r1   r6   )r|   r   r}   r~   )r   rV   r   r   r   s        rE   r   z%TestInheritedModels.test_get_tree_all  s^     %--/
 VVQ[[]A$8$8$:;
 

 h
s   2Ac                     |j                   j                  d      }|j                  |      D cg c]-  }|j                  |j	                         |j                         f/ }}g d}||k(  sJ y c c}w )Nr    r   )r  r  r  )rs   r   r|   r   r}   r~   )r   rV   r   r   r   r   s         rE   r   z&TestInheritedModels.test_get_tree_node/  sy    &&***5 %--d3
 VVQ[[]A$8$8$:;
 


 h
s   2A0c                 t    |j                         }g d}|D cg c]  }|j                   c}|k(  sJ y c c}w )Nr   r   r'   r   )r   rV   r   r   r   s        rE   r   z'TestInheritedModels.test_get_root_nodes=  s5    ,,."&)*d		*h666*s   5c                 F    |j                         }|j                  dk(  sJ y r   )r   r   r   rV   r   s      rE   r   z,TestInheritedModels.test_get_first_root_nodeB  s     113xx3rH   c                 F    |j                         }|j                  dk(  sJ y )Nr'   )r   r   r  s      rE   r   z+TestInheritedModels.test_get_last_root_nodeF  s     002xx3rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         du sJ |j                         du sJ y Nr    r   r'   FTr  r   rV   r  r  s       rE   r  z TestInheritedModels.test_is_rootJ  ]     ((,,$,7''+++5~~5(((}}$&&&rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         du sJ |j                         du sJ y r  r  r  s       rE   r  z TestInheritedModels.test_is_leafP  r  rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         j                  dk(  sJ y Nr    r   r'   r   )rs   r   r  r   r  s       rE   r   z!TestInheritedModels.test_get_rootV  sj     ((,,$,7''+++5 %%,,,~~$$+++rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         J y r  )rs   r   r%  r   r  s       rE   r(  z#TestInheritedModels.test_get_parent\  sf     ((,,$,7''+++5  "''3...!)))rH   c                 @   |j                   j                  d      }|j                   j                  d      }|j                         D cg c]  }|j                   c}ddgk(  sJ |j                         D cg c]  }|j                   c}g k(  sJ y c c}w c c}w Nr    r   r'   r  r  )rs   r   r+  r   r   rV   r  r  r   s        rE   r,  z%TestInheritedModels.test_get_childrenb  s     ((,,$,7''+++5&,&9&9&;<d		<NNN&+&8&8&:;d		;rAAA =;   B:Bc                     |j                   j                  d      }|j                   j                  d      }|j                         dk(  sJ |j                         dk(  sJ y Nr    r   r'   r0   r   r1  r  s       rE   r2  z+TestInheritedModels.test_get_children_counth  sb     ((,,$,7''+++5((*a///'')Q...rH   c                 D   |j                   j                  d      }|j                   j                  d      }|j                         D cg c]  }|j                   c}ddgk(  sJ |j                         D cg c]  }|j                   c}g dk(  sJ y c c}w c c}w )Nr    r   r'   r!   r  )rs   r   r4  r   r  s        rE   r6  z%TestInheritedModels.test_get_siblingsn  s     ((,,$,7''+++5&,&9&9&;<d		<tLLL&+&8&8&:;d		;NNN =;s   B:Bc                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         j                  dk(  sJ y )Nr    r   r'   r   )rs   r   r;  r   r  s       rE   r<  z*TestInheritedModels.test_get_first_siblingt  sn     ((,,$,7''+++5'')..$666&&(--444rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         J |j                         j                  dk(  sJ y r  )rs   r   r@  r   r  s       rE   rA  z)TestInheritedModels.test_get_prev_siblingz  sf     ((,,$,7''+++5&&(000%%',,333rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         J y Nr    r   r'   r!   )rs   r   rE  r   r  s       rE   rF  z)TestInheritedModels.test_get_next_sibling  sf     ((,,$,7''+++5&&(--555%%'///rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         j                  dk(  sJ y r  )rs   r   rH  r   r  s       rE   rI  z)TestInheritedModels.test_get_last_sibling  sn     ((,,$,7''+++5&&(--555%%',,333rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         J y )Nr    r   r'   r  )rs   r   rL  r   r  s       rE   rM  z(TestInheritedModels.test_get_first_child  sf     ((,,$,7''+++5%%',,555$$&...rH   c                     |j                   j                  d      }|j                   j                  d      }|j                         j                  dk(  sJ |j                         J y )Nr    r   r'   r  )rs   r   rO  r   r  s       rE   rP  z'TestInheritedModels.test_get_last_child  sf     ((,,$,7''+++5$$&++u444##%---rH   c                 >   |j                   j                  d      }|j                   j                  d      }|j                         D cg c]  }|j                   c}dgk(  sJ |j                         D cg c]  }|j                   c}g k(  sJ y c c}w c c}w r  )rs   r   rR  r   r  s        rE   rT  z&TestInheritedModels.test_get_ancestors  s     ((,,$,7''+++5&,&:&:&<=d		=#FFF&+&9&9&;<d		<BBB ><s   B9Bc                 @   |j                   j                  d      }|j                   j                  d      }|j                         D cg c]  }|j                   c}ddgk(  sJ |j                         D cg c]  }|j                   c}g k(  sJ y c c}w c c}w r  )rs   r   rV  r   r  s        rE   rW  z(TestInheritedModels.test_get_descendants  s     ((,,$,7''+++5&,&<&<&>?d		?E5>QQQ&+&;&;&=>d		>"DDD @>r  c                     |j                   j                  d      }|j                   j                  d      }|j                         dk(  sJ |j                         dk(  sJ y r  r[  r  s       rE   r]  z-TestInheritedModels.test_get_descendant_count  sb     ((,,$,7''+++5**,111))+q000rH   c                 ~   |j                   d   }|j                  j                  d      }|j                          |j                  j                  d      }dD ].  }|j                  j	                  |      j                         s.J  |j                         D cg c]  }|j                   c}dgk(  sJ y c c}w )Nr   r    r   r   )r    r  r  r!   )	__bases__rs   r   r   r   existsrV  r   )r   rV   r  r  re  r   r   s          rE   test_cascading_deletionz+TestInheritedModels.test_cascading_deletion  s     %..q1
 ((,,$,7""&&C&0( 	ED!))00d0;BBDDD	E&+&;&;&=>d		>4&HHH>s   B:N)!r   r   r   r  r  r  r  r   r  INHERITED_MODELSrV   r   r   r   r   r   r  r  r   r(  r,  r2  r6  r<  rA  rF  rI  rM  rP  rT  rW  r]  r  r   rH   rE   r  r    s    V^^6%%v'>'>?J
   7
'',*B/O5404/.CE1IrH   r  c                   v    e Zd Zej                  j                   ej                  dd       d      d        Zy)TestMP_TreeAlphabetTREEBEARD_TEST_ALPHABETFz-TREEBEARD_TEST_ALPHABET env variable not set.)reasonc                    t         j                  }d}d}t        dt        |      dz         D ]  }|d| }t        |      dk\  sJ |dd D cg c]
  }|d   |z    }}|j	                  |D cg c]
  }|d   |z    c}       |j                  |d   |d   z          |j                  j                         j                          ||_	        d|_
        t        t        |      dz        D ]  }		 |j                  |	        |r n=|j                  j                         D 
cg c]  }
|
j                   }}
||k7  r n|} J d	j                  |t        |                   c c}w c c}w #  d}Y  rxY wc c}
w )
z:This isn't actually a test, it's an informational routine.FNr4   r,   r   r0   )numvalTz7Best BASE85 based alphabet for your setup: {} (base {}))r   BASE85rz   rx   rv   rg   rs   r   r   alphabetnumconv_obj_r   pathformat)r   r\   	basealphagot_err	last_goodalphabetlenr  charr   posr   r   s               rE   test_alphabetz!TestMP_TreeAlphabet.test_alphabet  s    NN		 C	NQ$67 	!K ;/Hx=A%%%7?|Dtd*DHDOOHEDXa[4/EFOOHQK(1+56 $$((*113 )1%,0) S]Q./ $--S-9 '7'?'?'C'C'EF388FCFh I5	!6	
OVVs9~
 	
u1 EE"G Gs   E#-E(
.E-"E7-E4N)	r   r   r   r  markskipifosgetenvr  r   rH   rE   r  r    s?    [[BII/77>  "
	"
rH   r  c                       e Zd Ze ej
                  dej                  ej                  z         d               Z	d Z
d Zy)TestHelpersr9   r:   c                     | j                   }|j                  t               |j                         D ]  }|j                  t        |        |j	                  d       |S )Nr   r   )r@   rA   rB   r   r   )rD   rF   r   s      rE   helpers_modelzTestHelpers.helpers_model  sR     	"((* 	-DOOIt,	-C rH   c                     |j                         D cg c]  }|j                  |j                         f  }}|j                         D cg c]  }|j                  |j                  f }}||k(  sJ y c c}w c c}w r>   )r   r   r\  get_descendants_group_countdescendants_count)r   r  r   r   r   s        rE   !test_descendants_group_count_rootz-TestHelpers.test_descendants_group_count_root  s    8E8T8T8V
34QVVQ++-.
 

 #>>@
 VVQ(()
 
 h

s   #A3
A8c                 <   |j                         j                  d      }|j                         D cg c]  }|j                  |j	                         f  }}|j                  |      D cg c]  }|j                  |j                  f }}||k(  sJ y c c}w c c}w Nr   r   )r   r   r+  r   r\  r  r  )r   r  r   r   r   r   s         rE   !test_descendants_group_count_nodez-TestHelpers.test_descendants_group_count_node  s    --/333=@F@S@S@UV1QVVQ3356VV #>>vF
 VVQ(()
 
 h W
s   #B+BN)r   r   r   r  r  r  r   r  PROXY_MODELSr  r  r  r   rH   rE   r  r    sE    V^^*V-?-?&BUBU-UV W rH   r  c                       e Zd ZdZd Zd Zy)TestMP_TreeSortedAutoNowz~
    The sorting mechanism used by treebeard when adding a node can fail if the
    ordering is using an "auto_now" field
    c                     t        dd      D ]5  }|j                  d|fz  t        j                  j                                7 y )Nr,   r   znode%d)r   r   )rz   r   datetimenow)r   r^   is      rE   !test_sorted_by_autonow_workaroundz:TestMP_TreeSortedAutoNow.test_sorted_by_autonow_workaround
  sD    q! 	A!**_h.?.?.C.C.E + 	rH   c                     |j                  d       t        j                  t              5  |j                  d       ddd       y# 1 sw Y   yxY w)zU
        This test asserts that we have a problem.
        fix this, somehow
        rd  r   re  N)r   r  r	  
ValueError)r   r^   s     rE   test_sorted_by_autonow_FAILz4TestMP_TreeSortedAutoNow.test_sorted_by_autonow_FAIL  sG    
 	&&G&4]]:& 	9!***8	9 	9 	9s   AAN)r   r   r   __doc__r  r  r   rH   rE   r  r    s    
9rH   r  c                   $    e Zd Zd Zd Zd Zd Zy)TestMP_TreeStepOverflowc                     |j                   }t        dd      D ]	  } |         t        j                  t              5   |        d d d        y # 1 sw Y   y xY wNr,   r  )r   rz   r  r	  r   )r   r`   methodr  s       rE   r  z%TestMP_TreeStepOverflow.test_add_root  sM    "++q" 	AH	]]<( 	H	 	 	s   AAc                     |j                         }|j                  }t        dd      D ]	  } |         t        j                  t
              5   |        d d d        y # 1 sw Y   y xY wr  )r   rx  rz   r  r	  r   )r   r`   r  r  r  s        rE   test_add_childz&TestMP_TreeStepOverflow.test_add_child$  sY     ))+q" 	AH	]]<( 	H	 	 	s   AA(c                    |j                         }t        dd      D ]  }|j                           d}|D ]C  }t        j                  t
              5  |j                         j                  |       d d d        E y # 1 sw Y   PxY w)Nr,   r  r  r  r  r  )r   rz   rx  r  r	  r   rO  r  )r   r`   r  r  	positionsr  s         rE   test_add_siblingz(TestMP_TreeStepOverflow.test_add_sibling,  s     ))+q" 	ANN	F	 	7C|, 7##%11#67 7	77 7s    A==B	c                 \   |j                         }t        dd      D ]  }|j                           |j                         }|ddgf|j                         g dfg}|D ]@  \  }}|D ]6  }t	        j
                  t              5  |j                  ||       d d d        8 B y # 1 sw Y   ExY w)Nr,   r  r.  r)  r  )r   rz   rx  rL  r  r	  r   r	  )	r   r`   r  r  newroottargetsr  r  r  s	            rE   	test_movez!TestMP_TreeStepOverflow.test_move5  s     ))+q" 	ANN	#,,.M<01$$&B
 ") 	.FI  .]]<0 .LL-. ..	.. .s   B""B+N)r   r   r   r  r   r  r  r   rH   rE   r  r    s    7.rH   r  c                       e Zd ZdZd Zy)TestMP_TreeShortPathzSTest a tree with a very small path field (max_length=4) and a
    steplen of 1
    c                     |j                         }|j                         j                         j                         }t        j                  t              5  |j                          d d d        y # 1 sw Y   y xY wr>   )r   rx  r  r	  r   )r   rZ   r   s      rE   test_short_pathz$TestMP_TreeShortPath.test_short_pathM  sW    $--/mmo'')335]]<( 	MMO	 	 	s   A00A9N)r   r   r   r  r  r   rH   rE   r
  r
  G  s    rH   r
  c                       e Zd Zd Zy)TestMP_TreeFindProblemsc                 P   d_          dddd      j                           dddd      j                           dddd      j                           dddd      j                           d	ddd      j                           d
ddd      j                           dddd      j                           dddd      j                           dddd      j                           dddd      j                           dddd      j                           dddd      j                          fd}j                         \  }}}}}dd	g ||      k(  sJ ddg ||      k(  sJ d
dg ||      k(  sJ g d ||      k(  sJ ddg ||      k(  sJ y )N0123401r,   r   )r  depthnumchildr  r   111abcdzqa#$%!0201r0   020201r4   030301030102r  040401r  c                 v    j                   j                  |       D cg c]  }|j                   c}S c c}w )Nr   )rs   r   r  )r   r   r\   s     rE   r   z7TestMP_TreeFindProblems.test_find_problems.<locals>.gote  s/    $4$<$<$C$C3$C$OPqAFFPPPs   6)r  r  r  )r  r  find_problems)r   r\   r   
evil_charsbad_steplenorphanswrong_depthwrong_numchilds    `      rE   test_find_problemsz*TestMP_TreeFindProblems.test_find_problemsV  s   $+!d!aBGGIcQqAFFHe1qCHHJfA!DIIKha!AFKKMfA!DIIKha!AFKKMd!aBGGIfA!DIIKha"QGLLNd"qCHHJfB1EJJL	Q **,	
!S_444U|s;////!S\111'3~+>>>>f~[!1111rH   N)r   r   r   r$  r   rH   rE   r  r  T  s    2rH   r  c                       e Zd Zej                  g dej
                  g diZej                  g dej
                  g diZd Zd Z	d Z
d Zd Zy	)
TestMP_TreeFix)r   br,   r0   )11ur0   r,   )r  r  r4   r,   )1111er.   r   )12r   r0   r   r   r   r,   r   r'   gr,   r   r(   r  r,   r.   r)   r  r0   r   42r  r0   r   43r*  r0   r,   )431r  r4   r,   )4311r,  r.   r   44r   r0   r   ))r   r  r,   r.   )r)  r  r0   r   )r-  r  r0   r   )13r   r0   r   )14r*  r0   r,   )141r  r4   r,   )1411r,  r.   r   )r   r(  r,   r0   )r    r   r0   r   )r!   r*  r0   r,   )221r  r4   r,   )2211r,  r.   r   )r'   r   r,   r   )r(   r0  r,   r   )r'  )r;  r*  r0   r,   )134r  r4   r,   )1343r,  r.   r   )r<  r   r0   r   r.  r/  r1  r2  r3  r5  )434r  r4   r,   )4343r,  r.   r   r9  c                     |j                         D cg c]8  }|j                  |j                  |j                         |j	                         f: c}S c c}w r>   )r|   r  r   r}   r~   )r   rF   r   s      rE   r   zTestMP_TreeFix.got  sK     ^^%
 VVQVVQ[[]A,@,@,BC
 	
 
s   =Ac                     |dddd      j                           |dddd      j                           |d	d
dd      j                           |dddd      j                           |dddd      j                           |dddd      j                           |dddd      j                           |dd
dd      j                           |dddd      j                           |dddd      j                           |dddd      j                           |dddd      j                           |ddd d!      j                           |d"dd d#      j                          y )$Nr(   r0   r  )r  r  r  r   r;  i  r   r*  r<  r.   i  r   rA  iA  i  r  rB  r,  r4  r,   r6  r:  rC  rD  r)   r'      iB  r0  r   r  r4   r(  r   r   )r  r   s     rE   add_broken_test_dataz#TestMP_TreeFix.add_broken_test_data  sD   3a!#6;;=4tac:??A4q3S9>>@5c<AAC6s=BBD4q137<<>4tac:??A4q3S9>>@5c<AAC6s=BBD4q137<<>3cCc:??A3b137<<>3b137<<>rH   c                     | j                  |       |j                  d       | j                  |      }| j                  |   }||k(  sJ |j	                          y )NFdestructive)rH  fix_treer   expected_with_holesr  r   rX   r   r   s       rE   test_fix_tree_non_destructivez,TestMP_TreeFix.test_fix_tree_non_destructive  sW    !!-051hh}%++M:h##%rH   c                     | j                  |       |j                  d       | j                  |      }| j                  |   }||k(  sJ |j	                          y )NTrJ  rH  rL  r   expected_no_holesr  rN  s       rE   test_fix_tree_destructivez(TestMP_TreeFix.test_fix_tree_destructive  sW    !!-040hh}%))-8h##%rH   c                     | j                  |       |j                  d       | j                  |      }| j                  |   }||k(  sJ |j	                          y )NT)	fix_pathsrQ  rN  s       rE   test_fix_tree_with_fix_pathsz+TestMP_TreeFix.test_fix_tree_with_fix_paths  sW    !!-0.hh}%))-8h##%rH   N)r   r   r   r   MP_TestNodeShortPathMP_TestSortedNodeShortPathrR  rM  r   rH  rO  rS  rV  r   rH   rE   r&  r&  v  sm     	## &
  	)) ,
#!F 	## &
  	)) ,
#!F
? &&&rH   r&  c                       e Zd Zd Zy)
TestIssuesc                    d }d fd}t         j                  j                  ddd      }|j                          |j	                  d      }|j                  d       |j                  d	      } |j                         dd	g        |j                         j                  t        d            dg        |j                         j                  t        |
            g         |dg||        |dd	g||       t         j                  j                  d      }|j                  j                  |        |dd	g||        |dg||       y )Nc                 L    | D cg c]  }|j                    c}|k(  sJ y c c}w r>   name)qsr   r   s      rE   qs_checkzDTestIssues.test_many_to_many_django_user_anonymous.<locals>.qs_check	  s"    $&'qAFF'8333's   !c                      |j                         j                  t        d      t        |      z        |        y )Nfirstr]  users)r+  r   r   )r   r  userr`  s      rE   qs_check_first_or_userzRTestIssues.test_many_to_many_django_user_anonymous.<locals>.qs_check_first_or_user	  s1    !!#**1'?QT]+JKXrH   	test_userztest@example.com
testpasswdzthe root noder]  rb  secondrc  )username)r   rs   create_userr  r   rx  r+  r   r   r   rd  add)r   rb   anonuserobjrf  re  r  ri  r`  s          @rE   'test_many_to_many_django_user_anonymousz2TestIssues.test_many_to_many_django_user_anonymous  s.    	4	
 ||''5GV		''_'=G$X.""$w&9:""$++A7O<wiH""$++ADM:B?y$52D+F||52D$?y$<rH   N)r   r   r   rn  r   rH   rE   rZ  rZ    s    ,=rH   rZ  c                   6    e Zd Zd Zd Zd Zd Zd Zd Zd Z	y)	TestMoveNodeFormc           	      X    |D cg c]  \  }}}|d|dz
  z  |f c}}}S c c}}}w )Nz&nbsp;&nbsp;&nbsp;&nbsp;r,   r   )r   r   r   strr  s        rE   _get_nodes_listz TestMoveNodeForm._get_nodes_list"	  s=    SX
 
AOS%R<5195s;<
 	
 
s   %c                     |j                   d   j                  }|j                  d      d   J ||D cg c]  }|d   |d   f c}k(  sJ y c c}w )N_ref_node_idr   r,   )fieldschoicespop)r   formr   rw  choices        rE   _assert_nodes_in_choicesz)TestMoveNodeForm._assert_nodes_in_choices'	  sX    ++n-55{{1~a (((gFF&)VAY/FFFFFs   Ac                 F   t        t        |            } ||      }g dt        |j                  j	                               k(  sJ |j
                  d   j                  D cg c]  }|d   	 }}g d|k(  sJ | j                  |      }| j                  ||       y c c}w )Nr  r   	_positionru  r~  r   )r.  r  r  )	r   r   re   base_fieldskeysrv  rw  rs  r{  )r   r   safe_parent_nodes
form_classry  rz  r   r   s           rE   _move_node_helperz"TestMoveNodeForm._move_node_helper,	  s    )$t*5
4(4T=M=M=R=R=T8UUUU'+{{;'?'G'GHVvayHH/3666$$%67%%dE2 Is   #Bc                 t    |D cg c](  }|j                   t        |      |j                         f* c}S c c}w r>   )r   rr  r}   )r   r   r   s      rE   _get_node_ids_strs_and_depthsz.TestMoveNodeForm._get_node_ids_strs_and_depths5	  s,    CHI4#d)T^^%56IIIs   -5c                     t        |j                               }|j                  d      }| j                  |      }| j	                  ||       y )Nr   )re   r|   rx  r  r  )r   rF   r   r   r  s        rE   test_form_root_nodez$TestMoveNodeForm.test_form_root_node8	  sB    U^^%&yy| >>uEt%67rH   c                     t        |j                               }| j                  |      }|j                         }| j	                  ||       y r>   )re   r|   r  rx  r  )r   rF   r   r  r   s        rE   test_form_leaf_nodez$TestMoveNodeForm.test_form_leaf_node>	  s@    U^^%& >>uEyy{t%67rH   c                 H   d }t        |j                               }| j                  |      }|j                  j	                         D ]  }t               }t        |      }t        |      } |||      }	t        |	j                  |      j                  j                               }
g d}||
k(  sJ |	j                  |      }
d d|ifg}|
|k(  sJ |	j                  ||      }
|
|k(  sJ  |	j                  |             }| j                  |      }| j                  ||        y )Nr}  rv  )re   r|   r  rs   r   r   r   r   get_formr  r  get_fieldsetsrs  r{  )r   rF   rD   r   r  r   siter  admin_classmar   desc_pos_refnodeidr   ry  s                 rE   test_form_adminz TestMoveNodeForm.test_form_adminD	  s#   U^^%& >>uEMM%%' 	7D;D-e4J'
3KUD)Br{{7+77<<>?C!F%,,,""7+C*<=>?H(?"?""7D1C(?"?'2;;w')D(():;E))$6	7rH   N)
r   r   r   rs  r{  r  r  r  r  r  r   rH   rE   rp  rp   	  s'    

G
3J887rH   rp  c                       e Zd Zd Zy)TestModelAdminc                     t               }t        |      }t        |      } |||      }t        |j	                  d       j
                  j                               g dk(  sJ y )Nr}  )r   r   r   re   r  r  r  )r   rF   r  r  r  r  s         rE   test_default_fieldsz"TestModelAdmin.test_default_fields\	  s]    {)%0
#J/%BKK%116689 >
 
 	
 
rH   N)r   r   r   r  r   rH   rE   r  r  Z	  s    	
rH   r  c                       e Zd Zd Zy)TestSortedFormc                    |j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd
       |j                  ddd	       |j                  ddd       |j                  ddd       t        |      } |       }t        |j                  j	                               g dk(  sJ  ||j
                  j                  d            }t        |j                  j	                               g dk(  sJ dt        |      v sJ dt        |      v sJ y )Nr4   r  r  r,   r.   rw  r0   r   rx  ry  rz  r{  )r  r  r   r~  ru  r   r  id__positionid__ref_node_id)r   r   re   rv  r  rs   r   rr  )r   rR   r  ry  s       rE   test_sorted_formzTestSortedForm.test_sorted_formj	  sS   11591159115911591159115911591159),7
|DKK$$&' ,
 
 	
 
 <#7#7#;#;#;#GHDKK$$&' ,
 
 	
 
 T*** CI---rH   N)r   r   r   r  r   rH   rE   r  r  h	  s    .rH   r  c                   <    e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
y	)
TestFormc                 R   t        |      } |       }t        |j                  j                               g dk(  sJ  ||j                  j                  d            }t        |j                  j                               g dk(  sJ dt        |      v sJ dt        |      v sJ y )Nr}  r   r   r  r  r  )r   re   rv  r  rs   r   rr  )r   rF   r  ry  s       rE   	test_formzTestForm.test_form	  s    )%0
|DKK$$&'+PPPP5==#4#4##4#>?DKK$$&'+PPPPT*** CI---rH   c                     t        |      }|j                  j                  d      j                  d      } ||      }|j	                         }d|v sJ d|vsJ d|v sJ y )Nr   r   z,Benign<script>alert("Compromised");</script>r  Benignz<script>z&lt;script&gt;)r   rs   r   rx  as_p)r   rF   r  bad_nodery  rendered_htmls         rE   test_move_node_formzTestForm.test_move_node_form	  sw    )%0
==$$#$.88? 9 
 8,		=(((...=000rH   c                    t        |      }|j                  j                  d      } ||      }|j                  |      dddk(  sJ |j                  j                  d      } ||      }|j                  |      d|j                  j                  d      j                  dk(  sJ |j                  j                  d	      } ||      }|j                  |      d
|j                  j                  d      j                  dk(  sJ |j                  j                  d      } ||      }|j                  |      d|j                  j                  d      j                  dk(  sJ y )Nr   r   r  r.  rd   )r~  ru  r    r   r!   r  r#   r"   )r   rs   r   _get_position_ref_noder   )r   rF   r  instance_parentry  instance_childinstance_grandchilds          rE   test_get_position_ref_nodez#TestForm.test_get_position_ref_node	  s   )%0
--+++5?3**?;&@
 
 	
 

 ***5>2**>:&!MM--3-7::?
 
 	
 

 $mm//T/:#67**+>? !MM--4-8;;D
 
 	
 

 $mm//U/;#67**+>?&!MM--4-8;;D
 
 	
 
rH   c                     |j                   j                  d      }d}d}t        |      } |||||j                  d      }|j	                         sJ |j                         ||fk(  sJ y )Nr   r   r.  rd   r~  ru  r   r  r   )rs   r   r   r   is_valid_clean_cleaned_data)r   rF   r  r~  ru  r  ry  s          rE   test_clean_cleaned_dataz TestForm.test_clean_cleaned_data	  sz    --+++5!	)%0
$& ,',,
 }}'')i-FFFFrH   c                    |j                   j                  d      }t        |j                   j                               }t	        |      } ||d|j                   j                  d      j
                  |j                  d      }|j                         sJ |j                         }||j                   j                         j                         k(  sJ |j                         dk(  sJ |j                         dk(  sJ |j                         rJ |j                         sJ t	        |      } ||dd	|j                  d      }|j                         sJ |j                         }||j                   j                         j                         k(  sJ |j                         dk(  sJ |j                         d
k(  sJ |j                         sJ |j                         sJ y )Nr   r   r.  r   r  r  r   r0   rd   r,   )rs   r   rx   r   r   r   r   r  r  r  r~   r}   r  r  )r   rF   r  original_countr  ry  saved_instancerestored_instances           rE   test_save_editzTestForm.test_save_edit	  s   --+++5U]]..01)%0
$* % 1 1s 1 ; > >',,
 }}!2!2!4!:!:!<<<<002a777'')Q...!))+++%%''' *%0
#* "&++
 }} IIK!2!2!4!:!:!<<<< 335::: **,111 ((*** ((***rH   c                 6   |j                   j                         j                         }|dk(  sJ d}t        |      } ||dd      }|j	                         sJ |j                         J ||j                   j                         j                         k  sJ y )Nr  r.  New Form Testr~  r   r   )rs   r   r  r   r  r  r   rF   r  r~  r  ry  s         rE   test_save_newzTestForm.test_save_new	  s    **,224###!	)%0
YPQ}}yy{&&& 1 1 3 9 9 ;;;;rH   c                 Z   |j                   j                         j                         }|dk(  sJ d}t        |      } ||ddd      }|j	                         sJ d|j
                  _        |j                         J ||j                   j                         j                         k  sJ y)r  r  r.  r  r  )r~  idr   r  N)rs   r   r  r   r  r  r  r  r  s         rE   test_save_new_with_pk_setz"TestForm.test_save_new_with_pk_set
  s    
 **,224###!	)%0
(P
 }} "yy{&&& 1 1 3 9 9 ;;;;rH   c                     t        |      } |ddd      }|j                         sJ d|j                  _        |j	                         }|j                  dk(  sJ y )Nr.  zTest Instancer  r  zModified Instance)r   r  r  r   r  )r   rF   r  ry  r  s        rE   test_save_instancezTestForm.test_save_instance
  sS    )%0
]OTU}}099;}} 3333rH   N)r   r   r   r  r  r  r  r  r  r  r  r   rH   rE   r  r  	  s,    .1
>G $+L<<(4rH   r  c                   .    e Zd Z ed      Zd Zd Zd Zy)TestAdminTreezR{% load admin_tree %}{% spaceless %}{% result_tree cl request %}{% endspaceless %}c                    |}t               j                  d      }t               |_        t	               }t        |      }t        |      } |||      }|j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d|
_        t'        |
|d      }| j(                  j+                  |      }d}|j-                  |      |j.                  j-                         k(  sJ |j.                  j1                         D ]+  }|
j3                  |      }d|dt5        |      d}||v r+J  d|v sJ y)	z
        Verifies that inclusion tag result_list generates a table when with
        default ModelAdmin settings.
        /admin/tree/NclrD   1<td class="drag-handler"><span>&nbsp;</span></td>	<a href=""></a>1<input type="hidden" id="has-filters" value="0"/>)r   r   r   re  r   r   r   get_list_displayget_list_display_linksr   rj   list_filterdate_hierarchysearch_fieldslist_select_relatedlist_per_pagelist_max_show_alllist_editableformsetr   templaterenderr  rs   r   url_for_resultrr  )r   rN   rF   rD   r  r  r  mlist_displaylist_display_linksr  contexttable_outputdrag_handlerobjecturlr   s                    rE   test_result_treezTestAdminTree.test_result_tree&
  sz   
 $ "&&~6${)%0
#J/t$))'255g|L,MMOO!!OOOO
  
89}}++G4J!!,/5==3F3F3HHHHmm'') 	(F##F+C,/V=D<'''	(
 ClRRRrH   c                 N   |}|j                  d       t               j                  d      }t               |_        t               }t        |      }t        |      } G d d|      } |||      }|j                  |      }	|j                  ||	      }
t        t        |||	|
|j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |g        }d|_        t)        ||d      }| j*                  j-                  |      }d}|j/                  |      |j0                  j/                         k(  sJ |j0                  j3                         D ],  }|j5                  |      }d	|d
|j6                  d}||v r,J  d|v sJ y)r  u
   áéîøür   r  c                       e Zd ZdZy)ATestAdminTree.test_unicode_result_tree.<locals>.UnicodeModelAdmin)__str__r   N)r   r   r   r  r   rH   rE   UnicodeModelAdminr  _
  s    .LrH   r  Nr  r  r  r  r  r  )r   r   r   r   re  r   r   r   r  r  r   rj   r  r  r  r  r  r  r  r  r   r  r  r  rs   r   r  r   )r   rP   rF   rD   r  r  
ModelAdminr  r  r  r  r  r  r  r  r  r  r   s                     rE   test_unicode_result_treez&TestAdminTree.test_unicode_result_treeQ
  s   
 #L) "&&~6${)%0
":.
	/
 	/ eT*))'255g|L,MMOO!!OOOO
  
89}}++G4J!!,/5==3F3F3HHHHmm'') 	(F##F+C,/=D<'''	(
 ClRRRrH   c                    |}t               j                  d      }t               |_        t	               }t        |      }t        |      } |||      }|j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d|
_        t'        |
|d      }| j(                  j+                  |      }d|v sJ t               j                  d      }t               |_        |j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d|
_        t'        |
|d      }| j(                  j+                  |      }d|v sJ t               j                  d      }t               |_        |j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d|
_        t'        |
|d      }| j(                  j+                  |      }d|v sJ y)z1Test template changes with filters or pagination.z/admin/tree/?desc=1Nr  z1<input type="hidden" id="has-filters" value="1"/>z/admin/tree/?p=1r  z/admin/tree/?all=1)r   r   r   re  r   r   r   r  r  r   rj   r  r  r  r  r  r  r  r  r   r  r  )r   rN   rF   rD   r  r  r  r  r  r  r  r  r  s                rE   test_result_filteredz"TestAdminTree.test_result_filtered
  s   # "&&'<=${)%0
#J/t$))'255g|L,MMOO!!OOOO
  
89}}++G4BlRRR !"&&'9:$))'255g|L,MMOO!!OOOO
  
89}}++G4BlRRR !"&&';<$))'255g|L,MMOO!!OOOO
  
89}}++G4BlRRRrH   N)r   r   r   r   r  r  r  r  r   rH   rE   r  r  
  s&    	9H
)SV/SbSSrH   r  c                   4    e Zd Z ed      Zd Zd Zd Zd Zy)TestAdminTreeListzW{% load admin_tree_list %}{% spaceless %}{% result_tree cl request %}{% endspaceless %}c                    |}t               j                  d      }t               |_        t	               }t        |      }t        |      } |||      }|j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d|
_        t'        |
|d      }| j(                  j+                  |      }d}|j,                  j/                         D ]"  }||j0                  t3        |      fz  }||v r"J  y)r  r  Nr  z<li><a href="%s/" >%s</a>r   r   r   re  r   r   r   r  r  r   rj   r  r  r  r  r  r  r  r  r   r  r  rs   r   r   rr  r   rN   rF   rD   r  r  r  r  r  r  r  r  r  output_templater  expected_outputs                   rE   test_result_tree_listz'TestAdminTreeList.test_result_tree_list
  s<   
 $ "&&~6${)%0
#J/t$))'255g|L,MMOO!!OOOO
  
89}}++G45mm'') 	3F-CK0HHO"l222	3rH   c                    |}t               j                  d      }t               |_        t	               }t        |      }t        |      } |||      }|j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                  |j                   |j"                  |g        }
d |
_        t'        |
|dd      }| j(                  j+                  |      }d}|j,                  j/                         D ]-  }||j0                  |j0                  t3        |      fz  }||v r-J  y )Nr  T)r  rD   action_formzg<input type="checkbox" class="action-select" value="%s" name="_selected_action" /><a href="%s/" >%s</a>r  r  s                   rE   !test_result_tree_list_with_actionz3TestAdminTreeList.test_result_tree_list_with_action  sI   # "&&~6${)%0
#J/t$))'255g|L,MMOO!!OOOO
  
MN}}++G4$ 	 mm'') 	3F-FIIs6{0SSO"l222	3rH   c                     |}|j                   j                  j                  }t               j	                  dj                  t        |            }t               |_        t               }t        |       t        |      }t        |      } |||      }|j                  |      }	|j                  ||	      }
t        t!        |||	|
|j"                  |j$                  |j&                  |j(                  |j*                  |j,                  |j.                  |g        }d |_        t3        ||d      }| j4                  j7                  |      }d}|j8                  j;                         D ]  }||j                  z  }||v rJ  y )Nz/admin/tree/?{0}={1}r  z/opener.dismissRelatedLookupPopup(window, '%s');)r  r   attnamer   r   r  r   r   re  r   admin_register_allr   r   r  r  r   rj   r  r  r  r  r  r  r  r  r   r  r  rs   r   )r   rN   rF   pk_fieldrD   r  r  r  r  r  r  r  r  r  r  r  r  s                    rE   test_result_tree_list_with_getz0TestAdminTreeList.test_result_tree_list_with_get*  s^   #;;>>)) "&&")),A
 %{4 )%0
#J/t$))'255g|L,MMOO!!OOOO
  
89}}++G4Kmm'') 	3F-		9O"l222	3rH   c                 b   |j                  d      }t               j                  d      }t               |_        t               }t        |      }t        |      } |||      }|j                  |      }|j                  ||      }	t        t        ||||	|j                  |j                  |j                  |j                  |j                   |j"                  |j$                  |g        }
d|
_        t)        |
|d      }| j*                  j-                  |      }d|j.                   d}||v sJ y)r  z<>r   r  Nr  z<li><a href="z/" >&lt;&gt;</a>)r   r   r   r   re  r   r   r   r  r  r   rj   r  r  r  r  r  r  r  r  r   r  r  r   )r   rP   r  rD   r  r  r  r  r  r  r  r  r  r  s                 rE   $test_result_tree_list_escapes_labelsz6TestAdminTreeList.test_result_tree_list_escapes_labelsP  s'   
 $,,$,7 "&&~6${)*<=
#J/*D1))'255g|L,MMOO!!OOOO
  
89}}++G4)&))4DE,...rH   N)	r   r   r   r   r  r  r  r  r  r   rH   rE   r  r  
  s(    	9H
#3J$3L$3L!/rH   r  c                   h    e Zd Z e       Zd Zd Zd Zd Zd Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zy)TestTreeAdminc                 D    t         j                  j                  |d      S )NT)rj  is_superuser)r   rs   create)r   rj  s     rE   _create_superuserzTestTreeAdmin._create_superuserx  s    ||""H4"HHrH   c                 J    t               }|j                  |      }||_        |S r>   )r   r   re  )r   r  re  request_factoryrD   s        rE   _mocked_authenticated_requestz+TestTreeAdmin._mocked_authenticated_request{  s&    (*!%%c*rH   c                     t               }|j                  d|      }t        |dd       t        |      }t        |d|       |S )N/r  session	_messages)r   postsetattrr   )r   r   r  rD   messagess        rE   _mocked_requestzTestTreeAdmin._mocked_request  sF    (*!&&s&6I."7+h/rH   c                 T    t        |      }t        |      } ||| j                        S r>   )r   r   r  )r   model_classr  r  s       rE   _get_admin_objzTestTreeAdmin._get_admin_obj  s'    )+6
#J/;		22rH   c                 N   | j                  d      }| j                  d|      }| j                  t        j                        }|j                  |       |j                  dk(  sJ | j                  t        j                        }|j                  |       |j                  dk7  sJ y )Nchangelist_tmpr	  zadmin/tree_list.html)r  r  r  r   AL_TestNodechangelist_viewchange_list_templateMP_TestNode)r   tmp_userrD   	admin_objs       rE   test_changelist_viewz"TestTreeAdmin.test_changelist_view  s    ))*:;44S(C''(:(:;	!!'*--1GGGG''(:(:;	!!'*--1GGGGrH   c                     | j                  |      }|j                  j                  d      }|j                  |j                        |k(  sJ y r  )r  rs   r   r  r   )r   rF   r  r  s       rE   test_get_nodezTestTreeAdmin.test_get_node  sF    ''.	""",!!&)),666rH   c                     | j                  |      }| j                  i       }|j                  |      }|j                  dk(  sJ | j                  ddi      }|j                  |      }|j                  dk(  sJ y )Nr    r  r,   r  r  	move_nodestatus_coder   rF   r  rD   responses        rE    test_move_node_validate_keyerrorz.TestTreeAdmin.test_move_node_validate_keyerror  s    ''.	&&B&/&&w/##s***&&YN&;&&w/##s***rH   c                     | j                  |      }| j                  dddd      }|j                  |      }|j                  dk(  sJ y )Nr,   r0   invalidr  
sibling_idas_childr  r  r   r#  s        rE   "test_move_node_validate_valueerrorz0TestTreeAdmin.test_move_node_validate_valueerror  sW    ''.	&&aYG ' 
 &&w/##s***rH   c                    |j                   j                  d      }| j                  |      }| j                  i       }|j	                  d|d||      }|j
                  dk(  sJ |j	                  d|d||      }|j
                  dk(  sJ y )	Nr#   r   r  Tr  r  r  r  rs   r   r  r  try_to_move_noder"  r   rF   r   r  rD   r$  s         rE   &test_move_validate_missing_nodeorderbyz4TestTreeAdmin.test_move_validate_missing_nodeorderby  s    }}  e ,''.	&&B&/--$ . 
 ##s***--$('$ . 
 ##s***rH   c                     |j                   j                  d      }| j                  |      }| j                  i       }|j	                  d|d||      }|j
                  dk(  sJ y )Nr#   r   r  Tr  r-  r  r.  r0  s         rE   test_move_validate_invalid_posz,TestTreeAdmin.test_move_validate_invalid_pos  sr    }}  e ,''.	&&B&/--$wt . 
 ##s***rH   c                    |j                   j                  d      }|j                   j                  d      }| j                  |      }| j                  i       }|j	                  d|d||      }|j
                  dk(  sJ y )Nr   r   r#   r  Tr  r  r.  )r   rF   r   r  r  rD   r$  s          rE    test_move_validate_to_descendantz.TestTreeAdmin.test_move_validate_to_descendant  s    }}  c *""".''.	&&B&/--$&
 ##s***rH   c                 b   |j                   j                  d      }|j                   j                  d      }| j                  |      }| j                  |j                  |j                  dd      }|j                  |      }|j                  dk(  sJ g d}| j                  |      |k(  sJ y )	Nr#   r   r   r   r(  r     r$  rs   r   r  r  r   r!  r"  r   r   rF   r   r  r  rD   r$  r   s           rE   test_move_leftzTestTreeAdmin.test_move_left      }}  e ,""",''.	&&!WWFII1M ' 
 &&w/##s***
 xx(***rH   c                 b   |j                   j                  d      }|j                   j                  d      }| j                  |      }| j                  |j                  |j                  dd      }|j                  |      }|j                  dk(  sJ g d}| j                  |      |k(  sJ y )	Nr#   r   r   r,   r(  r  r7  r*  r8  r9  s           rE   test_move_last_childz"TestTreeAdmin.test_move_last_child  r;  rH   N)r   r   r   r   r  r  r  r  r  r  r  r%  r+  r1  r3  r5  r:  r=  r   rH   rE   r   r   t  sL    ;DI3
	H7
++++++0+rH   r   c                       e Zd Zd Zy)TestMPFormPerformancec                    t         j                  }|j                  t               t	        |      } |       } |t        |j                               dz         5  |j                  |       d d d        y # 1 sw Y   y xY wr  )r   r  rA   rB   r   rx   r   mk_dropdown_tree)r   django_assert_num_queriesrF   r  ry  s        rE   #test_form_add_subtree_no_of_queriesz9TestMPFormPerformance.test_form_add_subtree_no_of_queries  sh    ""	")%0
|&s5+?+?+A'BQ'FG 	)!!%(	) 	) 	)s   A55A>N)r   r   r   rC  r   rH   rE   r?  r?    s    )rH   r?  c                       e Zd Zd Zy)!TestMP_TreeDescendantsPerformancec                    t         j                  }|j                  t               g d}|D ]K  \  }}|j                  j                  |      } ||      5  t        |j                                d d d        M y # 1 sw Y   XxY w)N))r   r,   r/  r0  rY  rZ  r   )r   r  rA   rB   rs   r   re   rV  )r   rB  rF   r   r   r   r   s          rE   "test_get_descendants_no_of_querieszDTestMP_TreeDescendantsPerformance.test_get_descendants_no_of_queries  s    ""	"
 # 	-ND(==$$$$/D*84 -T))+,- -	-- -s   A;;B	N)r   r   r   rG  r   rH   rE   rE  rE    s    -rH   rE  )sr  r  r  django.contrib.admin.sitesr   django.contrib.admin.views.mainr   django.contrib.auth.modelsr   r   (django.contrib.messages.storage.fallbackr   django.db.modelsr   django.db.models.signalsr	   django.dispatchr
   django.templater   r   django.testr   django.test.clientr   django.templatetags.staticr   django.contrib.admin.optionsr   djangor   rf   r  	treebeardr   treebeard.adminr   treebeard.exceptionsr   r   r   r   r   treebeard.formsr   treebeard.testsr   treebeard.tests.adminr   r  rB   r   r  r  r  rF   rK   rN   UNICODE_MODELSrP   SORTED_MODELSrR   RELATED_MODELSrT   r  rV   MP_SHORTPATH_MODELSrX   rW  rZ   MP_TestNodeAlphabetr\   MP_TestNodeSortedAutoNowr^   MP_TestNodeSmallStepr`   MP_TestManyToManyWithUserrb   rj   rl   r  	django_dbr   r   r   r  rs  r  r  r  r  r  r2  rE  r^  rt  r  r  r  r  r  r
  r  r&  rZ  rp  r  r  r  r  r  r   r  r?  rE  r   rH   rE   <module>rd     s     	 0 6 : D  . $ -   - - 5 ,   )  1 " D   fc]fd^$fd^$fe_- fd^$

 fc]fd^$
#	0	 j););f>Q>Q)QR S
 j););f>Q>Q)QR S j););< =
 j)>)>? @ j)=)=> ? j)>)>? @ j)@)@A B j)C)CD E j&*E*E)FG H j&*D*D)EF G j&*I*I)JK L j&*E*E)FG H j&*J*J)KL M
? ?6 ,8L ,8 ,8^	| 	 H)' H) H)V X=, X= X=v SJ# SJ SJl i% i iX [1 [1 [1| .% . .( $< $ $ e+' e+ e+P j+# j+ j+Z G+) G+ G+T L+% L+ L+^ B2\ B2 B2J mI, mI mI` '
, '
 '
T ,  > 9| 9 9. (.l (. (.V 	< 	 	 2l 2 2B s&\ s& s&l /= /= /=d 67' 67 67r 

% 

 

 .^ . .B Q4 Q4 Q4h uS$ uS uSp X/( X/ X/v I+$ I+ I+X )F ) ) - - -rH   