
    ZThn+                         d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	 d dl
mZmZ d dlmZmZ d dlmZ  ej$                         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)    )mockN)Asset)BatchUpdateRulesResponseRule)MockChannel)ChannelConfigChannelDataType)$RuleActionCreateDataReviewAnnotation
RuleConfig)RuleServicec                  (    t        t                     S )N)r   r        _/home/www/backend.miabetepe.com/venv/lib/python3.12/site-packages/sift_py/rule/_service_test.pyrule_servicer      s    {}%%r   c                     d}t         j                  j                  t        dt	        d            5 }| j                  |       |j                  |       d d d        y # 1 sw Y   y xY w)Nrule-client-key_get_rule_from_client_keyabcnamereturn_valuer   patchobjectr   r   get_ruleassert_called_once_with)r   rule_client_keymock_get_rule_from_client_keys      r   *test_rule_service_get_rule_from_client_keyr!      sf    'O			#u% 
 
 O 
'o.%==oNO O O   #AA(c                     d}t         j                  j                  t        dt	        d            5 }| j                  |       |j                  |       d d d        y # 1 sw Y   y xY w)Nrule-id_get_rule_from_rule_idr   r   r   r   )r   rule_idmock_get_rule_from_rule_ids      r   'test_rule_service_get_rule_from_rule_idr(   !   sc    G			-De<L 
 
 D	#g&"::7C	D D Dr"   c                 \   t         j                  j                  t        dd       5 }t         j                  j                  t        dd       5 }| j	                  d      }|j                          |j                          |J 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr   r   r%    )r   r   r   r   r   asset_called_once)r   r    r'   rules       r   4test_rule_service_get_rule_missing_client_key_and_idr-   +   s    			# 
 
   
'ZZ1  
 	 '((,D);;=&88:<<	    
	  	    s#   'B"6BB"B	B""B+c                     t        ddg       }t        j                  j                  t        d      5 }| j                  |       |j                  |       d d d        y # 1 sw Y   y xY w)Nr,   r   r   r   channel_references_create_rule)r   r   r   r   r   create_or_update_ruler   )r   r,   mock_create_rules      r   test_rule_service_create_ruler4   :   s_    )D 
		;	7 7;K**400067 7 7r"   c                    t        ddg       }t        j                  j                  t        d      5 }t        j                  j                  t        dt        |j                              5 }| j                  |       |j                  |j                         |j                          d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   r/   _update_ruler   r   r   )r   r   r   r   r   r   r   r2   r   r   assert_called_once)r   r,   mock_update_ruler    s       r   test_rule_service_update_ruler9   F   s    )D 
		;	7 2;KZZ44TYYCW  
 	2*..t4)AA$BVBVW//1	22 2	2 	22 2s#   ;C.=B<+C<C	CCc           	         ddddigddddd	gd
}t         j                  j                  t        d      5  t        j                  d|g      5  | j	                  dg      }t        |      dk(  sJ |d   }|j                  |d   k(  sJ |j                  |d   k(  sJ |j                  dddgk(  sJ |j                  |d   k(  sJ |j                  |d   k(  sJ |j                  j                  |d   k(  sJ |j                  |d   k(  sJ t        |j                  t              sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   $1channeldescription$1 > 0assignee@abc.comreviewassetr   r   r0   r=   
expressionassigneetypeasset_namesr2   &sift_py.rule.service.load_rule_modulesr   path/to/rules.yml   r   r   r   )channel_referencechannel_identifierrC   rD   rF   )r   r   r   r   load_rules_from_yamllenr   r   r0   r=   rC   actionrD   rF   
isinstancer
   r   	rule_yamlrule_configsrule_configs       r   &test_rule_service_load_rules_from_yamlrT   V   s   , $i01$&y	I 
		;(?	@ XZZ4#
 	X (<<>Q=RSL|$)))&q/K##y'8888..)<M2NNNN11)-*36    **i.FFFF))Y|-DDDD%%..)J2GGGG**i.FFFFk002VWWW)	XX X	X 	XX Xs$   ECD:)E:E	?EEc                 X   dddigdddddgd	}t         j                  j                  t        d
      5  t         j                  j                  | j                  d      5 }t        t        j                  dd      gd      }||_        t        j                  d|g      5  | j                  dg      }t        |      dk(  sJ |d   }|j                  |d   k(  sJ |j                  dk(  sJ 	 d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r;   r<   r=   r>   r?   phaserA   )r   r0   r=   rC   rD   rE   rF   _get_assetsBatchUpdateRulesr$   )r&   r   T)created_rule_identifierssuccessrG   r   rH   rI   r   r   )r   r   r   r   _rule_service_stubr   RuleIdentifiersr   create_external_rules_from_yamlrM   r   r&   )r   rQ   mock_batch_update_rulesresprule_identifiersrule_identifiers         r   1test_rule_service_create_external_rules_from_yamlrb   y   sM    $i01$&yI 
		;	6 <ZZ++-?
 	<$+,<<YU[\* 	D 48#08'[ < $0#O#O()$  +,111"21"5&++y/@@@@&..);;;<	<< << <	< 	<< <s=   +D AD!AD/D7D DDD	D  D)c           	          ddddigddddd	gd
}t        j                  d|g      5  t        j                  t        d      5  | j                  dg       d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   r;   r<   r=   r>   r?   r@   rA   rB   rG   r   z$requires rule_client_key to be emptymatchrH   )r   r   pytestraises
ValueErrorr]   )r   rQ   s     r   9test_rule_service_create_invalid_external_rules_from_yamlri      s     , $i01$&y	I 
0[
 P ]]:-ST 	P88:M9NO	P	P P	P 	P	P Ps#   A4A(A4(A1	-A44A=c                  8   t        dddg t               dg      } t        ddd	      }t        j                  d
