
    	]jE                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlmZmZmZ d dlmZmZmZ d d	lmZ d d
lmZ d dlmZmZ  G d de      Z G d de      Z G d dee      Zy)    )	timedelta)patch)quote)CurrentContext)AnnotationStateChoicesProjectStateChoicesTaskStateChoices)get_state_manager)AnnotationStateProjectState	TaskState)AnnotationStateFactoryProjectStateFactoryTaskStateFactory)ProjectFactory)APITestCase)AnnotationFactoryTaskFactoryc                   p     e Zd Zed        Zd Z fdZd Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Z xZS )FSMEntityHistoryAPITestsc                    t               | _        | j                  j                  | _        t        j
                  j                         j                          t        | j                        | _	        t        | j                        | _
        t        j
                  j                         j                          t        | j                  | j                        | _        t        j
                  j                         j                          y N)project)taskcompleted_by)r   r   
created_byuserr   objectsalldeleter   r   task_no_annotationsr   r   
annotationr   clss    I/root/env/lib/python3.12/site-packages/label_studio/fsm/tests/test_api.pysetUpTestDataz&FSMEntityHistoryAPITests.setUpTestData   s    $&;;))  "))+s{{3"-ckk"B&&(*sxxP##%,,.    c                 B    t        j                  | j                         y N)r   set_userr   selfs    r%   setUpzFSMEntityHistoryAPITests.setUp   s    		*r'   c                 J    t        j                          t        |           y r)   r   clearsupertearDownr,   	__class__s    r%   r2   z!FSMEntityHistoryAPITests.tearDown        r'   c                     | j                   j                  | j                         | j                   j                  d      }|j                  dk(  sJ y )Nr   z#/api/fsm/entities/invalid/1/history  clientforce_authenticater   getstatus_coder,   responses     r%   test_invalid_entity_namez1FSMEntityHistoryAPITests.test_invalid_entity_name$   sB    &&DII&6;;??#HI##s***r'   c                     | j                   j                  | j                         | j                   j                  d      }|j                  dk(  sJ y )Nr7   z(/api/fsm/entities/project/999999/historyr8   r9   r>   s     r%   test_project_not_foundz/FSMEntityHistoryAPITests.test_project_not_found)   sB    &&DII&6;;??#MN##s***r'   c                    | j                   j                  | j                         | j                   j                  d| j                  j
                   d      }|j                  dk(  sJ |j                         d   g k(  sJ y )Nr7   /api/fsm/entities/project//history   results)r:   r;   r   r<   r   idr=   jsonr>   s     r%   test_empty_project_historyz3FSMEntityHistoryAPITests.test_empty_project_history.   sn    &&DII&6;;??%??PPX#YZ##s***}}y)R///r'   c           
      j   t        | j                  t        j                        }|j                  t        d      z
  |_        |j                          t        | j                  t        j                  t        j                  | j                  d      }t        | j                  t        j                  t        j                  dd      }| j                  j                  | j                  	       | j                  j                  d
| j                  j                   d      }|j                  dk(  sJ |j                         d   }t!        |      dk(  sJ |d   d   t#        |j                        k(  sJ |d   d   t#        |j                        k(  sJ |d   d   t#        |j                        k(  sJ d|d   v sJ |d   d   dk(  sJ |d   d   dk(  sJ | j                  j                  d
| j                  j                   d      }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ |j                         d   d   d   t#        |j                        k(  sJ |j                         d   d   d   t#        |j                        k(  sJ | j                  j                  d
| j                  j                   dt        j                         }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ | j                  j                  d
| j                  j                   dt        j                         }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ | j                  j                  d
| j                  j                   d      }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ | j                  j                  d
| j                  j                   d| j                  j                         }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ |j                         d   d   d   d   | j                  j                  k(  sJ |j                  t        d      z
  j%                         }|j                  j%                         }| j                  j                  d
| j                  j                   dt'        |       dt'        |             }|j                  dk(  sJ t!        |j                         d         dk(  sJ |j                         d   d   d   t#        |j                        k(  sJ |j                         d   d   d   t#        |j                        k(  sJ y )N)r   state
   secondszProject started by user)r   rL   previous_statetriggered_byreasoncomplete_projectzAll tasks completed)r   rL   rP   transition_namerR   r7   rD   rE   rF   rG      r   rH         rR   /history?ordering=id/history?state=/history?previous_state=z)/history?transition_name=complete_project/history?triggered_by=rQ   /history?created_at_from=&created_at_to=)r   r   r   CREATED
