
    ʹh-                        S r SSKrSSKJs  J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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 streams app models.
    N)	timedelta)TestCase)get_user_model)ValidationError)timezone)ChannelStreamSession
HLSSegmentVideoConfigurationAudioConfigurationc                   <    \ rS rSrSrS rS rS rS rS r	S r
S	rg
)ChannelModelTest   zTest cases for Channel model.c                     [         R                  R                  SSSS9U l        [        R
                  " 5       U l        g Ntestusertest@example.comtestpass123usernameemailpassword)Userobjectscreate_userusertempfilemkdtemptemp_dirselfs    JC:\Users\brahi\OneDrive\Desktop\Code\src\apps\streams\tests\test_models.pysetUpChannelModelTest.setUp   s8    LL,,$" - 
	
 !((*    c                 B    [         R                  " U R                  SS9  g )NT)ignore_errors)shutilrmtreer   r    s    r"   tearDownChannelModelTest.tearDown    s    dmm48r%   c                    [         R                  R                  SSSU R                  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 channel creation.Test Channeltest-channelhttps://example.com/stream.m3u8nameslughls_urloutput_directory
created_by   
   N)r   r   creater   r   assertEqualr1   r2   segment_durationmax_segments
assertTrue	is_active)r!   channels     r"   test_channel_creation&ChannelModelTest.test_channel_creation#   s    //((5!]]yy ) 
 	~6~61115--r2))*r%   c           	         [         R                  R                  SSSU R                  U R                  S9  U R                  [        5         [         R                  R                  SSSU R                  U R                  S9  SSS5        U R                  [        5         [         R                  R                  SSS	U R                  U R                  S9  SSS5        g! , (       d  f       Nb= f! , (       d  f       g= f)
z)Test unique constraints on name and slug.r-   r.   z https://example.com/stream1.m3u8r0   ztest-channel-2z https://example.com/stream2.m3u8NzTest Channel 2z https://example.com/stream3.m3u8)r   r   r8   r   r   assertRaises	Exceptionr    s    r"   test_channel_unique_constraints0ChannelModelTest.test_channel_unique_constraints3   s    6!]]yy 	 	
 y)OO""#%:!%99 #  * y)OO""%#:!%99 #  *) *) *)s   6C6C.
C+.
C<c                     [         R                  R                  SSSSU R                  S9nUR	                  5       nSUR
                   3nU R                  X#5        g)zTest output path generation.r-   r.   r/   z/tmp/streamsr0   z/tmp/streams/N)r   r   r8   r   get_output_pathr2   r9   )r!   r>   output_pathexpected_paths       r"   test_get_output_path%ChannelModelTest.test_get_output_pathQ   s\    //((5+yy ) 
 --/'~64r%   c                 P   [         R                  R                  SSSU R                  U R                  S9nU R                  UR                  5       5        [        R                  R                  US[        R                  " 5       S9nU R                  UR                  5       U5        g)zTest active session retrieval.r-   r.   r/   r0   activer>   status
started_atN)r   r   r8   r   r   assertIsNoneget_active_sessionr	   r   nowr9   )r!   r>   sessions      r"   test_get_active_session(ChannelModelTest.test_get_active_session_   s    //((5!]]yy ) 
 	'4467  ''..||~ / 
 	335w?r%   )r   r   N)__name__
__module____qualname____firstlineno____doc__r#   r*   r?   rD   rJ   rU   __static_attributes__ r%   r"   r   r      s$    '+9+ <5@r%   r   c                   0    \ rS rSrSrS rS rS rS rSr	g)	StreamSessionModelTestw   z#Test cases for StreamSession model.c                     [         R                  R                  SSSS9U l        [        R                  R                  SSSSU R                  S	9U l        g )
Nr   r   r   r   r-   r.   r/   	/tmp/testr0   )r   r   r   r   r   r8   r>   r    s    r"   r#   StreamSessionModelTest.setUpz   sV    LL,,$" - 
	
 --5(yy . 
r%   c                 l   [         R                  R                  U R                  S[        R
                  " 5       S9n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 session creation.pendingrN   N)r	   r   r8   r>   r   rS   r9   rO   assertIsNotNonerP   rQ   ended_at)r!   rT   s     r"   test_session_creation,StreamSessionModelTest.test_session_creation   s    ''..LL||~ / 
 	$,,73W//0'**+r%   c                    [         R                  " 5       n[        R                  R	                  U R
                  SU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 session duration calculation.rM   rN   r      )minutes	completedN)r   rS   r	   r   r8   r>   durationrf   assertGreatertotal_secondsr   rg   rO   saver9   )r!   
start_timerT   rn   end_times        r"   test_session_duration,StreamSessionModelTest.test_session_duration   s    \\^
''..LL! / 
 ##%X&8113Q7 	" 55#$##%9R#89r%   c                     [         R                  R                  U R                  S[        R
                  " 5       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 session.rM   rN   zSession z - z	 (active)N)
r	   r   r8   r>   r   rS   idr1   r9   str)r!   rT   expected_strs      r"   test_session_str_representation6StreamSessionModelTest.test_session_str_representation   si    ''..LL||~ / 
 "'**S1B1B0C9MW|4r%   )r>   r   N)
rW   rX   rY   rZ   r[   r#   rh   rt   rz   r\   r]   r%   r"   r_   r_   w   s    -
,:.	5r%   r_   c                   *    \ rS rSrSrS rS rS rSrg)HLSSegmentModelTest   z Test cases for HLSSegment model.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
        g )Nr   r   r   r   r-   r.   r/   rb   r0   rM   rN   )r   r   r   r   r   r8   r>   r	   r   rS   rT   r    s    r"   r#   HLSSegmentModelTest.setUp   s    LL,,$" - 
	
 --5(yy . 
 %,,33LL||~ 4 
r%   c           	         [         R                  R                  U R                  S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                  5        g)zTest basic segment creation.   segment_001.ts/tmp/test/segment_001.ts      @i  )rT   sequence_numberfilename	file_pathrn   	file_sizeN)
r
   r   r8   rT   r9   r   r   rn   assertFalseis_processed)r!   segments     r"   test_segment_creation)HLSSegmentModelTest.test_segment_creation   s    $$++LL%0 , 
 	$,,700!4))+;<))3/--.r%   c                 d   [         R                  R                  U R                  SSSSS9n[         R                  R                  U R                  SSSSS9n[	        [         R                  R                  U R                  S	95      nU R                  US
   U5        U R                  US   U5        g)z)Test segment ordering by sequence number.   zsegment_002.tsz/tmp/test/segment_002.tsr   )rT   r   r   r   rn   r   r   r   )rT   r   N)r
   r   r8   rT   listfilterr9   )r!   segment2segment1segmentss       r"   test_segment_ordering)HLSSegmentModelTest.test_segment_ordering   s     %%,,LL%0 - 
 %%,,LL%0 - 
 
