
    	]j                         d Z ddlmZ ddlmZmZ ddlZddlmZ ddl	m
Z
mZmZmZ ddlmZmZ  G d d	      Z G d
 de      Zy)z
Tests for FSM registry functionality.

Tests registry management, state model registration, transition registration,
and related error handling scenarios.
    )Optional)MockpatchN)TestCase)register_state_modelregister_state_transitionstate_model_registrytransition_registry)BaseTransitionTransitionContextc                       e Zd ZdZddZy)
MockEntityzMock entity for testingc                     || _         || _        t               | _        d| j                  _        d| j                  _        d| _        y )N
testentityztests.testentity   )pkidr   _meta
model_namelabel_lowerorganization_id)selfr   s     N/root/env/lib/python3.12/site-packages/label_studio/fsm/tests/test_registry.py__init__zMockEntity.__init__   s9    V
 ,

!3

     N)r   )__name__
__module____qualname____doc__r    r   r   r   r      s
    !!r   r   c                   4    e Zd ZdZd Zd Zd Zd Zd Zd Z	y)	RegistryTestsz/Tests for registry functionality and edge casesc                 "    t               | _        y N)r   entity)r   s    r   setUpzRegistryTests.setUp%   s     lr   c                     t               }d|_        t        ddi      |_        t        j                  d|       t        j
                  d      }|J ||k(  sJ |j                  | j                        }|ddik(  sJ y)zITest StateModelRegistry with state model that has get_denormalized_fieldsMockStateModelcustom_fielddenormalized_1)return_valuer   N)r   r   get_denormalized_fieldsr	   register_model	get_modelr%   )r   mock_state_modelregistered_modelresults       r   +test_registry_state_model_with_denormalizerz9RegistryTests.test_registry_state_model_with_denormalizer(   s      6$4! 48nVfEg3h0 	++L:JK 099,G+++#3333 "99$++F.*:;;;;r   c                 J   t               }d|_        t        t        d            |_        t	        j
                  d|       t        j                  t              5 }|j                  | j                         ddd       dt        j                        v sJ y# 1 sw Y   #xY w)zDTest error handling when get_denormalized_fields raises an exceptionr(   zDenormalizer failed)side_effectr   N)r   r   RuntimeErrorr,   r	   r-   pytestraisesr%   strvalue)r   r/   exc_infos      r   )test_registry_denormalizer_error_handlingz7RegistryTests.test_registry_denormalizer_error_handling=   s      6$4! 48LQfDg3h0 	++L:JK ]]<( 	BH44T[[A	B %HNN(;;;;	B 	Bs   BB"c                    t               }d|_        t               }d|_        t        j                  d|       t	        d      5 }t        j                  d|       |j
                  j                          |j
                  j                  }d}|D ]  }d|d   d   v s|} n |J d       |d   d   }d|v sJ 	 ddd       y# 1 sw Y   yxY w)	z7Test warning when overwriting existing registry entries
MockModel1
MockModel2r   zfsm.registry.loggerNz Overwriting existing state modelr   z9Expected debug log about overwriting existing state model)r   r   r	   r-   r   debugassert_calledcall_args_list)r   mock_state_model1mock_state_model2mock_loggerdebug_callsoverwrite_callcall	debug_msgs           r   test_registry_overwrite_warningz-RegistryTests.test_registry_overwrite_warningO   s     !F%1" F%1" 	++L:KL () 	C[ //>OP ++-%++::K!N# 5aC%)N "-j/jj-&q)!,I5BBB	C 	C 	Cs   ACCCc                    t               }d|_        t        j                  d|        G d dt              }t        j                  dd|       t        j                  d      J dt        j                  d      v sJ t        j                          t        j                          t        j                  d      J t        j                  d      i k(  sJ y)zTest registry clear methodsr(   r   c                   *    e Zd Zddee   defdZd Zy)ARegistryTests.test_registry_clear_methods.<locals>.TestTransitionNcontextreturnc                      y)NTESTr    r   rM   s     r   get_target_statezRRegistryTests.test_registry_clear_methods.<locals>.TestTransition.get_target_statet   s    r   c                     i S r$   r    rQ   s     r   
transitionzLRegistryTests.test_registry_clear_methods.<locals>.TestTransition.transitionw       	r   r$   r   r   r   r   r   r8   rR   rT   r    r   r   TestTransitionrL   s   s!    9J0K WZ r   rW   test_transitionN)
r   r   r	   r-   r   r
   registerr.   get_transitions_for_entityclear)r   r/   rW   s      r   test_registry_clear_methodsz)RegistryTests.test_registry_clear_methodsk   s      6$4!++L:JK	^ 	 	$$\3DnU $--l;GGG $7$R$RS_$```` 	""$!!# $--l;CCC"==lKrQQQr   c                     t        d       G d d             }t        j                  d      |k(  sJ t        dd       G d dt                     }t        j                  d      }d|v sJ |d   |k(  sJ y)z)Test decorator functions for registrationdecorated_entityc                       e Zd Zy)LRegistryTests.test_registry_decorator_functions.<locals>.DecoratedStateModelN)r   r   r   r    r   r   DecoratedStateModelr`      s    r   ra   decorated_transitionc                   *    e Zd Zddee   defdZd Zy)LRegistryTests.test_registry_decorator_functions.<locals>.DecoratedTransitionNrM   rN   c                      y)N	DECORATEDr    rQ   s     r   rR   z]RegistryTests.test_registry_decorator_functions.<locals>.DecoratedTransition.get_target_state   s    "r   c                     i S r$   r    rQ   s     r   rT   zWRegistryTests.test_registry_decorator_functions.<locals>.DecoratedTransition.transition   rU   r   r$   rV   r    r   r   DecoratedTransitionrd      s!    #9J0K #WZ #r   rh   N)r   r	   r.   r   r   r
   rZ   )r   ra   rh   transitionss       r   !test_registry_decorator_functionsz/RegistryTests.test_registry_decorator_functions   s     
0	1	 	 
2	 $--.@AEXXXX 
##57M	N	. 	 
O	 *DDEWX%444126IIIIr   N)
r   r   r   r   r&   r2   r;   rI   r\   rj   r    r   r   r"   r"   "   s&    9#<*<$C8R:Jr   r"   )r   typingr   unittest.mockr   r   r6   django.testr   fsm.registryr   r   r	   r
   fsm.transitionsr   r   r   r"   r    r   r   <module>rp      sA     %     >	! 	!}JH }Jr   