refactor: Introduce utility functions for exception handling and database operations; update auth and playlist services to use new exception methods
All checks were successful
Backend CI / test (push) Successful in 3m58s
All checks were successful
Backend CI / test (push) Successful in 3m58s
This commit is contained in:
@@ -9,6 +9,12 @@ from fastapi import FastAPI
|
||||
from app.models.sound import Sound
|
||||
from app.models.user import User
|
||||
from app.api.v1.sounds import get_vlc_player, get_sound_repository, get_credit_service
|
||||
from app.utils.test_helpers import (
|
||||
override_dependencies,
|
||||
create_mock_vlc_services,
|
||||
configure_mock_sound_play_success,
|
||||
create_mock_vlc_stop_result,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -24,34 +30,29 @@ class TestVLCEndpoints:
|
||||
authenticated_user: User,
|
||||
):
|
||||
"""Test successful sound playback via VLC."""
|
||||
# Set up mocks
|
||||
mock_vlc_service = AsyncMock()
|
||||
mock_repo = AsyncMock()
|
||||
mock_credit_service = AsyncMock()
|
||||
# Set up mocks using helper
|
||||
mocks = create_mock_vlc_services()
|
||||
|
||||
# Set up test data
|
||||
mock_sound = Sound(
|
||||
id=1,
|
||||
type="SDB",
|
||||
name="Test Sound",
|
||||
filename="test.mp3",
|
||||
duration=5000,
|
||||
size=1024,
|
||||
hash="test_hash",
|
||||
)
|
||||
# Configure mocks for successful play
|
||||
sound_data = {
|
||||
"id": 1,
|
||||
"type": "SDB",
|
||||
"name": "Test Sound",
|
||||
"filename": "test.mp3",
|
||||
"duration": 5000,
|
||||
"size": 1024,
|
||||
"hash": "test_hash",
|
||||
}
|
||||
configure_mock_sound_play_success(mocks, sound_data)
|
||||
|
||||
# Configure mocks
|
||||
mock_repo.get_by_id.return_value = mock_sound
|
||||
mock_credit_service.validate_and_reserve_credits.return_value = None
|
||||
mock_credit_service.deduct_credits.return_value = None
|
||||
mock_vlc_service.play_sound.return_value = True
|
||||
# Use dependency override helper
|
||||
overrides = {
|
||||
get_vlc_player: lambda: mocks["vlc_service"],
|
||||
get_sound_repository: lambda: mocks["sound_repository"],
|
||||
get_credit_service: lambda: mocks["credit_service"],
|
||||
}
|
||||
|
||||
# Override dependencies
|
||||
test_app.dependency_overrides[get_vlc_player] = lambda: mock_vlc_service
|
||||
test_app.dependency_overrides[get_sound_repository] = lambda: mock_repo
|
||||
test_app.dependency_overrides[get_credit_service] = lambda: mock_credit_service
|
||||
|
||||
try:
|
||||
async with override_dependencies(test_app, overrides):
|
||||
response = await authenticated_client.post("/api/v1/sounds/vlc/play/1")
|
||||
|
||||
assert response.status_code == 200
|
||||
@@ -61,13 +62,8 @@ class TestVLCEndpoints:
|
||||
assert "Test Sound" in data["message"]
|
||||
|
||||
# Verify service calls
|
||||
mock_repo.get_by_id.assert_called_once_with(1)
|
||||
mock_vlc_service.play_sound.assert_called_once_with(mock_sound)
|
||||
finally:
|
||||
# Clean up dependency overrides (except get_db which is needed for other tests)
|
||||
test_app.dependency_overrides.pop(get_vlc_player, None)
|
||||
test_app.dependency_overrides.pop(get_sound_repository, None)
|
||||
test_app.dependency_overrides.pop(get_credit_service, None)
|
||||
mocks["sound_repository"].get_by_id.assert_called_once_with(1)
|
||||
mocks["vlc_service"].play_sound.assert_called_once()
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_play_sound_with_vlc_sound_not_found(
|
||||
@@ -199,21 +195,20 @@ class TestVLCEndpoints:
|
||||
authenticated_user: User,
|
||||
):
|
||||
"""Test successful stopping of all VLC instances."""
|
||||
# Set up mock
|
||||
# Set up mock using helper
|
||||
mock_vlc_service = AsyncMock()
|
||||
mock_result = {
|
||||
"success": True,
|
||||
"processes_found": 3,
|
||||
"processes_killed": 3,
|
||||
"processes_remaining": 0,
|
||||
"message": "Killed 3 VLC processes",
|
||||
}
|
||||
mock_result = create_mock_vlc_stop_result(
|
||||
success=True,
|
||||
processes_found=3,
|
||||
processes_killed=3,
|
||||
processes_remaining=0
|
||||
)
|
||||
mock_vlc_service.stop_all_vlc_instances.return_value = mock_result
|
||||
|
||||
# Override dependency
|
||||
test_app.dependency_overrides[get_vlc_player] = lambda: mock_vlc_service
|
||||
# Use dependency override helper
|
||||
overrides = {get_vlc_player: lambda: mock_vlc_service}
|
||||
|
||||
try:
|
||||
async with override_dependencies(test_app, overrides):
|
||||
response = await authenticated_client.post("/api/v1/sounds/vlc/stop-all")
|
||||
|
||||
assert response.status_code == 200
|
||||
@@ -226,9 +221,6 @@ class TestVLCEndpoints:
|
||||
|
||||
# Verify service call
|
||||
mock_vlc_service.stop_all_vlc_instances.assert_called_once()
|
||||
finally:
|
||||
# Clean up dependency override
|
||||
test_app.dependency_overrides.pop(get_vlc_player, None)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_stop_all_vlc_instances_no_processes(
|
||||
@@ -238,20 +230,20 @@ class TestVLCEndpoints:
|
||||
authenticated_user: User,
|
||||
):
|
||||
"""Test stopping VLC instances when none are running."""
|
||||
# Set up mock
|
||||
# Set up mock using helper
|
||||
mock_vlc_service = AsyncMock()
|
||||
mock_result = {
|
||||
"success": True,
|
||||
"processes_found": 0,
|
||||
"processes_killed": 0,
|
||||
"message": "No VLC processes found",
|
||||
}
|
||||
mock_result = create_mock_vlc_stop_result(
|
||||
success=True,
|
||||
processes_found=0,
|
||||
processes_killed=0,
|
||||
message="No VLC processes found"
|
||||
)
|
||||
mock_vlc_service.stop_all_vlc_instances.return_value = mock_result
|
||||
|
||||
# Override dependency
|
||||
test_app.dependency_overrides[get_vlc_player] = lambda: mock_vlc_service
|
||||
# Use dependency override helper
|
||||
overrides = {get_vlc_player: lambda: mock_vlc_service}
|
||||
|
||||
try:
|
||||
async with override_dependencies(test_app, overrides):
|
||||
response = await authenticated_client.post("/api/v1/sounds/vlc/stop-all")
|
||||
|
||||
assert response.status_code == 200
|
||||
@@ -260,9 +252,6 @@ class TestVLCEndpoints:
|
||||
assert data["processes_found"] == 0
|
||||
assert data["processes_killed"] == 0
|
||||
assert data["message"] == "No VLC processes found"
|
||||
finally:
|
||||
# Clean up dependency override
|
||||
test_app.dependency_overrides.pop(get_vlc_player, None)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_stop_all_vlc_instances_partial_success(
|
||||
|
||||
Reference in New Issue
Block a user