o
    ‚Ð¢i„  ã                   @   sŽ   d Z ddlZddlm  mZ ddlZddlZddl	m
Z
mZ ddlmZ ddlmZ dded	ed
e
fdd„ZG dd„ dƒZG dd„ dƒZdS )z(Tests for provider clients in mock mode.é    N)ÚTranscriptionRequestÚRequestStatus)ÚAIStudioProvider)ÚOpenRouterProviderÚseg_001ÚteÚseg_idÚlangÚreturnc                 C   s   t | d|| › ddS )NÚAAAAz.flac)Ú
segment_idÚaudio_base64Úlanguage_codeÚoriginal_file)r   )r   r	   © r   ú0/home/ubuntu/transcripts/tests/test_providers.pyÚ_make_request	   s   ür   c                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestAIStudioMockc                 C   sò  t ddd}tƒ }t ¡  | |g¡¡}t|ƒ}d}||k}|set d|fd||f¡dt	 
¡ v s5t t¡r:t t¡nddt	 
¡ v sFt |¡rKt |¡ndt |¡t |¡d	œ }d
d|i }tt |¡ƒ‚d  } }}|d }	|	j}tj}
||
k}|s³t d|fd||
f¡t |	¡t |¡dt	 
¡ v s˜t t¡rt t¡ndt |
¡dœ }dd|i }tt |¡ƒ‚d  }	 } }}
|d }	|	j}d }||u}|sñt d|fd||f¡t |	¡t |¡t |¡dœ }d
d|i }tt |¡ƒ‚d  }	 } }}d}	|d }|j}|	|v }|s0t d|fd|	|f¡t |	¡t |¡t |¡dœ }d
d|i }tt |¡ƒ‚d  }	 } }}d}	|d }|j}|	|v }|sot d|fd|	|f¡t |	¡t |¡t |¡dœ }d
d|i }tt |¡ƒ‚d  }	 } }}d S )NÚfakeT©Úapi_keyÚ	mock_modeé   ©ú==©z0%(py3)s
{%(py3)s = %(py0)s(%(py1)s)
} == %(py6)sÚlenÚ	responses©Úpy0Úpy1Úpy3Úpy6úassert %(py8)sÚpy8r   ©zK%(py3)s
{%(py3)s = %(py1)s.status
} == %(py7)s
{%(py7)s = %(py5)s.SUCCESS
}r   ©r    r!   Úpy5Úpy7úassert %(py9)sÚpy9)úis not)z>%(py3)s
{%(py3)s = %(py1)s.transcription_data
} is not %(py6)s)r    r!   r"   Útranscription©Úin©z:%(py1)s in %(py6)s
{%(py6)s = %(py4)s.transcription_data
}©r    Úpy4r"   Úspeaker)r   r   ÚasyncioÚget_event_loopÚrun_until_completeÚ
send_batchr   Ú
@pytest_arÚ_call_reprcompareÚ@py_builtinsÚlocalsÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚstatusr   ÚSUCCESSÚtranscription_data©ÚselfÚproviderÚreqr   Ú@py_assert2Ú@py_assert5Ú@py_assert4Ú@py_format7Ú@py_format9Ú@py_assert0Ú@py_assert6Ú@py_format8Ú@py_format10Ú@py_assert3r   r   r   Útest_mock_single_request   s   
ÿ® |~‚z)TestAIStudioMock.test_mock_single_requestc                 C   sP  t ddd}dd„ tdƒD ƒ}t ¡  | |¡¡}t|ƒ}d}||k}|sjt d|fd||f¡d	t	 
¡ v s:t t¡r?t t¡nd	d
t	 
¡ v sKt |¡rPt |¡nd
t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}dd„ |D ƒ}	t|	ƒ}
|
s¢ddt	 
¡ v s‰t t¡rŽt t¡ndt |	¡t |
¡dœ }tt |¡ƒ‚d  }	}
d S )Nr   Tr   c                 S   ó   g | ]
}t d |d›ƒ‘qS ©Úseg_Ú03d©r   ©Ú.0Úir   r   r   Ú
<listcomp>!   ó    z4TestAIStudioMock.test_mock_batch.<locals>.<listcomp>é
   r   r   r   r   r   r#   r$   c                 s   s    | ]	}|j tjkV  qd S )N)r?   r   r@   )rW   Úrr   r   r   Ú	<genexpr>&   s   € z3TestAIStudioMock.test_mock_batch.<locals>.<genexpr>z,assert %(py4)s
{%(py4)s = %(py0)s(%(py2)s)
}Úall)r   Úpy2r1   )r   Úranger3   r4   r5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r^   )rC   rD   Úreqsr   rF   rG   rH   rI   rJ   Ú@py_assert1rO   Ú@py_format5r   r   r   Útest_mock_batch   s   ÿ®pz TestAIStudioMock.test_mock_batchc           
      C   sÔ  t ddd}tƒ }t ¡  | |g¡¡}|d j}|j}d}||k}|sXt 	d|fd||f¡dt
 ¡ v s9t |¡r>t |¡ndt |¡t |¡dœ }d	d
