135 lines
4.8 KiB
Python
135 lines
4.8 KiB
Python
import pytest
|
|
from unittest.mock import patch, MagicMock, AsyncMock
|
|
import sys
|
|
import os
|
|
|
|
# Dodanie katalogu nadrzędnego do ścieżki dla importów
|
|
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
|
|
|
|
from src.openai_utils import summarize_text
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarize_text_success():
|
|
# Przygotowanie mocka dla odpowiedzi OpenAI
|
|
mock_choice = MagicMock()
|
|
mock_message = MagicMock()
|
|
|
|
mock_message.content = "To jest przykładowe streszczenie filmu."
|
|
mock_choice.message = mock_message
|
|
|
|
mock_response = MagicMock()
|
|
mock_response.choices = [mock_choice]
|
|
|
|
# Testowy tekst transkrypcji
|
|
test_transcript = "To jest przykładowa transkrypcja filmu YouTube, " \
|
|
"która zostanie wysłana do API OpenAI w celu streszczenia. " \
|
|
"Zawiera kilka zdań o różnej tematyce."
|
|
|
|
# Test funkcji z mockiem
|
|
with patch('src.openai_utils.client.chat.completions.create',
|
|
new=AsyncMock(return_value=mock_response)) as mock_create:
|
|
result = await summarize_text(test_transcript)
|
|
|
|
# Sprawdzenie wyników
|
|
assert result == "To jest przykładowe streszczenie filmu."
|
|
assert mock_create.called
|
|
|
|
# Sprawdzenie czy parametry zostały przekazane poprawnie
|
|
call_args = mock_create.call_args[1]
|
|
assert call_args['model'] == "gpt-3.5-turbo"
|
|
assert call_args['temperature'] == 0.5
|
|
assert call_args['max_tokens'] == 150
|
|
|
|
# Sprawdzenie wiadomości
|
|
messages = call_args['messages']
|
|
assert len(messages) == 2
|
|
assert messages[0]['role'] == "system"
|
|
assert messages[1]['role'] == "user"
|
|
assert test_transcript in messages[1]['content'] # Sprawdzenie czy transkrypcja jest w prompcie
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarize_text_with_transcript_from_youtube():
|
|
# Przygotowanie mocka dla odpowiedzi OpenAI
|
|
mock_choice = MagicMock()
|
|
mock_message = MagicMock()
|
|
|
|
mock_message.content = "Film przedstawia dyskusję na temat sztucznej inteligencji i jej zastosowań w życiu codziennym."
|
|
mock_choice.message = mock_message
|
|
|
|
mock_response = MagicMock()
|
|
mock_response.choices = [mock_choice]
|
|
|
|
# Przykładowa transkrypcja z YouTube
|
|
youtube_transcript = "To jest przykładowa transkrypcja z YouTube. " \
|
|
"Zawiera dyskusję o sztucznej inteligencji. " \
|
|
"Przedstawia różne zastosowania AI w codziennym życiu."
|
|
|
|
# Test funkcji
|
|
with patch('src.openai_utils.client.chat.completions.create',
|
|
new=AsyncMock(return_value=mock_response)) as mock_create:
|
|
result = await summarize_text(youtube_transcript)
|
|
|
|
# Sprawdzenie wyników
|
|
assert result == "Film przedstawia dyskusję na temat sztucznej inteligencji i jej zastosowań w życiu codziennym."
|
|
assert mock_create.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarize_empty_text():
|
|
# Test funkcji z pustym tekstem
|
|
with patch('src.openai_utils.client.chat.completions.create') as mock_create:
|
|
result = await summarize_text("")
|
|
|
|
# Sprawdzenie wyników
|
|
assert result is None
|
|
assert not mock_create.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarize_text_api_error():
|
|
# Symulacja błędu API
|
|
with patch('src.openai_utils.client.chat.completions.create',
|
|
new=AsyncMock(side_effect=Exception("API Error"))) as mock_create:
|
|
# Test funkcji
|
|
result = await summarize_text("Jakiś tekst transkrypcji")
|
|
|
|
# Sprawdzenie wyników
|
|
assert result is None
|
|
assert mock_create.called
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_summarize_text_prompt_format():
|
|
# Przygotowanie mocka
|
|
mock_choice = MagicMock()
|
|
mock_message = MagicMock()
|
|
|
|
mock_message.content = "Streszczenie"
|
|
mock_choice.message = mock_message
|
|
|
|
mock_response = MagicMock()
|
|
mock_response.choices = [mock_choice]
|
|
|
|
# Testowy tekst
|
|
test_transcript = "Testowa transkrypcja"
|
|
|
|
# Przygotowanie spy do przechwycenia argumentów
|
|
with patch('src.openai_utils.client.chat.completions.create',
|
|
new=AsyncMock(return_value=mock_response)) as mock_create:
|
|
# Test funkcji
|
|
await summarize_text(test_transcript)
|
|
|
|
# Sprawdzenie czy został wywołany
|
|
assert mock_create.called
|
|
|
|
# Pobranie argumentów wywołania
|
|
call_args = mock_create.call_args[1]
|
|
messages = call_args['messages']
|
|
|
|
# Sprawdzenie czy prompt zawiera odpowiedni format
|
|
user_prompt = messages[1]['content']
|
|
assert "Streść poniższy transkrypt filmu z YouTube" in user_prompt
|
|
assert "Transkrypt:" in user_prompt
|
|
assert test_transcript in user_prompt |