created_atr   saveIN_PROGRESSr   	COMPLETEDr:   r;   r<   rH   r=   rI   lenstr	isoformatr   )r,   state_1state_2state_3r?   rG   created_at_fromcreated_at_tos           r%   test_project_historyz-FSMEntityHistoryAPITests.test_project_history4   s   %dllBUB]B]^$//)B2GG%LL%11.66,
 &LL%//.::.(
 	&&DII&6;;??%??PPX#YZ##s***--/),7|q   qz$3wzz?222qz$3wzz?222qz$3wzz?222 71:%%%qz(#'<<<<qz(#'@@@@ ;;??%??PPd#ef##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE ;;??((9I\IfIfHgh
 ##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??((99QReRqRqQrs
 ##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??((99bc
 ##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??%??PPfgkgpgpgsgsft#uv##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,^<TBdiillRRR #--	!0DDOOQ**446;;??((99RSXYhSiRjjyz  AN  {O  zP  Q
 ##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,T2c'**oEEEr'   c                     | j                   j                  | j                         | j                   j                  d      }|j                  dk(  sJ y )Nr7   z%/api/fsm/entities/task/999999/historyr8   r9   r>   s     r%   test_task_not_foundz,FSMEntityHistoryAPITests.test_task_not_found   sB    &&DII&6;;??#JK##s***r'   c                    | j                   j                  | j                         | j                   j                  d| j                  j
                   d      }|j                  dk(  sJ |j                         d   g k(  sJ y )Nr7   /api/fsm/entities/task/rE   rF   rG   )r:   r;   r   r<   r!   rH   r=   rI   r>   s     r%   test_empty_task_historyz0FSMEntityHistoryAPITests.test_empty_task_history   sr    &&DII&6;;??%<T=U=U=X=X<YYa#bc##s***}}y)R///r'   c           
         t         j                  j                  | j                        j	                          t        | j                  t        j                        }|j                  t        d      z
  |_        |j                          t        | j                  t        j                  t        j                  | j                        }t        | j                  t        j                  t        j                  d      }| j                  j                  | j                         | j                  j!                  d	| j                  j"                   d
      }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ | j                  j!                  d	| j                  j"                   d      }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ | j                  j!                  d	| j                  j"                   dt        j                         }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ | j                  j!                  d	| j                  j"                   dt        j                         }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ | j                  j!                  d	| j                  j"                   d      }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ | j                  j!                  d	| j                  j"                   d| j                  j"                         }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   d   | j                  j"                  k(  sJ |j                  t        d      z
  j-                         }|j                  j-                         }| j                  j!                  d	| j                  j"                   dt/        |       dt/        |             }|j$                  dk(  sJ t'        |j)                         d         dk(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ |j)                         d   d   d   t+        |j"                        k(  sJ y )N)r   )r   rL   rM   rN   )r   rL   rP   rQ   complete_task)r   rL   rP   rT   r7   ro   rE   rF   rG   rU   r   rH   rV   rW   rX   rY   rZ   z&/history?transition_name=complete_taskr[   rQ   r\   r]   )r   r   filterr   r    r   r	   r^   r_   r   r`   ra   r   rb   r:   r;   r<   rH   r=   rc   rI   rd   re   r   )r,   rf   rg   rh   r?   ri   rj   s          r%   test_task_historyz*FSMEntityHistoryAPITests.test_task_history   s     dii 0779"		9I9Q9QR$//)B2GG""..+33	
 #",,+77+	
 	&&DII&6;;??%<TYY\\N(#ST##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE ;;??%<TYY\\NJ^#_`##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE}}y)!,T2c'**oEEE ;;??%<TYY\\N/ZjZtZtYu#vw##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??%diill^3KL\LhLhKij
 ##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??%<TYY\\NJp#qr##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??%<TYY\\NJ`aeajajamam`n#op##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,^<TBdiillRRR #--	!0DDOOQ**446;;??%diill^3LUSbMcLddsty  {H  uI  tJ  K
 ##s***8==?9-.!333}}y)!,T2c'**oEEE}}y)!,T2c'**oEEEr'   c                     | j                   j                  | j                         | j                   j                  d      }|j                  dk(  sJ y )Nr7   z+/api/fsm/entities/annotation/999999/historyr8   r9   r>   s     r%   test_annotation_not_foundz2FSMEntityHistoryAPITests.test_annotation_not_found   sB    &&DII&6;;??#PQ##s***r'   c                    | j                   j                  | j                         | j                   j                  d| j                  j
                   d      }|j                  dk(  sJ |j                         d   g k(  sJ y )Nr7   /api/fsm/entities/annotation/rE   rF   rG   )r:   r;   r   r<   r"   rH   r=   rI   r>   s     r%   test_empty_annotation_historyz6FSMEntityHistoryAPITests.test_empty_annotation_history   sp    &&DII&6;;??%B4??CUCUBVV^#_`##s***}}y)R///r'   c           
      4   t        | j                  t        j                        }|j                  t        d      z
  |_        |j                          | j                  j                  | j                         | j                  j                  d| j                  j                   d      }|j                  dk(  sJ t        |j                         d         d	k(  sJ |j                         d   d
   d   t        |j                        k(  sJ | j                  j                  d| j                  j                   dt        j                         }|j                  dk(  sJ t        |j                         d         d	k(  sJ |j                         d   d
   d   t        |j                        k(  sJ | j                  j                  d| j                  j                   dt        j                         }|j                  dk(  sJ t        |j                         d         d
k(  sJ |j                  t        d	      z
  j!                         }|j                  j!                         }| j                  j                  d| j                  j                   dt#        |       dt#        |             }|j                  dk(  sJ t        |j                         d         d	k(  sJ |j                         d   d
   d   t        |j                        k(  sJ y )N)r"   rL   rM   rN   r7   rx   rE   rF   rG   rV   r   rH   rY   rZ   r\   r]   )r   r"   r   r^   r_   r   r`   r:   r;   r   r<   rH   r=   rc   rI   rd   re   r   )r,   rf   r?   ri   rj   s        r%   test_annotation_historyz0FSMEntityHistoryAPITests.test_annotation_history   s   (DOOKaKiKij$//)B2GG&&DII&6;;??%B4??CUCUBVV^#_`##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??+DOO,>,>+?OeOmOmNno
 ##s***8==?9-.!333}}y)!,T2c'**oEEE ;;??+DOO,>,>+??WXnXvXvWwx
 ##s***8==?9-.!333 #--	!0DDOOQ**446;;??+DOO,>,>+??XY^_nYoXpp  AF  GT  AU  @V  W
 ##s***8==?9-.!333}}y)!,T2c'**oEEEr'   )__name__
__module____qualname__classmethodr&   r-   r2   r@   rB   rJ   rk   rm   rp   rt   rv   ry   r{   __classcell__r4   s   @r%   r   r      sX    
/ 
/++
+
0QFf+
0GFR+
0"Fr'   r   c                   ^     e Zd Zed        Zd Z fdZd Zd Zd Z	d Z
d Zd	 Zd
 Z xZS )FSMEntityTransitionAPITestsc                    t               | _        | j                  j                  | _        t	        | j                        | _        t        | j
                  | j                        | _        t        j                  j                         j                          t        j                  j                         j                          t        j                  j                         j                          y r   )r   r   r   r   r   r   r   r"   r   r   r   r    r   r   r#   s    r%   r&   z)FSMEntityTransitionAPITests.setUpTestData  s    $&;;))s{{3*sxxP  "))+&&(##%,,.r'   c                     | j                   j                  | j                         t        j                  | j                         t               | _        y )Nr7   )r:   r;   r   r   r*   r
   StateManagerr+   s    r%   r-   z!FSMEntityTransitionAPITests.setUp  s8    &&DII&6		*-/r'   c                 J    t        j                          t        |           y r)   r/   r3   s    r%   r2   z$FSMEntityTransitionAPITests.tearDown  r5   r'   c                    | j                   j                  d| j                  j                   ddddidd      }|j                  d	k(  sJ |j                         }|d
   du sJ |d   t        j                  k(  sJ |d   d   d   | j                  j                  k(  sJ t        j                  | j                         | j                  j                  | j                        }|t        j                  k(  sJ y )Nro   /transition/task_completedrR   ztest completerT   transition_datarI   dataformatrF   successT	new_statestate_recordrQ   rH   )r:   postr   rH   r=   rI   r	   rb   r   r   r*   r   get_current_state_value)r,   r?   r   current_states       r%   #test_success_task_manual_transitionz?FSMEntityTransitionAPITests.test_success_task_manual_transition!  s    ;;##%diill^<@%58UdJef $ 

 ##s***}}I$&&&K $4$>$>>>>N#N3D9TYY\\III 			*))AA$))L 0 : ::::r'   c                 @   | j                   j                  d| j                  j                   dddid      }|j                  dk(  sJ |j                         }|d   d	u sJ |d
   t        j                  k(  sJ |d   d   d   | j                  j                  k(  sJ y )NrD   r   rT   project_in_progressrI   r   rF   r   Tr   r   rQ   rH   )	r:   r   r   rH   r=   rI   r   ra   r   )r,   r?   r   s      r%   &test_success_project_manual_transitionzBFSMEntityTransitionAPITests.test_success_project_manual_transition2  s    ;;##((9F#%:; $ 

 ##s***}}I$&&&K $7$C$CCCCN#N3D9TYY\\IIIr'   c                     | j                   j                  d| j                  j                   di d      }|j                  dk(  sJ |j                         }|j                  d      dk(  sJ d|v sJ d	|d   v sJ y )