|i }	tt |	¡ƒ‚d  } }}|j}d}||k}|st 	d|fd||f¡dt
 ¡ v s~t |¡rƒt |¡ndt |¡t |¡dœ }d	d
|i }	tt |	¡ƒ‚d  } }}|j}d}||u }|sât 	d|fd||f¡dt
 ¡ v sÃt |¡rÈt |¡ndt |¡t |¡dœ }d	d
|i }	tt |	¡ƒ‚d  } }}d S )Nr   Tr   r   )ú>)z3%(py2)s
{%(py2)s = %(py0)s.input_tokens
} > %(py5)sÚusage)r   r_   r'   zassert %(py7)sr(   )z4%(py2)s
{%(py2)s = %(py0)s.output_tokens
} > %(py5)s)Úis)z1%(py2)s
{%(py2)s = %(py0)s.cache_hit
} is %(py5)s)r   r   r3   r4   r5   r6   Útoken_usageÚinput_tokensr7   r8   r9   r:   r;   r<   r=   r>   Úoutput_tokensÚ	cache_hit)
rC   rD   rE   r   rf   rb   rH   rO   Ú@py_format6rM   r   r   r   Útest_mock_token_usage(   s   
ÿ
ŠŠŽz&TestAIStudioMock.test_mock_token_usagec                 C   ó¬   t ddd}|j}|ƒ }d}||k}|sLt d|fd||f¡dt ¡ v s)t |¡r.t |¡ndt |¡t |¡t |¡dœ }d	d
|i }tt 	|¡ƒ‚d  } } }}d S )Nr   Tr   Úaistudior   ©zP%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.get_provider_name
}()
} == %(py7)srD   ©r   r_   r1   r(   r)   r*   )
r   Úget_provider_namer7   r8   r9   r:   r;   r<   r=   r>   ©rC   rD   rb   rO   rL   rG   rM   rN   r   r   r   Útest_provider_name3   ó    z#TestAIStudioMock.test_provider_nameN)Ú__name__Ú
__module__Ú__qualname__rP   rd   rm   rt   r   r   r   r   r      s
    	r   c                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚTestOpenRouterMockc                 C   sö  t ddd}tƒ }t ¡  | |g¡¡}t|ƒ}d}||k}|set d|fd||f¡dt	 
¡ v s5t t¡r:t t¡nddt	 
¡ v sFt |¡rKt |¡ndt |¡t |¡d	œ }d
d|i }tt |¡ƒ‚d  } }}|d }	|	j}tj}
||
k}|s³t d|fd||
f¡t |	¡t |¡dt	 
¡ v s˜t t¡rt t¡ndt |
¡dœ }dd|i }tt |¡ƒ‚d  }	 } }}
d}	|d }|j}|	|v }|sñt d|fd|	|f¡t |	¡t |¡t |¡dœ }d
d|i }tt |¡ƒ‚d  }	 } }}d S )Nr   Tr   r   r   r   r   r   r   r#   r$   r   r%   r   r&   r)   r*   r,   r-   r/   r0   )r   r   r3   r4   r5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   r?   r   r@   rA   rB   r   r   r   rP   9   s   
ÿ® €z+TestOpenRouterMock.test_mock_single_requestc           	      C   sä   t ddd}dd„ tdƒD ƒ}t ¡  | |¡¡}t|ƒ}d}||k}|sjt d|fd||f¡d	t	 
¡ v s:t t¡r?t t¡nd	d
t	 
¡ v sKt |¡rPt |¡nd
t |¡t |¡dœ }dd|i }tt |¡ƒ‚d  } }}d S )Nr   Tr   c                 S   rQ   rR   rU   rV   r   r   r   rY   E   rZ   z6TestOpenRouterMock.test_mock_batch.<locals>.<listcomp>é   r   r   r   r   r   r#   r$   )r   r`   r3   r4   r5   r6   r   r7   r8   r9   r:   r;   r<   r=   r>   )	rC   rD   ra   r   rF   rG   rH   rI   rJ   r   r   r   rd   C   s   ÿ²z"TestOpenRouterMock.test_mock_batchc                 C   rn   )Nr   Tr   Ú
openrouterr   rp   rD   rq   r)   r*   )
r   rr   r7   r8   r9   r:   r;   r<   r=   r>   rs   r   r   r   rt   K   ru   z%TestOpenRouterMock.test_provider_nameN)rv   rw   rx   rP   rd   rt   r   r   r   r   ry   8   s    
ry   )r   r   )Ú__doc__Úbuiltinsr9   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter7   Úpytestr3   Úsrc.providers.baser   r   Úsrc.providers.aistudior   Úsrc.providers.openrouterr   Ústrr   r   ry   r   r   r   r   Ú<module>   s    "	&