t        j
                               5 }|j                  }d|j                  j                  j                  _	        t        t                     }t        j                  j                  t        d|g      5  |j                  | dg      }d|j                  v sJ d|j                  v sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   1r   r   r   rC   r0   rN   rF   rA   asset-idorg-idr   asset_idorganization_id$sift_py.rule.service.RuleServiceStubr   r*   rW   )r   r
   r   r   r   	MagicMockr   GetRuler,   r&   r   r   r   attach_assetrF   )rS   rA   	mock_stubmock_instancer   returned_configs         r   test_rule_service_attach_assetry      s   )35GK wXNE	.T^^=M
 
:	!..:<**//7";=1ZZ{MP 	:*77gYOOO77777o99999	:
: 
:	: 	:
: 
:s%   A,D>4D3DD		DDc            	      X   t        dddg t               ddg      } t        ddd	      }t        dd
d	      }t        j                  dt        j
                               5 }|j                  }d|j                  j                  j                  _	        t        t                     }t        j                  j                  t        d||g      5  |j                  | dg      }d|j                  vsJ d|j                  v sJ 	 d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   rk   r   defrl   zabc-idrn   ro   zdef-idrr   r   r*   rW   )r   r
   r   r   r   rs   r   rt   r,   r&   r   r   r   detach_assetrF   )rS   	asset_abc	asset_defrv   rw   r   rx   s          r   test_rule_service_detach_assetr      s   )35ENK 58XNI58XNI	.T^^=M
 
8	!..:<**//7";=1ZZ{MT]H^_ 	8*77eWMO ; ;;;;O77777	8
8 
8	8 	8
8 
8s%   !A-D 4DD D	D  D)c                     t        dddg t               dg      } t        ddd      }t        j                  d	t        j
                         
      5  t        t                     }t        j                  j                  t        d|g
      5  t        j                  t        d      5  |j                  | dg       d d d        d d d        d d d        y # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)Nr,   r   rk   rA   rl   rm   rn   ro   rr   r   rW   z*must be associated with at least one assetrd   )r   r
   r   r   r   rs   r   r   r   rf   rg   rh   r|   )rS   rA   r   s      r   )test_rule_service_detach_asset_empty_listr      s    )35IK wXNE	:IY	Z B";=1ZZ{MP 	Bz1]^ B))+yAB	BB BB B	B 	BB Bs<   ;C.C")C=C"C.CC""C+	'C..C7c           	         t        dddt        dt        j                        dgdgdt	               	      }t
        j                  j                  t        d
      5 }| j                  |       |j                  |       |j                  d   d   }t        |j                        dk(  sJ |j                  d   dk(  sJ 	 ddd       y# 1 sw Y   yxY w)z-Test creating a rule with contextual channelsr,   r   r;   temperature)r   	data_type)rJ   channel_confighumidityz$1 > 10)r   r   r0   contextual_channelsrC   rN   r1   r   rI   N)r   r   r	   DOUBLEr
   r   r   r   r   r2   r   	call_argsrM   r   )r   r,   r3   created_rules       r   6test_rule_service_create_rule_with_contextual_channelsr      s    ) &*"/&-44#
 (L35D" 
		;	7 A;K**40006'11!4Q7<334999//2j@@@A A As   A#C		Cc           	         ddddigddgddd	d
gd}t         j                  j                  t        d      5  t        j                  d|g      5  | j	                  dg      }t        |      dk(  sJ |d   }t        |j                        dk(  sJ |j                  d   dk(  sJ |j                  d   dk(  sJ 	 ddd       ddd       y# 1 sw Y   xY w# 1 sw Y   yxY w)z5Test loading rules from YAML with contextual channelsr,   r   r;   r   r   pressurer=   r>   r@   rA   )r   r   r0   r   r=   rC   rE   rF   r2   rG   r   rH   rI   r      N)r   r   r   r   rL   rM   r   rP   s       r   ?test_rule_service_load_rules_from_yaml_with_contextual_channelsr     s    , $m45 *J7$y	I 
		;(?	@ DZZ4#
 
	D (<<>Q=RSL|$)))&q/K{6671<<<2215CCC2215CCC
	DD D
	D 
	DD Ds$   CA*C:CC	CC )!unittestr   rf   sift.assets.v1.assets_pb2r   sift.rules.v1.rules_pb2r   r   #sift_py._internal.test_util.channelr   sift_py.ingestion.channelr   r	   sift_py.rule.configr
   r   sift_py.rule.servicer   fixturer   r!   r(   r-   r4   r9   rT   rb   ri   ry   r   r   r   r   r   r   r   <module>r      s      + B ; D - & &	OD 	72  XF!<HP(:.80B"A6Dr   