From 857a7364ddb9b10529593c5e9c3578eb95c1da9b Mon Sep 17 00:00:00 2001 From: salmonik Date: Sat, 18 Apr 2026 16:24:42 +0200 Subject: add a test suite Signed-off-by: salmonik --- tests/cogs/test_music_audio.py | 93 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 tests/cogs/test_music_audio.py (limited to 'tests/cogs/test_music_audio.py') diff --git a/tests/cogs/test_music_audio.py b/tests/cogs/test_music_audio.py new file mode 100644 index 0000000..b53cf95 --- /dev/null +++ b/tests/cogs/test_music_audio.py @@ -0,0 +1,93 @@ +import pytest +from unittest.mock import AsyncMock, patch, MagicMock +import os +from tests.conftest import MockApplicationContext + + +@pytest.mark.asyncio +async def test_validate_voice_channel_not_in_voice(): + from cogs.music.audio_playback import AudioPlaybackManager + + mock_ctx = MagicMock() + mock_ctx.author.voice = None + mock_ctx.respond = AsyncMock() + + result = await AudioPlaybackManager.validate_voice_channel(mock_ctx) + + assert result is None + mock_ctx.respond.assert_called_once() + + +@pytest.mark.asyncio +async def test_validate_voice_channel_in_voice(): + from cogs.music.audio_playback import AudioPlaybackManager + + mock_channel = MagicMock() + mock_ctx = MagicMock() + mock_ctx.author.voice = MagicMock() + mock_ctx.author.voice.channel = mock_channel + mock_ctx.respond = AsyncMock() + + result = await AudioPlaybackManager.validate_voice_channel(mock_ctx) + + assert result == mock_channel + + +@pytest.mark.asyncio +async def test_prepare_file_source_file_not_found(): + from cogs.music.audio_playback import AudioPlaybackManager + + display_name, absolute_path = await AudioPlaybackManager.prepare_file_source("/nonexistent/file.mp3") + + assert display_name is None + assert absolute_path is None + + +@pytest.mark.asyncio +async def test_prepare_file_source_absolute_path(): + from cogs.music.audio_playback import AudioPlaybackManager + + with patch('os.path.exists', return_value=True): + with patch('os.path.isabs', return_value=True): + display_name, absolute_path = await AudioPlaybackManager.prepare_file_source("/tmp/test.mp3") + + assert display_name == "test" + assert absolute_path == "/tmp/test.mp3" + + +@pytest.mark.asyncio +async def test_prepare_source_url(): + from cogs.music.audio_playback import AudioPlaybackManager + + source, display_name, is_url = await AudioPlaybackManager.prepare_source(MagicMock(), "https://example.com/stream") + + assert is_url == True + assert source == "https://example.com/stream" + + +@pytest.mark.asyncio +async def test_prepare_source_local_file(): + from cogs.music.audio_playback import AudioPlaybackManager + + with patch('os.path.exists', return_value=True): + source, display_name, is_url = await AudioPlaybackManager.prepare_source(MagicMock(), "/tmp/test.mp3") + + assert is_url == False + assert display_name == "test" + + +@pytest.mark.asyncio +async def test_cleanup_temp_file(): + from cogs.music.audio_playback import AudioPlaybackManager + + with patch('os.path.exists', return_value=True): + with patch('os.remove'): + await AudioPlaybackManager.cleanup_temp_file("/tmp/test.mp3") + + +@pytest.mark.asyncio +async def test_cleanup_temp_file_not_exists(): + from cogs.music.audio_playback import AudioPlaybackManager + + with patch('os.path.exists', return_value=False): + await AudioPlaybackManager.cleanup_temp_file("/nonexistent/file.mp3") \ No newline at end of file -- cgit v1.2.3