@mock.patch('bot.src.telegram_bot.tools.voice_file_tools.delete_voice_message')
@mock.patch('bot.src.telegram_bot.tools.voice_file_tools.save_voice_message')
@mock.patch('bot.src.voice_recognition.chatgpt.openai')
@mock.patch('bot.src.voice_recognition.openai_stt.openai')
@pytest.mark.asyncio
async def test_voice_message_handler(
mock_openai_whisper, mock_openai_chatgpt,
mock_save_voice_message, mock_delete_voice_message
):
mocked_bot = MockedBot(
MessageHandler(voice_messages.voice_message_handler)
)
with open(
Path(__file__).parent.resolve() / 'test_whisper_response.json',
'r',
encoding='utf-8',
) as file:
test_whisper_response = json.load(file)
mock_openai_whisper.Audio.atranscribe.side_effect = (
mock.AsyncMock(return_value=test_whisper_response))
with open(
Path(__file__).parent.resolve() / 'test_chatgpt_response.json',
'r',
encoding='utf-8',
) as file:
test_chatgpt_response = json.load(file)
mock_openai_chatgpt.openai.ChatCompletion.acreate.side_effect = (
mock.AsyncMock(return_value=test_chatgpt_response))
mock_save_voice_message.return_value = (
Path(__file__).parent.resolve() / 'test_voice.ogg'
)
mock_delete_voice_message.return_value = None
sender = await mocked_bot.query(MESSAGE_WITH_VOICE.as_object())
answer_message = sender.send_message.fetchone().text
with open(
Path(__file__).parent.resolve() / 'correct_response.txt',
'r',
encoding='utf-8',
) as file:
correct_message = file.read()
assert answer_message == correct_message
Почему мокирование для mock_openai_whisper.Audio.atranscribe сработало, а для mock_openai_chatgpt.openai.ChatCompletion.acreate нет?
Выдает ошибку
async def send_text_to_post_processing(self, text):
> result = await openai.ChatCompletion.acreate(
api_key=self._api_key,
model=self._model,
messages=self._create_prompt(text),
)
E TypeError: object MagicMock can't be used in 'await' expression