**11$,,1GH!h/!h/r%   )r>   rT   r   N)	rW   rX   rY   rZ   r[   r#   r   r   r\   r]   r%   r"   r}   r}      s    *
&/"0r%   r}   c                   *    \ rS rSrSrS rS rS rSrg)VideoConfigurationModelTest   z(Test cases for VideoConfiguration model.c                 L    [         R                  R                  SSSS9U l        g r   r   r   r   r   r    s    r"   r#   !VideoConfigurationModelTest.setUp   &    LL,,$" - 
	r%   c           
         [         R                  R                  SSSS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                  S5        U R	                  UR                  S5        g)	z"Test video configuration creation.z	HD Configh264逄   8        >@r1   codecbitratewidthheight	framerater5   N)r   r   r8   r   r9   r1   r   r   r   r   r   r!   configs     r"   test_video_config_creation6VideoConfigurationModelTest.test_video_config_creation  s    #++22yy 3 
 	k2v.1t,-))40r%   c                 d   U R                  [        5         [        SSSSSSU R                  S9nUR	                  5         SSS5        U R                  [        5         [        SSSSSS	U R                  S9nUR	                  5         SSS5        g! , (       d  f       NV= f! , (       d  f       g= f)
z$Test video configuration validation.Invalid Configr   r   r   r   r   r   Nr   )rB   r   r   r   
full_cleanr   s     r"   test_video_config_validation8VideoConfigurationModelTest.test_video_config_validation  s     /'%99F  0 /'%99F  0/ 0/ 0/s   *B*B!
B!
B/r   N)	rW   rX   rY   rZ   r[   r#   r   r   r\   r]   r%   r"   r   r      s    2
1& r%   r   c                   *    \ rS rSrSrS rS rS rSrg)AudioConfigurationModelTesti2  z(Test cases for AudioConfiguration model.c                 L    [         R                  R                  SSSS9U l        g r   r   r    s    r"   r#   !AudioConfigurationModelTest.setUp5  r   r%   c           	      t   [         R                  R                  SSS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                  S5        g)z"Test audio configuration creation.zHigh Quality Audioaac  D  r   r1   r   r   sample_ratechannelsr5   N)
r   r   r8   r   r9   r1   r   r   r   r   r   s     r"   test_audio_config_creation6AudioConfigurationModelTest.test_audio_config_creation<  s    #++22%yy 3 
 	&:;u-0++U3!,r%   c           
      `   U R                  [        5         [        SSSSSU R                  S9nUR	                  5         SSS5        U R                  [        5         [        SSSSSU R                  S9nUR	                  5         SSS5        g! , (       d  f       NU= f! , (       d  f       g= f)	z$Test audio configuration validation.r   r   r   r   r   r   Nr   )rB   r   r   r   r   r   s     r"   test_audio_config_validation8AudioConfigurationModelTest.test_audio_config_validationM  s     /'%99F  0 /'%!99F  0/ 0/ 0/s   )B)B
B
B-r   N)	rW   rX   rY   rZ   r[   r#   r   r   r\   r]   r%   r"   r   r   2  s    2
-" r%   r   )r[   builtins@py_builtins_pytest.assertion.rewrite	assertionrewrite
@pytest_arr   r(   datetimer   django.testr   django.contrib.authr   django.core.exceptionsr   django.utilsr   apps.streams.modelsr   r	   r
   r   r   r   r   r_   r}   r   r   r]   r%   r"   <module>r      s}          . 2 ! 
 _@x _@D>5X >5B=0( =0@7 ( 7 t3 ( 3 r%   