Nro   r   rI   r     detailValidation errorvalidation_errorsrT   )r:   r   r   rH   r=   rI   r<   r,   r?   bodys      r%   4test_request_body_validation_missing_transition_namezPFSMEntityTransitionAPITests.test_request_body_validation_missing_transition_name>  s    ;;##%diill^<@ $ 

 ##s***}}xx!%7777"d*** D)<$====r'   c                     | j                   j                  d| j                  j                   ddi dd      }|j                  dk(  sJ |j                         }d|v sJ y 	Nro   r   does_not_existr   rI   r   r   r   r:   r   r   rH   r=   rI   r   s      r%   9test_returns_detailed_error_messages_on_failed_transitionzUFSMEntityTransitionAPITests.test_returns_detailed_error_messages_on_failed_transitionJ  si    ;;##%diill^<@%5"M $ 

 ##s***}}4r'   c                     | j                   j                  d| j                  j                   dddid      }|j                  dk(  sJ |j                         }|j                  d      d	k(  sJ d
|v sJ d|d
   v sJ y )Nrx   r   rT   annotation_createdrI   r   r   r   r   r   )r:   r   r"   rH   r=   rI   r<   r   s      r%   7test_cannot_trigger_auto_triggered_transitions_manuallyzSFSMEntityTransitionAPITests.test_cannot_trigger_auto_triggered_transitions_manuallyU  s    ;;##+DOO,>,>+?|L#%9: $ 

 ##s***}}xx!%7777"d*** D)<$====r'   c                     | j                   j                  d| j                  j                   dddid      }|j                  dk(  sJ |j                         }|d   d	   d
   | j                  j                  k(  sJ y )NrD   r   rT   r   rI   r   rF   r   rQ   rH   )r:   r   r   rH   r=   rI   r   r   s      r%   &test_audit_trail_captures_triggered_byzBFSMEntityTransitionAPITests.test_audit_trail_captures_triggered_byb  s    ;;##((9F#%:; $ 

 ##s***}}N#N3D9TYY\\IIIr'   c                     | j                   j                  d| j                  j                   ddi dd      }|j                  dk(  sJ |j                         }d|v sJ y r   r   r   s      r%   #test_unknown_transition_returns_400z?FSMEntityTransitionAPITests.test_unknown_transition_returns_400l  si    ;;##%diill^<@%5"M $ 

 ##s***}}4r'   )r|   r}   r~   r   r&   r-   r2   r   r   r   r   r   r   r   r   r   s   @r%   r   r     sD    / /0
