
    WδhSP                        S r SSKrSSKJs  Jr  SSKrSSKrSSK	r	SSK
Jr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJrJr  SS	KJrJrJrJr  \" 5       r " S
 S\5      r " S S\5      r " S S\5      r " S S\5      r  " S S\5      r!g)z$
Unit tests for jingles app models.
    N)TestCase)get_user_model)ValidationError)timezone)	timedelta)ChannelStreamSession)JingleTemplateJingleDetectionAdBreakDetectionStatisticsc                   B    \ rS rSrSrS rS rS rS rS r	S r
S	 rS
rg)JingleTemplateModelTest   z$Test cases for JingleTemplate model.c                 `   [         R                  R                  SSSS9U l        [        R
                  " 5       U l        [        R                  R                  U R                  S5      U l
        [        U R                  S5       nUR                  S5        S S S 5        g ! , (       d  f       g = f)Ntestusertest@example.comtestpass123usernameemailpasswordztest_jingle.jpgwbs   fake_image_data)Userobjectscreate_userusertempfilemkdtemptemp_dirospathjointest_image_pathopenwrite)selffs     JC:\Users\brahi\OneDrive\Desktop\Code\src\apps\jingles\tests\test_models.pysetUpJingleTemplateModelTest.setUp   s    LL,,$" - 
	
 !((*!ww||DMM;LM $&&-GG&' .--s   B
B-c                 B    [         R                  " U R                  SS9  g NT)ignore_errorsshutilrmtreer    r'   s    r)   tearDown JingleTemplateModelTest.tearDown&       dmm48    c           	         [         R                  R                  SSU R                  SSU R                  S9nU R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  5        g)z$Test basic jingle template creation.Test Jingletest-jingle皙?
commercial)nameslug
image_pathsimilarity_thresholdcategory
created_byN)r
   r   creater$   r   assertEqualr<   r=   r?   r@   
assertTrue	is_activer'   templates     r)   test_jingle_template_creation5JingleTemplateModelTest.test_jingle_template_creation)   s    !))00++!$!yy 1 
 	6666<**L9**+r6   c                    [         R                  R                  SSU R                  U R                  S9  U R                  [        5         [         R                  R                  SSU R                  U R                  S9  SSS5        U R                  [        5         [         R                  R                  SSU R                  U R                  S9  SSS5        g! , (       d  f       Na= f! , (       d  f       g= f)z)Test unique constraints on name and slug.r8   r9   r<   r=   r>   rA   ztest-jingle-2NzTest Jingle 2)r
   r   rB   r$   r   assertRaises	Exceptionr2   s    r)   'test_jingle_template_unique_constraints?JingleTemplateModelTest.test_jingle_template_unique_constraints:   s    %%++yy	 	& 	
 y)""))"$//99	 *  * y)""))$"//99	 *  *) *) *)s   
5C5C+
C(+
C9c           	         U R                  [        5         [        SSU R                  SU R                  S9nUR                  5         SSS5        U R                  [        5         [        SSU R                  SU R                  S9nUR                  5         SSS5        g! , (       d  f       N^= f! , (       d  f       g= f)z%Test similarity threshold validation.zInvalid Jinglezinvalid-jingle皙)r<   r=   r>   r?   rA   N      ?)rL   r   r
   r$   r   
full_cleanrF   s     r)   $test_similarity_threshold_validation<JingleTemplateModelTest.test_similarity_threshold_validationU   s     /%%%//%)99H ! 0 /%%%//%(99H ! 0/ 0/ 0/s   2B %2B1 
B.1
B?c                     [         R                  R                  SSU R                  U R                  S9nU R                  UR                  5       5        SUl        U R                  UR                  5       5        g)zTest image existence checking.r8   r9   rK   z/non/existent/path.jpgN)	r
   r   rB   r$   r   rD   image_existsr>   assertFalserF   s     r)   test_image_exists_method0JingleTemplateModelTest.test_image_exists_methodm   sk    !))00++yy	 1 
 	--/0 7..01r6   c                    [         R                  R                  SSU R                  U R                  S9nU R                  [        R                  R                  U R                  5      5        UR                  5       nU R                  U5        U R                  [        R                  R                  U R                  5      5        g)zTest image deletion.r8   r9   rK   N)r
   r   rB   r$   r   rD   r!   r"   existsdelete_imagerX   )r'   rG   results      r)   test_delete_image_method0JingleTemplateModelTest.test_delete_image_method|   s    !))00++yy	 1 
 	t';';<=&&((<(<=>r6   )r    r$   r   N)__name__
__module____qualname____firstlineno____doc__r*   r3   rH   rN   rT   rY   r_   __static_attributes__ r6   r)   r   r      s(    .(9,"6"02?r6   r   c                   6    \ rS rSrSrS rS rS rS rS r	Sr
g	)
JingleDetectionModelTest   z%Test cases for JingleDetection model.c                    [         R                  R                  SSSS9U l        [        R
                  " 5       U l        [        R                  R                  SSSU R                  U R                  S9U l	        [        R                  R                  U R                  S	[        R                  " 5       S
9U l        [        R                  R                  SSSU R                  S9U l        g )Nr   r   r   r   Test Channeltest-channelhttps://example.com/stream.m3u8r<   r=   hls_urloutput_directoryrA   activechannelstatus
started_atr8   r9   /tmp/test_jingle.jpgrK   )r   r   r   r   r   r   r    r   rB   rt   r	   r   nowsessionr
   rG   r2   s    r)   r*   JingleDetectionModelTest.setUp   s    LL,,$" - 
	
 !((*--5!]]yy . 
 %,,33LL||~ 4 
 '..55-yy	 6 
r6   c                 B    [         R                  " U R                  SS9  g r-   r/   r2   s    r)   r3   !JingleDetectionModelTest.tearDown   r5   r6   c           	         [         R                  R                  U R                  U R                  S[
        R                  " 5       SSS9nU R                  UR                  U R                  5        U R                  UR                  U R                  5        U R                  UR                  S5        U R                  UR                  5        U R                  UR                  5        g)zTest basic detection creation.segment_001.ts333333?/tmp/frame_001.jpgry   jingle_templatesegment_filenamedetection_timeconfidence_score
frame_pathN)r   r   rB   ry   rG   r   rx   rC   r   r   rX   is_confirmedis_false_positiver'   	detections     r)   test_detection_creation0JingleDetectionModelTest.test_detection_creation   s    #++22LL MM-#<<>!+ 3 
	 	**DLL922DMMB33T://0445r6   c           
         U R                  [        5         [        U R                  U R                  S[
        R                  " 5       SSS9nUR                  5         SSS5        U R                  [        5         [        U R                  U R                  S[
        R                  " 5       SSS9nUR                  5         SSS5        g! , (       d  f       Nr= f! , (       d  f       g= f)z!Test confidence score validation.r~   rQ   r   r   NrR   )rL   r   r   ry   rG   r   rx   rS   r   s     r)   $test_detection_confidence_validation=JingleDetectionModelTest.test_detection_confidence_validation   s     /' $!1'||~!%/I   " 0 /' $!1'||~!$/I   " 0/ 0/ 0/s   AC9AC
C
C'c           	         [         R                  R                  U R                  U R                  S[
        R                  " 5       SSS9nSUR                   SU R                  R                   S3nU R                  [        U5      U5        g)	z(Test string representation of detection.r~   r   r   r   z
Detection  - z (0.85)N)r   r   rB   ry   rG   r   rx   idr<   rC   str)r'   r   expected_strs      r)   !test_detection_str_representation:JingleDetectionModelTest.test_detection_str_representation   sv    #++22LL MM-#<<>!+ 3 
	 $ILL>T]]5G5G4HPY6r6   )rt   ry   r    rG   r   N)ra   rb   rc   rd   re   r*   r3   r   r   r   rf   rg   r6   r)   ri   ri      s    /
:96"#47r6   ri   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)AdBreakModelTest   zTest cases for AdBreak model.c           	      p   [         R                  R                  SSSS9U l        [        R
                  " 5       U l        [        R                  R                  SSSU R                  U R                  S9U l	        [        R                  R                  U R                  S	[        R                  " 5       S
9U l        [        R                  R                  SSSU R                  S9U l        [         R                  R                  U R                  U R                  S[        R                  " 5       SSS9U l        g )Nr   r   r   r   rl   rm   rn   ro   rr   rs   r8   r9   rw   rK   r~   r   r   r   )r   r   r   r   r   r   r    r   rB   rt   r	   r   rx   ry   r
   rG   r   start_detectionr2   s    r)   r*   AdBreakModelTest.setUp   s   LL,,$" - 
	
 !((*--5!]]yy . 
 %,,33LL||~ 4 
 '..55-yy	 6 
  /66==LL MM-#<<>!+  >  
r6   c                 B    [         R                  " U R                  SS9  g r-   r/   r2   s    r)   r3   AdBreakModelTest.tearDown  r5   r6   c                    [         R                  R                  U R                  U R                  [
        R                  " 5       SS9nU R                  UR                  U R                  5        U R                  UR                  U R                  5        U R                  UR                  S5        U R                  UR                  5        U R                  UR                  5        g)zTest basic ad break creation.rr   ry   r   
start_timeru   N)r   r   rB   ry   r   r   rx   rC   ru   assertIsNoneend_detectionend_time)r'   ad_breaks     r)   test_ad_break_creation'AdBreakModelTest.test_ad_break_creation  s    ??))LL 00||~	 * 
 	))4<<81143G3GH(3(001(++,r6   c                    [         R                  " 5       n[        R                  R	                  U R
                  U R                  USS9nUR                  5       nU R                  U5        U R                  UR                  5       S5        U[        SS9-   nXBl        SUl        UR                  5         UR                  5       nU R                  U[        SS95        g)z#Test ad break duration calculation.rr   r   r      minutes	completedN)r   rx   r   r   rB   ry   r   durationassertIsNotNoneassertGreatertotal_secondsr   r   ru   saverC   )r'   r   r   r   r   s        r)   "test_ad_break_duration_calculation3AdBreakModelTest.test_ad_break_duration_calculation%  s    \\^
??))LL 00!	 * 
 $$&X&8113Q7 	! 44$%$$&9Q#78r6   c                 *   [         R                  R                  U R                  U R                  [
        R                  " 5       SS9nSUR                   SU R                  R                  R                   S3nU R                  [        U5      U5        g)z'Test string representation of ad break.rr   r   zAdBreak r   z	 (active)N)r   r   rB   ry   r   r   rx   r   rt   r<   rC   r   )r'   r   r   s      r)    test_ad_break_str_representation1AdBreakModelTest.test_ad_break_str_representation=  sv    ??))LL 00||~	 * 
 "(++c$,,2F2F2K2K1LIVX5r6   c           
      B   [         R                  R                  U R                  U R                  [
        R                  " 5       SS9n[        R                  R                  U R                  U R                  S[
        R                  " 5       [        SS9-   SSS9nX!l
        UR                  Ul        S	Ul        UR                  5         U R                  UR                  S	5        U R                  UR                  U5        U R!                  UR#                  5       5        g
)z,Test ad break completion with end detection.rr   r   zsegment_010.tsr   r   ?z/tmp/frame_010.jpgr   r   N)r   r   rB   ry   r   r   rx   r   rG   r   r   r   r   ru   r   rC   r   r   )r'   r   r   s      r)   test_ad_break_completion)AdBreakModelTest.test_ad_break_completionI  s    ??))LL 00||~	 * 
 (//66LL MM-#<<>Ia,@@!+ 7 
 "/)88%+6//?X..01r6   )rt   ry   r   r    rG   r   N)ra   rb   rc   rd   re   r*   r3   r   r   r   r   rf   rg   r6   r)   r   r      s$    '$
L9-90
62r6   r   c                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)DetectionStatisticsModelTestig  z)Test cases for DetectionStatistics model.c                     [         R                  R                  SSSS9U l        [        R                  R                  SSSU R                  S9U l        g )	Nr   r   r   r   r8   r9   rw   rK   )r   r   r   r   r
   rB   rG   r2   s    r)   r*   "DetectionStatisticsModelTest.setUpj  sU    LL,,$" - 
	 '..55-yy	 6 
r6   c           	         [         R                  R                  U R                  [        R
                  " 5       R                  5       SSSSS9nU R                  UR                  U R                  5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        U R                  UR                  S5        g)z#Test detection statistics creation.
         r   r   datetotal_detectionsconfirmed_detectionsfalse_positivesaverage_confidenceN)r   r   rB   rG   r   rx   r   rC   r   r   r   r   r   r'   statss     r)   test_statistics_creation5DetectionStatisticsModelTest.test_statistics_creationx  s    #++22 MM$$&!"# 3 
 	..>//433Q7..21148r6   c           	          [         R                  R                  U R                  [        R
                  " 5       R                  5       SSSSS9nSnU R                  UR                  5       U5        g)zTest accuracy rate calculation.r   r   r   r   r   g      T@N	r   r   rB   rG   r   rx   r   rC   accuracy_rate)r'   r   expected_accuracys      r)   test_statistics_accuracy_rate:DetectionStatisticsModelTest.test_statistics_accuracy_rate  sd    #++22 MM$$&!"# 3 
 +,,.0ABr6   c           	          [         R                  R                  U R                  [        R
                  " 5       R                  5       SSSSS9nU R                  UR                  5       S5        g)z(Test accuracy rate with zero detections.r   g        r   Nr   r   s     r)   -test_statistics_accuracy_rate_zero_detectionsJDetectionStatisticsModelTest.test_statistics_accuracy_rate_zero_detections  s]    #++22 MM$$&!"" 3 
 	,,.2r6   c           
      X   [         R                  " 5       R                  5       n[        R                  R                  U R                  USSSSS9  U R                  [        5         [        R                  R                  U R                  USSSSS9  S	S	S	5        g	! , (       d  f       g	= f)
z,Test unique constraint on template and date.         r:   r   r   r   g      ?N)	r   rx   r   r   r   rB   rG   rL   rM   )r'   r   s     r)   !test_statistics_unique_constraint>DetectionStatisticsModelTest.test_statistics_unique_constraint  s    ||~""$##** MM!"# 	+ 	
 y)''.. $!"%& !#' /  *))s   %-B
B)c           	         [         R                  " 5       R                  5       n[        R                  R                  U R                  USSSSS9nU R                  R                   SU S3nU R                  [        U5      U5        g)	z)Test string representation of statistics.r   r   r   r   r   r   z (10 detections)N)
r   rx   r   r   r   rB   rG   r<   rC   r   )r'   r   r   r   s       r)   "test_statistics_str_representation?DetectionStatisticsModelTest.test_statistics_str_representation  s{    ||~""$#++22 MM!"# 3 
 --,,-S6FGU\2r6   )rG   r   N)ra   rb   rc   rd   re   r*   r   r   r   r   r   rf   rg   r6   r)   r   r   g  s$    3
9"C303r6   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	JingleDetectionQueryTesti  z9Test cases for JingleDetection queries and relationships.c                    [         R                  R                  SSSS9U l        [        R                  R                  SSSSU R                  S	9U l        [        R                  R                  U R                  S
[        R                  " 5       S9U l
        [        R                  R                  SSSU R                  S9U l        g )Nr   r   r   r   rl   rm   rn   z	/tmp/testro   rr   rs   r8   r9   rw   rK   )r   r   r   r   r   rB   rt   r	   r   rx   ry   r
   rG   r2   s    r)   r*   JingleDetectionQueryTest.setUp  s    LL,,$" - 
	 --5(yy . 
 %,,33LL||~ 4 
 '..55-yy	 6 
r6   c           	         [         R                  R                  U R                  U R                  S[
        R                  " 5       SSS9n[         R                  R                  U R                  U R                  S[
        R                  " 5       SSS9n[         R                  R                  SS	9nU R                  UR                  5       S
5        U R                  UR                  5       U5        [         R                  R                  SS9nU R                  UR                  5       S
5        U R                  UR                  5       U5        g)z.Test filtering detections by confidence score.r~   gffffff?r   r   segment_002.tsg?/tmp/frame_002.jpgr   )confidence_score__gter   r:   )confidence_score__ltN)r   r   rB   ry   rG   r   rx   filterrC   countfirst)r'   high_confidencelow_confidencehigh_conf_detectionslow_conf_detectionss        r)   &test_detection_filtering_by_confidence?JingleDetectionQueryTest.test_detection_filtering_by_confidence  s*    *1188LL MM-#<<>!+ 9 
 )0077LL MM-#<<>!+ 8 
  /66=="%  >  
 	-335q9-335G .55<<!$ = 
 	,224a8,224nEr6   c           	      6   [         R                  R                  SSSU R                  S9n[        R                  R                  U R
                  U R                  S[        R                  " 5       SSS9n[        R                  R                  U R
                  US	[        R                  " 5       S
SS9n[        R                  R                  U R                  S9nU R                  UR                  5       S5        U R                  UR                  5       U5        g)z&Test filtering detections by template.zOther Jinglezother-jinglez/tmp/other_jingle.jpgrK   r~   r   r   r   r   r   r   )r   r   N)r
   r   rB   r   r   ry   rG   r   rx   r   rC   r   r   )r'   other_template
detection1
detection2template_detectionss        r)   $test_detection_filtering_by_template=JingleDetectionQueryTest.test_detection_filtering_by_template  s     (//66.yy	 7 
 %,,33LL MM-#<<>!+ 4 

 %,,33LL*-#<<>!+ 4 

 .55<< MM = 
 	,224a8,224jAr6   c           
         [         R                  " 5       n[        R                  R	                  U R
                  U R                  SU[        SS9-   SSS9n[        R                  R	                  U R
                  U R                  SUSS	S9n[        [        R                  R                  5       5      nU R                  US
   U5        U R                  US   U5        g)z Test detection ordering by time.r   r   r   r   r   r   r~   r   r   r   r   N)r   rx   r   r   rB   ry   rG   r   listallrC   )r'   rx   r   r   
detectionss        r)   test_detection_time_ordering5JingleDetectionQueryTest.test_detection_time_ordering3  s    lln %,,33LL MM-1!55!+ 4 

 %,,33LL MM-!+ 4 

 /115578
A
3A
3r6   )rt   ry   rG   r   N)
ra   rb   rc   rd   re   r*   r   r   r   rf   rg   r6   r)   r   r     s    C
8!FF"BH4r6   r   )"re   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr   r0   r!   django.testr   django.contrib.authr   django.core.exceptionsr   django.utilsr   datetimer   apps.streams.modelsr   r	   apps.jingles.modelsr
   r   r   r   r   r   ri   r   r   r   rg   r6   r)   <module>r     s       	   . 2 !  6  t?h t?nZ7x Z7zz2x z2zc38 c3L@4x @4r6   