;"
J
>	 >J r'   r   c                   0    e Zd ZdZ edd      d        Zy)LsoFSMEntityTransitionAPITestsz6Tests for LSO only that should not be inherited in LSEz/fsm.state_manager.CurrentContext.is_fsm_enabledF)return_valuec                     | j                   j                  d| j                  j                   dddid      }|j                  dk(  sJ | j
                  j                  | j                        }|J y)	z5LSE State manager infers missing states, LSO does notro   r   rT   r   rI   r   rF   N)r:   r   r   rH   r=   r   r   )r,   _mock_is_fsm_enabledr?   r   s       r%   3test_feature_flag_respected_no_state_record_createdzRLsoFSMEntityTransitionAPITests.test_feature_flag_respected_no_state_record_createdz  sy     ;;##%diill^<@#%56 $ 
 ##s***))AA$))L$$$r'   N)r|   r}   r~   __doc__r   r    r'   r%   r   r   w  s     @
<5Q% R%r'   r   N) datetimer   unittest.mockr   urllib.parser   core.current_requestr   fsm.state_choicesr   r   r	   fsm.state_managerr
   fsm.state_modelsr   r   r   fsm.tests.factoriesr   r   r   projects.tests.factoriesr   rest_framework.testr   tasks.tests.factoriesr   r   r   r   r   r   r'   r%   <module>r      s^       / [ [ / E E ] ] 3 + @zF{ zFzh + h V%%@+ %r'   